1. ホーム
  2. データベース
  3. エスキューエルライト

SQLiteチュートリアル(I)。SQLiteデータベース入門

2022-01-21 19:56:09

I. はじめに

    SQLiteは現在最も人気のあるオープンソースの組み込み用データベースです。BerkeleyDB や MemBASE など、他の多くの組み込み用ストレージエンジン (NoSQL) と比較して、SQLite は標準的な SQL 構文、トランザクション、データテーブル、インデックスなど、リレーショナルデータベースが持つ基本機能のいくつかを非常によくサポートすることができます。実際、SQLiteはリレーショナルデータベースの基本的な機能を多く持っていますが、アプリケーションのシナリオが異なるため、より比較できるものではありません。以下、SQLite の主な機能を列挙します。

    1). 管理が簡単であり、管理不能とさえ考えられる。
    2). 操作が簡単なSQLiteは、プラットフォーム間でシームレスに移植可能なデータベースファイルを生成します。
    3). 静的ライブラリ、動的ライブラリなど、様々な形で他のアプリケーションに組み込むことが非常に容易である。
    4). メンテナンスが容易であること。

    要約すると、SQLite の主な強みは、器用さ、スピード、そして高い信頼性です。SQLite の設計者は、この目標を達成するために機能面で多くの重要なトレードオフを行い、高い並行性、細かいアクセス制御(例:行レベルロック)、豊富な組み込み関数、ストアドプロシージャ、複雑な SQL 文などの RDBMS 主要機能へのサポートを一部失いました。これらの機能を犠牲にすることでシンプルさを実現し、それが効率性と信頼性につながっているのです。
II. SQLiteの主な利点。

    1. 一貫したファイル形式。

    SQLite の公式ドキュメントには、SQLite を Oracle や PostgreSQL と比較するのではなく、fopen や fwrite のように考えるべきだと説明されています。私たちがカスタムフォーマットしたデータファイルに比べ、SQLite はラージエンド・スモールエンド、32/64 ビットなどのプラットフォーム関連の問題で移植性が良いだけではなく、特定の情報に基づいてインデックスを作成して、その種のデータへのアクセスやソートのパフォーマンスを改善するなど、効率の良いデータアクセスを実現し、通常のファイル操作では有効に保証できない、SQLite によるトランザクション機能を提供します。
    2. 組み込み型端末やモバイル端末で

    PDAやスマートフォンなどのモバイル機器では、SQLiteが実行時に占有するリソースが少なく、管理のオーバーヘッドも必要ないため、そのメリットは疑いようがない。
    3. 内部データベース。

    アプリケーションのシナリオによっては、最終的にデータベース・サーバーに挿入されるデータの有効性を確保するために、データ・フィルタリングやデータ・クリーニングを実行する必要があります。データが正当かどうかは、1レコードだけでは判断できず、少し前の過去のデータを使って特別な計算をし、その計算結果で現在のデータが正当かどうかを判断しなければならないこともある。このような用途では、この部分の履歴データをSQLiteでバッファリングしておけばよいのです。もう一つ簡単なシナリオとして、統計データの事前計算もSQLiteに当てはまります。例えば、リアルタイムにデータを収集するサービスプログラムを実行している場合、 10秒ごとにデータを集計して1時間ごとの統計データを形成する必要があるかもしれません。この統計データは、ユーザーが問い合わせをする際のデータ量を大幅に削減できるため、フロントエンド・プログラムの問い合わせ効率を大幅に向上させることができます。このようなアプリケーションでは、1時間以内に収集したデータをすべてSQLiteにキャッシュしておき、全ポイントに達した時点でキャッシュデータを計算した後、そのデータを空にすることができる。
[...] [...] [...] [...] [...]     [...] [...] [...] [...]     [...] [...] [...] [...] [...] [...] [...] [...] [...] [...]     [...] [...] [...] [...]     [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...]     [...] [...] [...] [...]     [...] [...] [...] [...] [...] [...] [...] [...] [...] [...]     [...] [...] [...] [...]     [...] [...] [...] [...] [...] [...] [...] [...] [...] [...]     [...] [...] [...] [...]     [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...]

    1.ゼロコンフィギュレーション。

    SQLite 自身は初期化設定ファイルを必要とせず、インストールやアンインストールの処理もありません。確かにサーバインスタンスを起動したり停止したりすることもありません。また、使用中にユーザーを作成したり、パーミッションを分割したりする必要もありません。電源障害やホスト障害など、システム障害が発生しても、SQLiteには何のアクションも必要ありません。
    2. 別サーバーがない。


    SQLiteはメインアプリケーションと同じプロセス空間で動作する組み込みデータベースなので、両者間の通信はすべてプロセス内となり、プロセス間通信よりも効率的です。しかし、この構造は実際にはあまり保護されていないことに注意する必要があります。例えば、アプリケーションが問題でクラッシュした場合、SQLiteは依存しているプロセスと同じプロセス空間にいるため、SQLiteも終了します。しかし、スタンドアローンのサーバプロセスでは、そのような問題はなく、より限定された環境で仕事をすることになります。
    3. シングルディスクのファイル。


    SQLiteのデータベースは、ファイルシステム上の1つのディスクファイルに格納されており、権限さえあれば自由にアクセス、コピーすることができ、ポータブルで共有しやすいという主な利点があります。他のデータベースエンジンは、基本的にデータベースをディスクのディレクトリに格納し、そのディレクトリ内のファイル群がデータベースのデータファイルを構成しています。これらのファイルには直接アクセスできますが、私たちのプログラムでは操作できず、データベースインスタンスプロセスのみが操作できます。これは、より高いセキュリティとより良いパフォーマンスをもたらすという利点がありますが、インストールとメンテナンスの複雑さという代償を伴います。
    4. プラットフォームにとらわれない。

    これは先ほど説明したとおりです。SQLiteとは対照的に、多くのデータベースエンジンはこの方法で直接データをバックアップすることができず、データベースシステムが提供する様々なダンプ・リストアツールを使って、データベースからローカルファイルにデータをエクスポートし、それをターゲットデータベースにロードする方法しかないのです。この方法には明らかな効率上の問題があり、まず別のファイルにエクスポートする必要があり、データ量が多い場合はエクスポート作業に時間がかかる。しかし、これは操作のごく一部に過ぎず、データのインポートにはもっと時間がかかることが多い。データはインポート時に多くの検証を必要とし、保存時には単純に順次保存されるのではなく、特定のデータ構造、アルゴリズム、ポリシーに従って異なるファイルロケーションに保存されます。そのため、データベースファイルを直接コピーする場合と比較して、パフォーマンスが非常に不格好になる。
    5. 弱いタイプ。

    静的な型をサポートする多くのデータベースとは異なり、SQLiteのデータ型は値のプロパティとして扱われます。そのため、データテーブルのカラムの場合、テーブルを宣言したときにカラムの型が与えられていたとしても、挿入するときに任意の型のデータを挿入することができます。たとえば、Integerカラムが文字列'hello'として預けられるような場合です。この機能の唯一の例外は、整数の主キーカラムで、この場合、そのカラムには整数のデータしか格納できない。
    6. VMコードにコンパイルされたSQLステートメント。

    多くのデータベース製品は、SQL文を複雑なネストされたデータ構造に解析し、それをエグゼキュータに渡して、データ構造を走査して指定された処理を完了させます。これに対して、SQLite は SQL 文をバイトコードにコンパイルしてから、自身の仮想マシンに渡して実行させます。この方法は、より良いパフォーマンスとより良いデバッグ機能を提供します。