前メモからの移行なのでかなり古い情報です。
特にSQLite3については該当しない記載も数多く含まれています。
はじめに
私は今まで SQLite はまったく使ったことがなかったのですが、思いがけず使う機会があり、その便利さにビックリしました(^_^;
ものすごいメリットがある反面、デメリットもあるので業務で使うには限定的になりますが、個人で使う分には非常に使う機会にあふれているように思えます。
しかし、意外にも世の中的には SQLite はあまり使われていないと思われるので、自分自身のメモも兼ねてメリットとデメリットをまずは挙げておきたいと思います。
ちなみに、SQLiteを使うべき10の理由と5つのデメリット の情報を大いに参考にしていますが、基本的には自分が使ってみての感想です。
2022/03/17 追記
SQLiteがいかに素晴らしいものであるか書かれた記事を発見しました。
いわゆるDBを使う機会のある人は一読する価値があると思います。
メリット
まずはメリットです。
DB は単なる1ファイルで構成
SQLite で作成した DB は単なる1ファイルです。
従って、管理が非常に簡単!
バックアップしたければ、単にファイルコピーで終わりだし(^_^;
※注意
SQLite3 では一時的にジャーナルファイルが作成されるので、単なる1ファイルではなくなりました。
が、それらのファイルを含めてバックアップすれば良いだけなのでバックアップが容易であることには変わりません。
デフォルトで入っている
Linux のディストリビューションであればたいていデフォルトで使えるようになってます。
多くのレンタルサーバや AWS のようなクラウド環境でもたいていデフォルトで入っています。
また、多くの言語で最初から、もしくは簡単な設定で SQLite を使えることが多いです。
サーバ不要
DB は1ファイルのみで構成され、そのファイルが直接アプリケーションから参照されます。
いわゆるクライアントサーバ型ではありません。
つまり、SQLite を使おうと思ったら、ファイルを設置するだけでおしまい。
これ以上簡単な設置方法はないでしょう。
また、レンタルサーバ等で PostgreSQL, MySQL のような DB サーバが使えない環境というものも多々ありますが、前述の通り SQLite はデフォルトでたいてい使えるようになっていますし、ファイルを置くだけでいいのでレンタルサーバ等でもほぼ確実に使えます。
非常に高速
自分では厳密にベンチマークしていませんが、体感的にめちゃめちゃ高速です。
INSERT / UPDATE は非常に遅いことがありますが、これは調べてみれば分かりますが、トランザクションの問題の模様。
SQLite のトランザクションの発行は少々クセがあるみたいですが、これを性能面の方に倒せば同様にめちゃめちゃ高速です。
MySQL, PostgreSQL あたりとは比較になりませんw
Web でベンチマークを公開しているサイトも多々あるので、興味があれば見てみると良いでしょう。
デメリット
残念ながらデメリットもあります。
同時アクセスに弱い
同時参照であれば問題ないようですが、同時書き込みもしくは、同時に書き込みと参照を実行するとエラーになります。
前述したクセのあるトランザクションを調整した結果、1トランザクションの時間が長くなる可能性があることを考えるとわりと致命的です。
実質的に、書き込みを含む同時アクセスの可能性があるサービスには使わないほうが良さそうです。
複数サーバに対応できない
ファイルベースですので、当然ながら複数のサーバには置けません。
NFS で共有している領域に置いて複数の Web サーバなどから参照するといったようなことは可能ですが、特定のファイルへの I/O が激しいケースの NFS の信頼性は個人的には微妙だと考えているのでおすすめはしません。
性能も相当落ちると思われますし、複数サーバから参照用途であれば素直にクライアントサーバ型の DB を使うべきかと思います。
セキュリティの概念が無い
ユーザーという概念が無いので DB 的にはロールという概念がありません。
また、パスワードもないので、ファイルにアクセスする権限さえあれば何でも出来てしまいます。
結論
- 単発SQLの処理性能はめちゃめちゃ良い
- 設置や管理が超簡単
- どの環境でもどの言語でもほぼ使える
- 複数サーバ、セキュリティ要素が必要なサービスには適さない
ということで、個人でてきとーに作る際のDBとしてはものすごく適していると思います。
コメント