1


1

この質問とは無関係の理由で、私のプロジェクトのいくつかではより一般的なMySQLの代わりにいくつかのSQLiteデータベースを実行する必要があるでしょう。 O(データベースはUSB 2.0ペンドライブ*でホストされます)。

私はhttp://www.sqlite.org/speed.htmlでDatabase Speed Comparisonページを読みました、そして私は私がSQLiteの性能に驚いたと言わなければなりません、しかしそれらのベンチマークは少し古いので私はもっとアップデートを探していましたベンチマーク(SQLite 3対MySQL 5)、やはり*私の主な関心事はディスク性能であり、CPU / RAMではない*。

また、SQLiteの経験はそれほど多くないので、InnoDB MySQLエンジンのTRIGGER(更新時、削除時)イベントに似たものがあるかどうかも興味があります。 私はMySQLが持っているようにUNIQUEであるとしてフィールドを宣言する方法も見つけることができませんでした。唯一の主キー - 私が見逃しているものはありますか?

最後の質問として、良い(できれば無料またはオープンソースの)SQLiteデータベースマネージャが存在するかどうかを知りたいです。

3 Answer


7


そこにいくつかの質問:

  1. ディスクI / Oの制限に関しては、データベースエンジンが大きな違いを生むことは想像できません。 いくつかの小さなことがあるかもしれませんが、私はそれがデータベースがあなたのアプリケーションが望んでいるのと同じくらい速くデータを読み書きすることができるかどうかだけが大事だと思います。 MySQLでもSQLiteでも同じ量のデータを使用することになるので、それほど変わらないと思います。

  2. SQLiteはトリガーをサポートしています: CREATE TRIGGER構文

  3. SQLiteはUNIQUE制約をサポートしています: column constraint definition syntax

  4. SQLiteデータベースを管理するには、Firefoxアドオン SQLite Managerを使用します。 それはとても良いことです。


2


_ ディスクI / Oの制限に関しては、データベースエンジンが大きな違いを生むことは想像できません。 _

Mysql / myISAMではデータはUNORDEREDで保存されているので、PRIMARY KEYでのRANGE読み込みは理論的にはいくつかのHDD SEEK操作を発行する必要があります。

Mysql / InnoDBでは、データはPRIMARY KEYでソートされているため、PRIMARY KEYでのRANGEの読み取りは1つのDISK SEEKオペレーションを使用して行われます(理論上)。

要約すると、myISAM - データは順不同でHDDに書き込まれます。 pri keyがAUTO INCREMENTのユニークなフィールドでない場合は、PRI-KEYの範囲が遅くなります。

InnoDB - データの順序付け、フラッシュドライブには不適切(挿入後のデータの順序変更=追加書き込みが必要)。 PRI KEY範囲の読み取りでは非常に速く、書き込みでは遅くなります。

InnoDBはフラッシュメモリには適していません。 シークは非常に高速であるため(データを並べ替えることによってあまり多くの利益を得ることはありません)、順序を維持するために必要な追加の書き込みはフラッシュメモリに損傷を与えます。

myISAM / innoDBはコンベンショナルドライブとフラッシュドライブに大きな違いをもたらします(私はSQLiteについては知りません)が、私はむしろmysql / myisamを使用したいです。


1


私は実際に私のSQLiteインターフェースとしてSQLiteSpy http://www.portablefreeware.com/?id=1165を使用することを好みます。 それは便利になることができるREGEXPのようなものをサポートします。