簡體   English   中英

MongoDB架構設計 - 巨大的列表

[英]MongoDB schema design - huge list

我想知道什么是存儲數據的最佳方式,例如,在我的mongoDB中的餐館訂單。

所以,首先我需要一個“訂單”系列。

還需要做很多閱讀以便在服務員之間同步數據,所以我不想存儲已完成(付費)的訂單以及仍然在同一列表中打開的訂單。

所以我提出了一個“訂單”集合,它有2個數組字段:“當前”和“歷史”。 在目前,我將存儲所有尚未支付的訂單(需要通過所有服務員同步),在“歷史記錄”中,我將存儲所有已關閉的,只需要經理或想要查看數據的人訪問。

這樣我可以最小化訪問時間和發送數據量。

這是一個正確,最佳的做法嗎?

或者我應該將所有內容存儲在一個列表中,然后執行按時間或類似方式排序的查詢,並限制我發回的文檔數量?

編輯:

在這個集合中,我希望保存多家餐廳的訂單。 所以我可以在這個集合中為每個餐館使用一個文件並在那里嵌入訂單,或者將此集合中的所有訂單放在同一級別,然后每個訂單都有一個restaurantId

由於訂單集合代表單個餐廳,因此它不會包含所有訂單的記錄,每個文檔看起來像:

{
    _id:{}
    waiter: 'Sammaye',
    table: 9,
    items: [
        {id:9,qty:1,cooked:false}
    ],
    billed: false
}

所有需要知道等待出去的訂單的服務員都會從這個收集的所有訂單文件中獲得false billed

如果您在billed上放置索引,這應該足夠了。

使用您說的其他方法可能會導致問題,例如,它是存儲所有訂單的集合中的一個文檔。 我可以想象文檔會變得非常大。

在內存中使用運算符( $push$pull等)可能會使文檔上的操作變慢。

它還可能在數據庫中創建碎片,因為這些碎片會隨着時間的推移不斷增長,這也會降低性能。

您的方法也不會比將每個訂單存儲為記錄產生任何優勢,除了您可以一次性獲得所有訂單待定,但是,配置批量大小,您可能會將所有訂單存儲為單獨的文檔時非常接近。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM