私はネットワークのオーバーヘッドなしで、効率的かつ非常に高速なアクセスのために、いくつかの情報を異なるマシンに配布しようとしています。データはリレーショナルスキーマに存在し、エンティティ間のリレーションに「参加」する必要がありますが、データベースに書き込む必要はありません(オフラインで生成されます)。高速読み込み専用埋め込み "データベース"?
私はSQLiteがパフォーマンス上で提供すると確信していましたが、RDMBSは根本的なレベルでは不適切と思われます。インデックスの参照コストのためにジョインが非常に高価で、読み取り専用のコンテキストでは不要なオーバーヘッドですここでエンティティはファイルオフセットの形で互いに直接参照を格納することができます。このようにして、ファイルシークのためにインデックスルックアップが切り替えられる。
ここには何がありますか?データベースは実際に私が探しているものを記述しているようではありません。私はNeo4jを認識していますが、私のアプリにJavaを埋め込むことはできません。
TIA!
編集、コメントに答える:
- データのサイズが1GBまでとなり、わたしはそう本当にオプションではありませんメモリ内のデータを維持するPHPを使用しています。私はOSのバッファキャッシュを利用して、ディスクへの継続的な移動を避けます。
- 例としては、15種類の混合タイプのフィールドを持つProductテーブルと、特定のmakeを持つ製品をリストしてCategoryテーブルに結合するクエリがあります。
- 解決策は、何らかの種類のフラットファイルでなければなりません。私のニーズを満たすソフトウェアがすでに存在するのだろうかと思っています。
@マークウィルキンス:
パフォーマンスの問題が測定されます。基本的には、私の状況では、2msのIOバインドされたクエリをMemcacheに置き換えることはできません。たとえば、カテゴリテーブルには親と子のカテゴリを含む500レコードがあります。次のクエリは、ディスクIOなしで約8msかかります。SELECT 1 FROM categories INNER JOINカテゴリB on b.id = a.parent_id。いくつかのシンプルで結合のないクエリは非常に高速です。
これはリレーショナルスキーマであり、リレーションシップに参加する必要がありますが、リレーショナルデータベースは使用したくないと言っていますか?なぜフラットファイルを使用しないのですか? – Oded
"DB"の例と近似サイズを指定してください。 – CAFxX