SQLite

最終更新日時:2017-02-08 00:00:00

私は今まで SQLite はまったく使ったことがなかったのですが、思いがけず使う機会があり、その便利さにビックリしました(^_^;
ものすごいメリットがある反面、致命的なデメリットもあるのでなかなか仕事的なものでは使いづらいのですが、個人で使う分には非常に使う機会にあふれているように思えます。

しかし、意外にも世の中的には SQLite はあまり使われていないと思われるので、自分自身のメモも兼ねてメリットとデメリットをまずは挙げておきたいと思います。
ちなみに、SQLiteを使うべき10の理由と5つのデメリット の情報を大いに参考にしていますが、基本的には自分が使ってみての感想です。


メリット


まずはメリットです。

DB は単なる1ファイルで構成


SQLite で作成した DB は単なる1ファイルです。
従って、管理が非常に簡単!
バックアップしたければ、単にファイルコピーで終わりだし(^_^;

デフォルトで入っている


Linux のディストリビューションであればたいていデフォルトで使えるようになってます。
また、PHP であれば最初から SQLite を使えることが多いです。(使えない環境をむしろ知りません)

サーバ不要


DB は1ファイルのみで構成され、そのファイルが直接参照されます。
いわゆるクライアントサーバ型ではありません。
つまり、SQLite を使おうと思ったら、ファイルを設置するだけでおしまい。
これ以上簡単な設置方法はないでしょう。
また、レンタルサーバ等で PostgreSQL, MySQL のような DB サーバが使えない環境というものも多々ありますが、前述の通り SQLite はデフォルトでたいてい使えるようになっていますし、ファイルを置くだけでいいのでレンタルサーバ等でも確実に使えるはずです。
ただ後述しますが、クライアントサーバ型ではないのはデメリットも存在します。

非常に高速


厳密にベンチマークしていませんが、体感的にめちゃめちゃ高速です。
INSERT / UPDATE は非常に遅いことがありますが、これは調べてみれば分かりますが、トランザクションの問題の模様。
SQLite のトランザクションの発行は少々クセがあるみたいですが、これを性能面の方に倒せば同様にめちゃめちゃ高速です。
MySQL, PostgreSQL あたりとは比較になりませんw
Web でベンチマークを公開しているサイトも多々あるので、興味があれば見てみてください。

デメリット


次にデメリットです。

同時アクセスに弱い


同時参照であれば問題ないようですが、同時書き込みもしくは、同時に書き込みと参照を実行するとエラーになります。
前述したクセのあるトランザクションを調整した結果、1トランザクションの時間が長くなる可能性があることを考えるとかなり致命的です。
これは、クライアントサーバ型ではなく1ファイルという構成に起因する問題なので、今後も解消は難しいと思われます。
実質的に、書き込みを含む同時アクセスの可能性があるサービスにはほとんど使えないと考えた方がよいです。

複数サーバに対応できない


ファイルベースですので、当然ながら複数のサーバには置けません。
NFS で共有している領域に置いて複数の Web サーバで参照することは可能ですが、特定のファイルへの I/O が激しいケースの NFS の信頼性は個人的には微妙だと考えているのでおすすめはしません。
性能も相当落ちると思われますし、複数サーバであれば素直にクライアントサーバ型の DB を使うべきかと思います。

セキュリティの概念が無い


ユーザーという概念が無いので DB 的にはロールという概念がありません。
また、パスワードもないので、ファイルにアクセスする権限さえあれば何でも出来てしまいます。


お問い合わせは 掲示板 にて。