人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLとSQLite3について質問です。

データ内容やサーバーによって差異はあると思うのですが
両者を同じサーバー環境及び同じデータで運用した場合に速度的な差はどの程度あるものなのでしょうか?
UPDATEなどはMySQLとSQLiteで行ロックやファイルロックの違いがあるので差があるのは理解できるのですが
検索を行うにあたってどの程度の差があるのか知りたいと考えております。
そういった実際の数値や検証結果や経験などがあればご教示ください。

●質問者: quocard
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● taroe
●50ポイント

安いレンタルサーバーでMySQLを共有で使っている場合は、SQLiteの方が逆に速いこともあります。
これは、MYSQLを共有で使ってるためにMYSQLの本来の性能が出せないというのが理由です。


まずはデータ件数がどの程度を想定されてるかにもよります。
1万件程度なら、どちらもそれほどの差を体感できないと思います。
MYSQLを共有で使ってない場合においても、差はあまり感じられないと思います。

本当に少ないデータの場合は、SQLiteの方が速い場合もあります。
MYSQLだと、コネクションなどにかかる時間など、SQLiteと比べて時間がかかる処理があるためです。
http://q.hatena.ne.jp/answer


quocardさんのコメント
回答ありがとうございます。 確かに共用だと他のユーザーの負荷に足を引っ張られる可能性もありますね。 データそのものは数百から多くても数千程度なのでSQLiteでも問題なさそうです。 何かあったときにスケールアップしやすいようにPDOあたり使えば切り替えもラクそうなので SQLiteで試してみようと思います。

2 ● a-kuma3
●50ポイント

もう、何かしらの定説が出来上がってるのでしょうか。なかなか新しい情報が見つかりません。
以下、探してみた情報から幾つか。


http://www.sqlite.org/speed.html
もうチェック済みかもしれませんが、まずは、本家のページを最初に。
ページの冒頭にも書かれている通り、古いデータです。
測定時期についての言及がありませんが、使ってるバージョンから ChangeLog を参照すると、2003年の前半くらいに測定した結果だと思われます。

http://blog.ohgaki.net/cdia_a_oa_a_sa_a_a_fa_m
こちらは、 2007年10月にポストされた記事です。
比較に使ったバージョンは、以下の通り。

MySQL: 5.0.45
SQLite: 3.4.0 (PDO)

書いてあることだけを見ると、インデックスが効きづらい条件で、チューニングをせずにベンチマークを取っているので、通常の使い方なら、MySQL に軍配が上がりそうです。


http://kzworks.at.webry.info/200809/article_67.html
2008年9月の記事です。
定量的な情報が書いてあるわけではありませんが、でかいテーブルの読み込みで SQLite を使って苦戦した話です。

SQLite のドキュメント類を読み漁ってみたが、スワップを回避する方法が見つからない。逆に「バッファはDB以下のサイズにはできません」と、PRAGMA 文の解説の中に書いてあったのが見つかり、状況はほぼ絶望的になってしまった。
...
スペックに余裕の無い PC では、プロセスが上がりっぱなしになる MySQL のほうが不利ではないかと当初は思われていたのだが、大きな DB を扱う際には、意外なことに、このあたりのチューニングのできる MySQL のほうが有利だったようだ。



http://it-bg.com/en/articles/53-database-benchmarks.html
2009年9月の書き込みです。
こちらの書き込みでは、検索において SQLite が圧倒的なスピードをたたき出しています。
やや、まゆつばなくらい差が付いてますが、ひとつ前にあげたブログの内容を踏まえると、MySQL でバッファが適切にチューニングされていなくて、何度もベンチマークを取ると、こんな結果が出そうに思います。



データ内容やサーバーによって差異はあると思うのですが...

データベースで重要なのは、チューニングです。
テーブル設計のような設計要素から、インデックスやバッファサイズのような環境の要素、それに加えてプログラムの作り方(含む、Bad Knowhow)など。
呼量が少なく、データサイズも小さいのであれば、SQLite に軍配が上がると思いますが、実際に選定をするときには、本当に悩みます。
開発の途中で、RDBMS の変更を余儀なくされたこともあります。

ちょこちょこっと作るプログラムだと、コストが見合わないこともあるかもしれませんが、DB の実装に依存する処理を切り出しておくのが重要だと思ってます。
PHP なら PDO を使っておくとか、もっと自分で手を入れられるように Dependency Injection のようなパターンを使うとか。


だらだらと書いてしまいましたが、何かの参考になれば。


quocardさんのコメント
回答ありがとうございます。 確かにチューニングは重要ですね。 規模が大きくないようであればSQLiteは有効みたいですね。 何かあってもMySQLなどに移行しやすい構成でSQLiteを組めば大丈夫ではないかとも思っております。 とりあえずはSQLiteにてやってみようと思います。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ