0

2000行のMySQLテーブル(Table1)があり、各行には3dオブジェクトのデータ(サイズ、場所、名前など
)が格納されています。2番目のテーブル(Table2)には、Table1にリストされている3dオブジェクトのプロパティのリストが含まれています。すべてのオブジェクトは、このテーブルに複数のエントリを持つことも、何も持たないこともできます。この特定のケースでは、10.000のエントリがあるとしましょう。ここに難しい部分があります:距離を与えるすべてのTable2エントリの間に組み合わせがあります。したがって、次のような3番目のテーブル(Table3)があります。

row1:         table2_entry1 table2_entry2 result  
row2:         table2_entry1 table2_entry3 result  
....  
rowN:         table2_entry1 table2_entryN result  

rowN+1:       table2_entry2 table2_entry1 result  
rowN+2:       table2_entry2 table2_entry3 result  
....  
rowN+N:       table2_entry2 table2_entryN result  
....  
....  
rowN+N+...+N: table2_entryN table2_entryN-1 result  

したがって、Table3には10.000.000のエントリがあります。(entry1、entry2、same_result)と(entry2、entry1、same_result)のペアがあるため、行列を使用すると半分にカットされます。

mongoDBドキュメントは次のようになります(例:entry1)

{  
 "_id": ObjectID("..."),  
 "location": "some_file_location",  
 ...  
 "media_properties": {  
      {entry2: result,    
       entry3: result,  
       ...  
       entryN: result,  
 }  
}  

したがって、「media_properties」には、Table2に格納されている10.000プロパティごとに9.999ディクショナリペアがあります。
これが私の膨大な数の組み合わせを保存するための最良のアプローチであるとは確信していません。

SQLテーブルのようにすべての組み合わせを保存するために別のコレクションを使用する必要がありますか、それとも(上記の例のように)メディアドキュメントに辞書を埋め込む必要がありますか?

オーバーヘッドを取り除き、同じ情報を2回保存したくない。この場合、私は次のようなものを持つことができます:

entry1 - entry2 - result  
entry2 - entry3 - result  

それ以外の:

entry1 - entry2 - result  
entry2 - entry1 - result
entry2 - entry3 - result
entry3 - entry2 - result  

マトリックスの半分をmongoDBドキュメントに「マッピング」することは可能ですか?
これを保存するためのより良い解決策はありますか?

どんなアイデアでも大歓迎です!
前もって感謝します。

4

1 に答える 1

1

それらの多くを1つのドキュメントに保持することはお勧めしません。これらを並べ替えたり、そのような巨大なjsonの部分的な情報を取得したりすることはできません(フィールドで構造化されていない場合)。また、GridFS(16MB)を使用しない場合の最大ドキュメントサイズがあります。
ドキュメントごとに1つの「エントリ-エントリ+結果」を保持することは(少し)スペースの無駄のように見えますが、要素に対してクエリを実行する必要がある場合でも、ニーズに合わせて適切に機能し、クエリの適切なパフォーマンスを得ることができます。結果ではなく、追加のインデックスがそれを釘付けにする必要があります。また、書き込みパフォーマンス(ドキュメントの最後に結果を追加するよりも新しいドキュメントとして多くの新しい結果を新しい要素に追加する)は、落胆させるべきではありません。どうだったか聞きたいです:)

于 2012-12-08T01:40:37.673 に答える