私は組み込みの人であり、データベースの人ではありません。いくつかの場所でボトルネックがある既存のシステムを再設計するように依頼されました。
組み込みデバイスは、220mHzで動作するARM 9プロセッサをベースにしています。
それぞれが1kのデータ(最大8ファイル)を持つ50kエントリ(250kに増加する可能性があります)のデータベースが必要です。これは概算です。必要に応じて、より正確な数値を取得することができます。
彼らは現在SqlLite2を使用しており、SqlLite3への移行を計画しています。
炎上戦争を開始せずに-私はアドバイスを求めているだけの完全なd/b初心者です-それは「最良の」決定ですか?これは「一本の紐の長さ」かもしれないと思います。質問ですが、どんなポインタも大歓迎です。私はたくさんの読書と研究をすることを気にしませんが、あなたが私を飛躍的なスタートに導くことができることを願っていました。ありがとう。
p.s繰り返しになりますが、完全な書き直しは、組み込みLinuxに固執することすらできないかもしれませんが、eCosに切り替えると、d/b形式間の1回の変換についてあまり心配する必要はありません。ああ、アクセスは頻繁ではなく、せいぜい数秒に1回です。
編集:わかりました。それぞれ5つまたは6つのフィールドしかない30kのエントリ(100k以上に達する可能性があります)があるようですが、少なくとも3つはレコードの検索キーになります。彼らは「データがとても単純なので、d/bがまったくない」ことをいじっていますが、複数のキーでは、quicksort()タイプの検索(再帰的、バイナリ検索)のような凝ったものを使用できなかったようです。 )。 「d/bなし」について何か考えはありますか?データ構造だけですか?
ところで、1つのキーは800kです-SqlLiteがそれをどれだけうまく処理できるかわかりません(多分「nod/b」でその800kをもっと小さなものにハッシュする必要がありますか?)
また、SQLiteは、事実上すべてのモバイルオペレーティングシステムによって選択されるデータベースです。 Android、iPhone OS、SymbianにはSQLiteが同梱されているため、これらの電話(ほとんどの場合ARM)のプロセッサ用に最適化するために人手が費やされたと思います。
私はSQLiteに固執します、それは広くサポートされており、機能がかなり豊富です。
Firebird(以前のInterbase)は、うまく埋め込まれて機能すると主張しています。
HypersonicQL(HQL)は小型で高速であり、組み込み用途にも適していると主張しています。
残念ながら、私にはどちらの主張も裏付ける個人的な経験はありません。
SQLiteはおそらくかなり安全な賭けです。ただし、アプリケーションにとってパフォーマンスが非常に重要であり、リレーショナルデータベースが必要ない場合は、Berkeley DB リンクテキスト を確認することをお勧めします。ただし、BerkeleyDBはリレーショナルデータベースではありません。つまり、データが異なるテーブルにグループ化されており、複数のテーブルのデータを関連付ける必要がある結果セットを常にクエリする必要がある場合は、リレーショナルデータベースが必要になる可能性があります。 Berkeley DBは、ルックアップテーブルのようなものに適しています(つまり、データはいくつかのテーブルに編成されており、必要な結果セットを生成するために複数のテーブルからデータをクエリする必要はありません)。 Berkeley DBは非常に高速ですが、それを最大限に活用するには、より多くの作業が必要になります。
別の方法が必要な場合は、berkeleydbを検討する価値があります。以前はsleepycatソフトウェアが所有していましたが、現在はOracleから入手できます。これはベアボーンデータベースエンジンです。 (SQLではなく)直接プログラム可能なフロントエンドです。これは、多くの主要なデータベースのコアエンジンの一部として、また多くの組み込みデバイスのデータベースとして使用されています。これは、ルーターのルーティングテーブルの管理に特に人気がありました。最近はもっとファッショナブルなセットアップのために見落とされがちですが、私はそれがまともでしっかりしていて、あなたが話している数字のためにそれは非常に速くなる可能性があることを発見しました。
8年遅れましたが、更新として: Raima Database Manager を使用してかなり良い経験をしました。フットプリントの小さいデータベースを探している場合は、40kまで下がることがあります。私がRDMを気に入っている理由の1つは、プラットフォームに依存しないことです。32ビットと64ビットのマシン間、ビッグエンディアンとリトルエンディアンのアーキテクチャ間で移植可能であり、ほとんどのオペレーティングシステムをサポートしているため、組み込みで使用できます。最初の投稿で述べたように、LinuxとeCos。そして、 SQLite とは対照的に、より良いハードウェアとユーザーを追加すると、パフォーマンスが向上します。
SQLiteは問題ありませんが、600万行を超えるデータを挿入、更新、削除する場合は使用しないでください(すべて同時に、または一部)。問題は、VACCUMキーワードを時々実行する必要があり、自動であっても、パフォーマンスの非常に深刻なボトルネックになるということです。
Sqlite3もお勧めします。多くの有名なアプリケーションで使用されています。
私は埋め込みシステムに精通していませんが、iphoneはarm9を使用し、 sqlite をDBとして使用します
01-11-10 Embedded.comニュースレターは、このトピックをカバーする素晴らしい仕事をしています。ニュースレターはEmbedded.comにあります: Embedded.com Tech Focus Newsletter(1-11-10):Embedding Databases 。