0

我有一个包含 2000 行的 MySQL 表(Table1),每行存储一个 3d 对象的数据:大小、位置、名称等
。第二个表(Table2)包含 Table1 中列出的 3d 对象的属性列表;每个对象在此表中可以有多个条目,也可以没有。在这种特殊情况下,假设我们有 10.000 个条目。这是困难的部分:每个 Table2 条目之间都有一个组合,它给出了一个距离。所以这是第三张表(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”对于存储在表 2 中的 10.000 个属性中的每一个都将具有 9.999 个字典对。
我不相信这是存储大量组合的最佳方法。

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

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

entry1 - entry2 - result  
entry2 - entry3 - result  

等等

代替:

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

ETC

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

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

4

1 回答 1

1

我不鼓励将它们中的许多保留在一个文档中,因为您将无法对它们进行排序,也无法取出如此巨大的 json 的部分信息(如果不是由字段构成的话)。在不使用 GridFS (16MB) 的情况下,还有最大的文档大小。
为每个文档保留一个“entry-entry + result”似乎是在浪费空间(有点),但它应该可以很好地满足您的需求并为您提供适当的查询性能 - 即使您需要查询元素而不是结果 - 额外的索引应该可以确定。此外,写入性能(将许多新结果作为新文档添加到新元素而不是将结果添加到文档末尾)不应令人沮丧。我想听听进展如何:)

于 2012-12-08T01:40:37.673 回答