有產品的名稱和價格。你如何在MongoDB中建模?
用戶登錄他們購買的產品。
# option 1: embed logs
product = { id, name, price }
user = { id,
name,
logs : [{ product_id_1, quantity, datetime, comment },
{ product_id_2, quantity, datetime, comment },
... ,
{ product_id_n, quantity, datetime, comment }]
}
我喜歡這個。但是,如果產品id長12個字節,數量和日期時間是32位(4字節)整數,平均評論100個字節,則一個日誌的大小爲12 + 4 + 4 + 100 = 120個字節。文檔的最大大小爲4MB,因此每個用戶的最大日誌量爲4MB/120bytes = 33,333。如果假定用戶每天記錄10次購買,那麼4MB限制達到33,333/10 = 3,333天〜9年。那麼,9年可能是好的,但如果我們需要存儲更多的數據呢?如果用戶每天記錄100次購買會怎樣?
這裏有什麼其他的選擇?我是否必須完全正常化?
# option 2: normalized
product = { id, name, price }
log = { id, user_id, product_id, quantity, datetime, comment }
user = { id, name }
呃。我們回到了關係。
爲什麼你需要的產品ID的12個字節裏面嵌入用戶使用此日誌?也許你可以使用32位(或更少)的序列? – diederikh 2010-09-14 13:59:12
您也可以將註釋移到單獨的集合中,並通過id引用註釋。 – diederikh 2010-09-14 14:04:42
哦,不錯..所以手動生成自動遞增的id?你會在哪裏存儲最後分配的ID值? – randomguy 2010-09-14 14:04:54