我正在開發一個項目,該項目記錄跨多個地區的物品的價格歷史記錄,並且計劃將這些數據存儲在一個mongodb集合中。mongodb - 針對大量數據點的推薦樹結構
因爲我對mongodb比較陌生,所以我對很多數據的推薦文檔結構感興趣。情況如下:
我在200個左右的地區記錄約90,000項物品的價格歷史記錄。我期望每小時記錄每件商品的價格,並給出任何特定商品的2周曆史記錄。大約出現(90000 * 200 * 24 * 14)= 60億個數據點,或者大約67200個數據點。清理查詢將每天運行一次,以刪除超過14天的記錄(更具體地說,將其歸檔爲壓縮的json /文本文件)。
就我所知道的數據而言,我主要關注兩件事情:1)特定地區特定商品的價格歷史記錄; 2)特定商品的價格歷史記錄遍及所有地區。
在我真正開始導入這些數據並運行基準測試之前,我希望有人能夠給出一些建議,說明如何構建這個數據庫以允許通過查詢快速訪問數據。
我正在考慮以下結構:
{
_id: 1234,
data: [
{
territory: "A",
price: 5678,
time: 123456789
},
{
territory: "B",
price: 9876
time: 123456789
}
]
}
每個項目都是自己的文件,其中每個區域/價格點在特定領土該項目。我遇到的問題是檢索特定商品的價格歷史記錄。我相信我可以用下面的查詢實現這一點:
db.collection.aggregate(
{$unwind: "$data"},
{$match: {_id: 1234, "data.territory": "B"}}
)
我正在考慮只是把每一個數據點自己的文檔中,然後將一個指數的項目和境內的其他選擇。
// Document 1
{
item: 1234,
territory: "A",
price: 5679,
time: 123456789
}
// Document 2
{
item: 1234,
territory: "B",
price: 9676,
time: 123456789
}
我只是不確定是否具有6個十億文件用三個指標或與67200對象數組90000個文檔每使用聚合會獲得更好的性能。
或者也許有其他一些樹結構或處理這個問題,你罰款人和MongoDB嚮導可以推薦?
這是一個有點主觀,真的應該回答,但問自己「你通過保持物品在數組中獲得什麼好處?」。在MongoDB中使用數組的一般想法是將相關數據以這種方式存儲在一起。這意味着如果您使用單個文檔並將所有或多個數組點一起讀取/寫入,然後使用數組。如果不是那麼陣列不是最好的選擇。銷售訂單和項目是一個很好的選擇,但其他的事情可能不會。 – 2014-10-22 01:43:19