SQLite
SQLite(エスキューライト[1][2]、エスキューエライト[3][4])は、パブリックドメインの軽量な関係データベース管理システム (RDBMS) である。
概要
サーバとしてではなくアプリケーションに組み込んで利用される軽量のデータベースである。 一般的なRDBMSに比べて大規模な仕事には不向きだが、中小規模ならば速度に遜色はない。 また、APIは単純にライブラリを呼び出すだけであり、データの保存に単一のファイルのみを使用することが特徴である。バージョン3.3.8からは全文検索のFTS1モジュールがサポートされた。その後 FTS2 - FTS3 と強化を続けバージョン3.7.4からはFTS4モジュールがサポートされている。
特徴
- SQL92の機能の多くを実装
- 著作権を放棄しパブリックドメインに帰している
- サーバではなくライブラリ
- ライブラリは数百KB程度の小さなフットプリント
- Cランタイム以外の別途ライブラリを必要としない
- 管理ツールによるセットアップやメンテナンスを必要としない
- コマンドラインツールも使える
- バイトオーダに依存しない(2.6.3以降)、可搬性のある単一ファイル
- 最大128TiBまで
- ファイルを使わない、揮発性のインメモリデータベースとしても利用可能
- データ型を指定する必要がない
- サポートしている型は、Null/Integer/Real/Text/BLOBのみ
- Unicodeのサポート
- BLOBはメモリの許す限り
- ROWIDを持っている(しかし、3.6.18以前は外部制約キーの仕組みがない)
- トランザクションのサポート
- スレッドセーフである(バイナリによる配布ではリコンパイルが必要な場合もあり)
- ビューのサポート
- トリガーのサポート
- C言語を使って関数を追加できる
- Tclバインディングを配布キットに標準添付している
- PHP5、Python 2.5、Adobe AIRで標準サポート
- その他、C, C++, Curl, Perl, Ruby, Delphiなど多数の言語用のバインディング
- 全文検索のFTS1モジュールがサポートされ、SQL文で全文検索インデックスに対して検索できる
- Android端末の標準ライブラリとして採用されている
解説
SQLiteは本体プログラムに対して、直接リンクしたライブラリもしくは共有ライブラリやダイナミックリンクライブラリの形で利用できる、組み込み型データベースエンジンである。その特徴として、おおむね600kb前後のフットプリントでフルセットのSQLステートメントと型束縛のないデータセットを利用することができる。データベースストレージに対するアクセスも内蔵しており、ファイル及びインメモリストレージに対応している。ファイルを共有することで複数のアプリケーションがデータベースインスタンスを共有することも可能であり、サーバ・クライアントモデルではないアプリケーションローカルで使用するデータベースエンジンとしては非常に合理的な設計となっている。
正しく使用すると、SQLiteは非常にセキュアなデータベースエンジンとして使用することができる。理由として、サーバ・クライアントモデルではないので、複数のクライアントが利用するサーバが保有するデータベースインスタンスに打撃を与えることが基本的にできない。どれだけの壁を突破しようとも、アプリケーションが所有するデータベースインスタンスまでしか到達できないためである。型束縛がないことがセキュリティ上の懸念としてあげられるが、これは同様に型束縛がないスカラ型を利用できるデータベース全般に言えることでありSQLiteの本質にはなんら関係ない。
SQLiteのもう一つの特徴は、バイトオーダーに依存しない、アーキテクチャ非依存のストレージを採用していることである。このため、データベースインスタンスを格納したストレージとなったファイルは再利用性が高く、ストレージバージョンに気をつければ、アプリケーションからストレージを取り出し、全く別のOSやアーキテクチャで動作している別のアプリケーションにデータを変換することなく移すことができる。
組み込み型であること、ストレージまでネイティブコードで直接実行し、間になんらかのプロトコルやプロセス間通信がないため、その動作は非常に高速である。一度トランザクションを開始するとストレージはロックされ、トランザクション中のセッションは最大限設定値で許されたキャッシュを有効利用して動作するため、SQLという複雑高度なステートメントを使用していることをユーザーに意識させない程高速にデータベースにアクセスすることができる。これは応答性が重要なアプリケーションでは重要な要素となり、SQLiteをサーバとの中間にキャッシュとして採用する事例や、アプリケーション組み込みデータベースエンジンとしての採用を促す理由ともなっている。
標準で搭載しているデータセットの型は整数型 (INTEGER)、文字列型 (TEXT)、無制限スカラ型 (BLOB) の3種類である。実際の所INTEGER型がバイナリ値に変換されること、TEXT型がアプリケーション層に対して文字列変換が必要なヒントになり得る以外は、アプリケーションに対して型束縛が非常に緩和されている。事前に文字列スカラがどれだけの領域を必要とするかCREATE TABLEステートメント実行時に宣言する必要はないため、アプリケーションの基礎設計に対して極めて寛大であり、仕様変更のためにデータベースを変換ないしは再構築する必要がなく、アプリケーション開発を容易なものとしている。
後述のCUIベースの管理ツールを標準で備える他、複数のGUIベース管理ソフトウエアが豊富である。またストレージ仕様がアーキテクチャに依存しないため、管理ツールの直接実行が難しいシステム(組み込みソフトウエア開発等)においても、ストレージを取り出してWindowsマシン等でデータを確認したりSQLステートメントを実行することが可能である。
管理ツール
「sqlite」または「sqlite3」というコマンドラインユーティリティーが付属しており、CUIでSQLiteのデータを操作できる。このユーティリティは標準入出力を使うので、シェルスクリプトなどでバッチ処理を行うことも出来る。
またSQLiteManagerという管理ツールはバージョン2とバージョン3に対応しており、こちらは日本語メニュー表示も選択できる。ただし既定のcharsetはEUC-JPなので、UTF-8対応にするには、設定ファイルであるjapanese.inc.phpをUTF-8文字コードに書き換える必要がある。新しいデータベースを作成するには、設置するディレクトリへのパスでファイル名を指定すればよく、その後必要なテーブルを追加する。このツールはブラウザのキャッシュが効いていると、正しいデータがすぐ反映されないので、注意が必要である。
別の管理ツールとして、Mozilla FirefoxのアドオンSQLite Managerがある。WebブラウザからGUIにてデータベースに対する基本的な操作が可能である。
ODBC
SQLiteのODBCドライバがサードパーティから提供されている。SQLite 2とSQLite 3のバージョンがあり、SQLite 2向けには、さらにUTF-8対応版がある。Microsoft AccessからODBCリンクするときには、データ型をあらかじめSQLite側のCREATE TABLEで宣言しておく必要がある。そうしておかないと、全てのデータ型がintとみなされることがある。日本語文字コードはUTF-8としておけば、Access側でも正しく表示される。
書籍
- The Definitive Guide to SQLite 2006/06/19, ISBN 1-59059-673-0
- SQLite 入門 2005/09, ISBN 4-7981-0943-6
- PHP+SQLite実践サンプルブック 2005/07, ISBN 4-88337-429-7
- 改訂版PHPポケットリファレンス 2005/09, ISBN 4-7741-2502-4
- SQLite 入門 第2版 2009/05, ISBN 978-4-7981-1944-1
- SQLiteポケットリファレンス 2010/10, ISBN 978-4-7741-4394-1
- Android UIデザイン&データベースプログラミング 2011/06, ISBN 978-4-88337-761-9
脚注
関連項目
外部リンク
- SQLite Home Page
- SQLite ODBC Driver
- SQLite Developer home page
- SQLiteManager home page
- SQLiteSpy. Win32, Unicode.
- Database Master
- DaDaBIK Database Interfaces Kreator