嵌入式文档过大时如何设计模式

时间:2011-10-18 17:31:07

标签: mongodb

鉴于数据结构如下,您可以看到一个文件中的每个记录对ATT1和ATT2具有相同的值。

// Store in fileD001.txt
ATT1 | ATT2     | ATT3  | ATT4 ...  | ATT200
D001 | 10102011 | x13   | x14   ... | x1200
D001 | 10102011 | x23   | x24   ... | x2200
...
D001 | 10102011 | xN3   | xN4   ... | xN200

// Store in fileD002.txt
ATT1 | ATT2     | ATT3  | ATT4 ...  | ATT200
D002 | 10112011 | x13   | x14   ... | x1200
D002 | 10112011 | x23   | x24   ... | x2200
...
D002 | 10112011 | xN3   | xN4   ... | xN200

// Store in fileD003.txt
ATT1 | ATT2     | ATT3  | ATT4 ...  | ATT200
D003 | 10132011 | x13   | x14   ... | x1200
D003 | 10132011 | x23   | x24   ... | x2200
...
D003 | 10132011 | xN3   | xN4   ... | xN200


Method One: Assume I use the following structure to store the data.
doc = { “ATT1"    : "D001",
        "ATT2"    : "10102011",
        "ATT3"   : "x13",
        "ATT4"   : "x14",
        ...
        "ATT200" : "x1200"            
      }

问题是,数据包含过多的重复信息,浪费了DB的空间。但是,好处是每条记录都有自己的_id。

Method One: Assume I use the following structure to store the data.
doc = { “ATT1"    : "D001",
        "ATT2"    : "10102011",
        "sub_doc" : { "ATT3"   : "x13",
                      "ATT4"   : "x14",
                      ...
                      "ATT200" : "x1200"
                    }
      }

问题是,数据大小N大约为1~5000,太多,MongoDB在一次插入操作中无法处理。当然,我们可以使用$ push update修饰符逐步追加数据。但是,每个记录都不再以这种方式存在_id。

我并不是说每条记录都必须有自己的ID。我只是在为这样的任务寻找更好的设计解决方案。

谢谢

1 个答案:

答案 0 :(得分:0)

选项1很不错,因为它为您提供了最简单的数据。因为价格便宜所以可能不太担心空间?

选项2可以节省空间,但请注意您的文档不会太大。最大文档大小可能会限制您。此外,如果您将来分片,这可能会限制您。

选项3与它有点关系。有两个系列。第一个是查找ATT1和ATT2对。另一个集合是对另一个和最终的对象的引用。

parent = { att1: "val1", att2: "val2"}

child = {parent: parent.id, att3: "val3"...}