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