2012年12月28日金曜日

SQLiteのメリッド


ちまたで多く使われているデータベースでは、MySQLやPostgreSQL(ポスグレ)なんでしょうけど、私は、SQLiteが好きだ。そして、私のように専用サーバを持たず、レンタルサーバのみの環境の方には、MySQL、PostgreSQLよりもSQLiteのほうが、絶対に幸せになれると思う。

データがファイルひとつなので、バックアップが超簡単!
SQLiteは、サーバー型でないため、データはたったひとつのファイルにまとめられている。バックアップするには、それをFTPでダウンロードするか、そのサーバー上でコピーするだけだ。MySQLでも、ツールを使えばバックアップはできるけど、ファイルのコピーだけで完結する簡潔さには、かなううまい。なお、ファイル名もなんでもよく拡張子もあってもなくてもいい。でも、バージョン2は.sqliteバージョン3は.sqlite3としている人が多いのかな。USBにデータファイルをコピーして、外出先のローカルサーバーで、すぐにSQLiteを使うなんて、当たり前にできる。MySQLでやろうとしたら気が遠くなる。-----DBのテーブル構成を変えたい?そう、なら、サーバーからダウンロードして、デスクトップのツールで変更して、ついでに入らなくなったデータ消去して、新たな更新データもいれておいて、アップロードすれば終わり。ローカルとリモートの同期が超簡単なのもDBがファイルだから。
多くのレンタルサーバMySQLよりも高速に作動する
レンタルサーバのMySQLの遅さに参っている人は多い。もっともこれはMySQLが悪いのでなく、レンタルサーバー業者が多くのアカウントをひとつのMySQLサーバーに押し込んでいるだけ。データベースサーバはサーバに大きな負担をかけるので、せっかくの早いと言われるMySQLが劇遅になってしまう例も見かけられる。それに対し、SQLiteはサーバー上の自分のスペースに置くだけなので、借りているWEBサーバさえまともならば、快適に使える。もちろん、WEBサーバも、共用であれば、MySQLのような副作用もあり得るわけであるが、SQLiteがサーバーに優しい動作であるので、多くの利点がある。なお、同じ環境では、MySQLと同じか、少し早いとのこと。WEBで検索すると書込が遅いという記事があるが、それはテスト方法を間違っているだけ(トランザクションを適切に使っていない)。
SQL機能的に問題ない
基本的なSQL文はすべて使える(SQL92準拠)。ここが(SQLite が認識できる SQL )詳しい。ビュー、トリガーもOK。check制約などが使えないが、それがないのがSQLiteなのだ。プロ中のプロが大規模サイトで使うには非力であっても、通常*1の使い方で問題となる面はでてこないであろう。
設定が容易。
パスワード設定がいらないので、MySQLを使ったことのある人ならば、「えっ、もう繋がるの?」とびっくりするだろう。
納入が容易。
私は関係ないが商売として、簡易的なデータベースシステムを使ってWEBシステムを構築しているのであれば、納入の容易さは、大きな利点となるだろう。なんせ、HTMLと同じコピペで納入できるのだから。ライセンスも心配ない。
PHP5では、SQLite3が標準で使える。PHP4でもSQLite2が標準で使える。
何もしなくても、いきなりプログラムを書けば自動的にデータベースファイルが作成される。標準バンドルはとてもありがたい。
データ型の概念が希薄であり、長さも柔軟、PHPと、とても相性がよい。
多くのデータベースサーバは、テキストの長さを決めなくてはいけなかったりする。(もちろんそうでない型もあるが、基本としてそうなっている。)SQLiteではchr(20)なんて必要ない。
無料であり、なんとコアソースコード著作権を主張していない。ライセンスの心配は一切いらない。
神様のような存在である。
容量が少なくて済む。コアは225Kbしかない。
rubyでもSQLiteが標準になった(そうだ)
rubyは使ったことないので、よく知らないけど。
(追記:ruby単体でなく、ruby on railsのデフォルトDBとして採用されたそうです。)
このように、多くの利点があるSQLite、使わない手はない。


私は特に 1 の利点は、ものすごく大きいと思う。外部サーバーから、FTPでダウンロードしてデータベースの中身をちょちょっと修正して、すぐにアップロードできる。なんて、MySQLでは絶対にできないでしょう。


一方で、こんなデメリットは知っておくべきだろう。
パスワード設定がない
ファイル形式であり、ユーザー管理の概念がないため、SQLite自身には、セキュリティ機能はない。自分で、ファイルへのアクセス権限をしっかりとコントロールする必要がある。サーバーのドキュメントルート以下に置く場合は、htaccessの設定が必須だろう。ドキュメントルートより上に置けば、外部の第三者からのセキュリティに問題があることはほとんどないだろう。
書込がダブると書込エラーになる
サーバー型でないので、複数の書込を順次処理することができない。最初の人が書込をしている間に、次の人が書込をしようとするとエラーになるので、そのケアーをする必要があるシステムもあるかもしれない。個人やSOHOのCMS(コンテンツマネジメントシステム)やブログ程度であれば、問題にあることはないだろう。読み出しはダブってもOK。頻繁に不特定多数がデータベースに書き込むような処理は苦手だろう。
バージョン2と3でデータベースの互換性がない。
2と3は別物と考えたほうがいい。PHPからのアクセスに限って言えば、SQLite2は、通常のsqlite_~関数を使ってアクセスするが、SQLite3は、PHP5.1以上で、かつ、PDOというデータベースドライバを通じてしか操作できないので、2->3のアップグレードは注意を要する。(そんなに難しくはないけど)。なお、PHP4,5でPDOを使わずにSQLite3を使う方法もあるようだが、PHP本体のリビルドが必要なようなことと、windouws環境が揃っていないことから、現時点(2008/1)ではお薦めできない。もちろんPDOを使えばアクセスできるので、皆さんPDOを使いましょう。
管理ツールでは、phpMyadminに劣るものしかない。
別記事で私の使っているツールをあげておきます。phpMyadminには及ばないが、しかし十分である。
日本語情報は、MySQLに比べて少ない。
皆さんで盛り上げていきましょう。ちなみに、SQLiteをやってみようは、よくまとまっておおられます。