2009-07-18 5 views
0

データベースに格納されている特定のオブジェクトタイプがあります。このタイプには、インスタンス間の構造が異なる追加情報が追加されるようになりました。インスタンスのグループについては、情報が同じ構造になっていますが、構造は実行時にのみ認識され、時間とともに変化します。キーと値のペアのシリアル化形式は、RDBMSで最も適切に索引付けできますか?

テーブルにBLOBフィールドを追加してそこにキーと値のペアをシリアル化した形式で格納することにしました。あなたの経験から、どのフォーマットが最も適していますか?

私のアプリケーションの文脈では、このストレージスペースはセカンダリです。特定のキー/値ペアのセット(つまり、一種の可変フィールド複合キー)に対して正しいインスタンスを検索している、高速な操作が1つあります。私は、典型的なデータベースの索引作成に特に適したフォーマットがあることを意味しますか?

さらに、同じキーセット(必要に応じて特別な「クラス」)を共有する一連のインスタンスを探すことができます。

私はこれをJavaで書いています。私はさまざまなタイプのSQLデータベースに保存しています。私はJSON、GPB、ネイティブJavaのシリアル化を私のレーダーに用意しています。クロスランゲージフォーマットを好んでいます。テーブルに

  • ストア値のセットとテーブル
  • のキー
  • ストアのキー/値のペアのセットが含まれている別のテーブルへの外部キーを追加します。私は2つの基本戦略を考えることができます

答えて

1

データベース索引を活用することを目標とする場合は、非構造化データをBLOBに格納することは有効ではありません。 BLOBは、RDBMSの観点からは本質的に不透明です。

データの非構造化部分は、オブジェクトに関連付けられた任意のキーと値のペアの形式をとっているという説明から収集しました。もし、すべてのキーの型が同じであれば(例えば、それらがすべて文字列の場合)、(少なくとも)3つの列を持つ子テーブルを作成することをお勧めします:キー、値、および親への外部キーテーブル内のオブジェクトの行キーは通常の列としてデータベースに格納されるため、効果的に索引付けできます。インデックスには、親テーブルへの外部キーも含める必要があります。

完全に異なるアプローチは、具体的には非構造化データを処理するように設計されたCouchDBのような「スキーマレス」データベースエンジンを見ることです。私はそのようなシステムでの経験は全くありません。アプリケーションの残りの部分がこの代替ストレージ戦略にどのくらい役立つかはわかりませんが、検討する価値があるかもしれません。

+0

もしあなたがスキルレスアプローチをとることにしたら、Amazon.com SimpleDBはあなたが調べることができる何か他のものです - http://aws.amazon.com/simpledb/ –

+0

私のデータの一部はすでにスキーマレスです。私はいくつかのオブジェクトを完全に直列化し、それらは一般的なテーブルにあり、FriendFeedのように(http://bret.appspot.com/entry/how-friendfeed-uses-mysqlを参照)。私はRDBMの機能が不要で、厳密なスキーマを使用すると難しくなりますが、私のデータの一部は標準のRDBMに完全に適しています。このハイブリッド戦略を使用しているので、私はCouchDBなどに切り替えたくない。 –

+0

キー値テーブルに関するご意見ありがとうございます。私はすでにそのアプローチに反対して決めましたが、あなたのポストを読んだ後、私は再考し、私は自分の心を変えているようです。 –

1

あなたの質問にはあまり回答はありませんが、Java Edition of BerkeleyDBを見てみましたか?重複したキーとシリアライズされた値は、この(高速の)エンジンで保存できます。

+0

ありがとう、これは興味深いリンクですが、私の現在の状況でこれがどのように役立つか分かりません。 –

関連する問題