SQLiteの面白さ(21) こういうのは苦手っぽい

色々とテストしていると、SQLite の苦手な処理もいくつか見えてきた。機能が少なすぎて大規模開発に向かないというのは最初から分かっていたことだから、最初からそういう用途に使わなければいいとして、単なる軽量アプリとして考えても弱点っぽいものがある。

PCを起動して、一発目のクエリーがどうしても遅い。いくらインデックスを使っても、結局のところそのインデックスはディスクから読み込むわけで、その時間がどうしてもかかってしまう。二発目以降のクエリーは、インデックスがPCのキャッシュに収まってしまうせいか、一発目と比較すると嘘のように速い。
これはOSやPCのキャッシュシステム・能力の問題であり、SQLite自体の問題とは違うという見方もできる。原理的にはMySQLなどでも同じことだ。しかし、MySQLなどは基本的にサーバーでプロセスが起動しっぱなしになっているものだ。それに対してSQLiteは単なるライブラリであり、日に何度も電源がOFFになるクライアント上でプログラムが動作する。「一発目の遅いクエリー」をそれぞれのユーザーが日に何度も体験してしまうわけで、どうしても「MySQLよりも遅い」印象を受けてしまう。
このあたり、プログラミングでカバーしてやる必要があるだろう。ユーザーがクエリーを使う前に、どこかバックグラウンドでこっそりクエリーを走らせておいて、事前にインデックスをキャッシュに読み込ませておくなどの対策が考えられる。

また、私が実業務に使っている環境では、Sambaサーバーで共有したネットワークドライブ上にSQLiteのdbファイルを置いているわけだが、これはあくまで、参照専用のデータベースとして使用しているからこそできる芸当だ。更新が必要となると、おそらく、排他制御がうまくいかなくなって、DB破損(MS Accessでもよくおこるやつ)の可能性が出てくるだろう。この対策に関しては、しっかりとSQLiteのソースコードを確認する必要がある。

SQLiteは手軽であるが、使いこなしにはそれなりのノウハウが必要になる。手軽イコール簡単というわけではないということだ。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 3

なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー)
驚いた

この記事へのコメント

この記事へのトラックバック