Mongodb'布局'适用于大量组合

时间:2012-12-07 17:00:16

标签: mongodb matrix

我有一个包含2000行的MySQL表(Table1),每行存储一个3d对象的数据:大小,位置,名称等。
第二个表(Table2)包含Table1中列出的3d对象的属性列表;每个对象在此表中可以有多个条目,或者没有。在这个特殊情况下,假设我们有10,000个条目。 这是困难的部分:每个Table2条目之间都有一个组合,它给出了一个距离。所以这是第3个表(表3),它看起来像:

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”将为表2中存储的10.000个属性中的每一个提供9.999个字典对。
我不相信这是存储大量组合的最佳方法。

我应该使用单独的集合来存储SQL表中的所有组合,还是应该将字典嵌入到媒体文档中(如上例所示)?

我想摆脱开销,而不是两次存储相同的信息。在这种情况下,我可以有类似的东西:

entry1 - entry2 - result  
entry2 - entry3 - result  

等。

而不是:

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

是否可以将半个矩阵“映射”到mongoDB文档中? 有没有更好的解决方案来存储这个?

欢迎任何想法!
提前谢谢。

1 个答案:

答案 0 :(得分:1)

我不鼓励将其中许多保留在一个文档中,因为您无法对它们进行排序,也无法获取这些巨大jsons的部分信息(如果不是按字段构造)。还有最大文档大小而不使用GridFS(16MB)。
为每个文档保留一个“入门输入+结果”似乎是浪费空间(一点点),但它应该能够很好地满足您的需求并为您提供正确的查询性能 - 即使您需要查询元素而不是结果 - 额外的指数应该指出它。写性能(向新元素添加许多新结果,因为新文档而不是将结果添加到文档末尾)不应该令人沮丧。我想听听它是怎么回事:)