2011-10-18 27 views
0

如果您看到的數據結構如下所示,您可以看到一個文件中的每個記錄對於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"    
     } 

這是問題,數據中包含太多重複的信息,浪費數據庫空間。但是,好處是每個記錄都有自己的_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。我只是爲這樣的任務尋找更好的設計解決方案。

謝謝

回答

0

選項1是不錯的,因爲它可以讓你一起工作的最簡單的數據。由於價格便宜,可能不太擔心這個空間?

選項2很好地節省空間,但要注意您的文檔不要太大。最大文檔大小可能會限制您。另外,如果你在將來碎片,這可能會限制你。

選項3是關於它的一點關係。有兩個集合。第一個只是查找ATT1和ATT2對。另一個集合是對另一個集合和最後的atts的引用。

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

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