Third impact
最終更新: 2010-04-24
更新者: 00000001
SQLite翻訳文書セットの一部です。
随時翻訳を続けています。

SQLite の適切な使用

単純であることに主な設計目標を置く点で、 SQLite はたいていの他の SQL データベースエンジンと異なっています:

  • 管理が簡単
  • 操作が簡単
  • プログラムへの組み込みが簡単
  • 保守、カスタマイズが簡単

小さくて速いので、多くの人は SQLite が好きです。 しかしそれらの特色は、ただの幸せなアクシデントに過ぎません。 ユーザーは SQLite の信頼性が非常に高いことに気付きます。 信頼性は単純さの結果です。 SQLite は小さく、速く、信頼性が高いのです。 しかし、何よりもまず第一に、 SQLite はシンプルであろうと努力します。

データベースエンジンの単純さは、やろうとする事によって長所にも短所にもなり得ます。 単純さを達成するために、 SQLite は高い並列性、きめ細かなアクセス制御、 組込み関数、ストアドプロシージャ、秘伝の SQL 言語の機能、 XML そして Java 拡張の豊富なセット、 テラあるいはペタバイトスケーラビリティなどのように、 若干の人々が有用に思う他の機能を犠牲にしなければなりませんでした。 もしあなたがこれらの特性をいくらか必要として、 そしてそれらがもたらす付加的な複雑さを厭わないなら、 おそらくSQLite はあなたのためのデータベースではありません。 SQLite はエンタープライズ志向ではありません。 オラクルあるいは PostgreSQL に対抗することは意図しませんでした。

SQLite を使うのが妥当な場合の基本的な原則。
管理の単純さ、実装と保守がエンタープライズデータベースエンジンが提供する 無数の複雑な機能より重要な状況で SQLite を使ってください。 結局、単純さがより良い選択である状況は、多くの人が思うよりありふれています。

SQLite を使うと良い場合

  • ウェブサイト

    SQLite は通常(例えば、すべてのウェブサイトの99.9%) 低から中程度のトラフィックのウェブサイトのためのデータベースエンジンとして 万事好調に機能するでしょう。 SQLite が処理することができる Web トラフィックの量は、 当然、ウェブサイトがどれほど頻繁にそのデータベースを使うかによります。 一般的に言って、10万ヒット / 日以下しかないどんなサイトでも SQLite は良好に機能するでしょう。 10万ヒット / 日は、困難な上限ではなく、控えめな見積もりです。 SQLite は、その10倍のトラフィック量で機能することを実証されました。

  • 組み込みデバイスとアプリケーション

    SQLite データベースがほとんど管理を必要としないので、 SQLite は人的なサポートがなく放っておかれても 機能しなくてはならない装置やサービスのための良い選択枝です。 SQLite は携帯電話、 PDA 、セットトップ・ボックス、 あるいはアプライアンス用途と良い相性です。 ダウンロード可能なコンシューマアプリケーションでも 同様に組み込みのデータベースとしてうまく機能します。

  • アプリケーションファイル形式

    SQLite はディスク上のファイル形式として金融の分析ツール、 CAD パッケージ、記録保持のプログラムのような デスクトップアプリケーションのために使われ大きな成功を収めました。 伝統的な「ファイル / 開く」操作で sqlite3_open() して、 そして内容への排他的なアクセスを得るために BEGIN TRANSACTION を実行します。 「ファイル / 保存」で COMMIT 、そしてそれに続いて別の BEGIN TRANSACTION をします。 トランザクションを使う事で、アプリケーションファイルへの更新がアトミックで、 永続的で、独立していて、そして整合性があることが保証されます。

    データベースへ一時的なトリガーを(一時的な)アンドゥ / リドゥログテーブルの中に すべての変更を記録するために追加する事が出来ます。 ユーザーがアンドゥやリドゥボタンを押したとき、 これらの変更を再生するようにします。 このテクニックを使って、無制限のアンドゥ / リドゥ実装を 驚くほど小さいコードで書くことができます。

  • 特別なディスクファイルの置き換え

    多くのプログラムが fopen() 、 fread() と fwrite() を 自家製フォーマットでデータファイルを作成して管理するために使います。 SQLite はこれらの特別なデータファイルの置換として特にうまく機能します。

  • 内部的、あるいは一時的なデータベース

    多様な方法でふるい分けてソートしなくてはならない多くのデータを持っているプログラムでは、 必要な書式と順序でデータを抽出するためにメモリー上の SQLite データベースに データをロードして結合と ORDER BY 節で問合せを使うと 手作業で同じ操作をコードしようとするよりむしろ容易でしばしば速いです。 このようにして内部でSQL データベースを使うと、 新しいカラムとインデックスを問合せごとに再コードする 必要なしに付加できるので、プログラムにさらに素晴らしい柔軟性を加えます。

  • コマンドラインのデータセット分析ツール

    経験豊かな SQL ユーザーは雑多なデータセットを分析するコマンドライン sqlite プログラムを使うことができます。 生データを CSV ファイルから読み込むことができます。 そのデータは無数の集計レポートを生成するためにスライスして細切れに出来ます。 ウェブサイトログ分析、スポーツ統計値分析、プログラミングメトリックスの編集や 実験結果の分析などに使えます。

    あなたはもちろん、エンタープライズ C/S データベースでも同じことをすることができます。 この状況で SQLite を使う利点は、 SQLite のセットアップのほうがずっと簡単なこと、 そして結果として生成されるデータベースがフロッピーディスクや フラッシュメモリスティックに保存することができる、 あるいは同僚にメールできる単一のファイルであるということです。

  • デモあるいはテスト時のエンタープライズデータベースの代役

    あなたがエンタープライズデータベースエンジンの クライアントアプリケーションを書いているなら、 異なった多くの種類の SQL データベースエンジンに接続することを可能にする 一般的なデータベースバックエンドを使うことは理にかなっています。 一歩踏み込んで、サポートされるデータベースの中に SQLite を含めること、 そして静的に SQLite エンジンとクライアントを接続することは大変合理的です。

  • データベース教育

    なぜなら、セットアップと使用が単純ですから。 (インストールは簡単です。コンピューターに実行可能な sqlitesqlite.exe をコピーして実行するだけです。) SQLite は、SQL を教える目的で使うのに適したデータベースエンジンです。 学生たちは、簡単に好きなだけのデータベースを作る事が出来、 意見や採点のために講師にデータベースをメールで送る事が出来ます。 RDBMSがどのように実行されるか研究する事に興味を持つ更に高度な学生たちに、 モジュール式でコメントが付き文書化されている SQLite コードは 良い基盤の役割を果たすでしょう。 SQLite がほかのデータベースエンジンがどのように実装されているかの 正確なモデルだとは言いませんが、 SQLite がどのように動くか理解する学生は、 より素早くほかのシステムの操作原理を理解する事が出来るでしょう。

  • 実験的な SQL 言語の拡張

    新しい実験的なデータベース言語の機能やアイデアの試作品を作る場合、 シンプルなモジュール式デザインの SQLite は良いプラットフォームになります。

その他の RDBMS のほうが適切な状況

  • C/S アプリケーション

    もし、ネットワーク越しに多量のクライアントプログラムが 共通のデータベースにアクセスするようにするなら、 SQLite の代わりに C/S 型データベースエンジンをを使うことを考えたほうが良いでしょう。 SQLite はネットワークファイルシステムで機能するでしょう。 しかし、たいていのネットワークファイルシステムにある遅延のため パフォーマンスは低いでしょう。 多くのネットワークファイルシステム実装のロックロジックには (UNIX と Windows 両方で)バグがあります。 もし、本来あるべきようにファイルロックが機能しないなら、 2つ以上のクライアントプログラムが同時にひとつのデータベースの同じ部分を 変更してデータベースの破壊をもたらすかもしれません。 この問題は基盤となるファイルシステム実装のバグによるものなので、 SQLite がこれを防ぐために出来る事は何もありません。

    ネットワークファイルシステムを通して多くのコンピュータから同時に 同一のデーターベースにアクセスされるような状況で SQLite を使うのを 避けるのは良い原則です。

  • 大きなウェブサイト

    SQLite は通常ウェブサイトへのデータベースバックエンドとしてうまく動くでしょう。 しかし、ウェブサイトがとても込み合って別個のコンピューターに データベースコンポーネントを切り離す事を考えるなら、 確実に SQLite の代わりにエンタープライズクラスの C/S データベースエンジンの 使用を考慮するべきです。

  • とてつもなく大きなデータセット

    SQLite でトランザクションを開始 (明示的な BEGIN...COMMIT の中にない書込み操作の前に自動的に起こる)するとき、 エンジンはディスクファイルに対してロールバックジャーナルの管理を補助する ダーティーページビットマップを割り当てなければ生りません。 SQLite はデータベース 1MB ごとに256バイトの RAM を必要とします。 小さなデータベースで必要になるメモリー量は問題になりませんが、 データベースが数ギガバイトクラスになると ビットマップの大きさが非常に大きくなる場合があります。 もし、数十GBのデータを保存して変更する必要があるなら、 ほかのデータベースエンジンの利用を考えたほうが良いでしょう。

  • 高度な並列性

    SQLite は、すべてのデータベースファイルでリード/ライトロックを使います。 それは、プロセスがデータベースの一部から読み込んでいるなら、 その他のすべてのプロセスはデータベースのどの部分にも書くのを 阻止される事を意味します。 おなじく、どんなプロセスがひとつでもデータベースに書き込んでいるなら、 ほかのすべてのプロセスはデータベースのどの部分でも読むのを阻止されます。 たいていの状況でこれは問題になりません。 それぞれのアプリケーションが素早くそのデータベースの仕事をして先に進めば、 ロックは数十ミリ秒以上続きません。 しかし、いくつかのアプリケーションは更に多くの並列処理を必要とし、 それらのアプリケーションは別の答えを探す必要があります

This page last modified on 2005/08/16 14:44:49
お知らせ
Wiki始めました。