MongoDB模式设计 - 巨大的列表
MongoDB schema design - huge list
我想知道在我的mongoDB中存储数据的最佳方式是什么,例如,餐厅的订单。
因此,首先我需要有一个"订单"集合。
还需要对服务员之间的数据同步进行大量读取,因此我不想存储已完成(已付款)的订单和仍在同一列表中打开的订单。
所以我想出了一个"订单"集合,它有 2 个数组字段:"当前"和"历史"。目前,我将存储所有尚未付款的订单(需要通过所有服务员同步),而在"历史记录"中,我将存储所有已关闭且仅需要由经理或想要查看数据的人访问的内容。
这样,我可以最大限度地减少访问时间和发送数据量。
这是执行此操作的正确最佳实践方法吗?
或者我应该将所有内容存储在一个列表中,然后执行按时间或类似方式排序的查询,并限制我发回的文档数量?
编辑:
在此集合中,我希望保存多家餐厅的订单。 所以我可以为每个餐厅使用这个集合中的一个文档并将订单嵌入其中,或者把这个集合中的所有订单放在同一个级别上,然后每个订单都有一个restaurantId
由于订单集合代表单个餐厅,因此它不会包含所有订单的记录,每个文档如下所示:
{
_id:{}
waiter: 'Sammaye',
table: 9,
items: [
{id:9,qty:1,cooked:false}
],
billed: false
}
所有需要了解等待外出的订单的服务员都会从这个集合中获得所有billed
false
的订单文件。
如果您在 billed
上放置索引,这应该足够好。
使用您所说的另一种方法可能会导致问题,例如,它是存储所有订单的集合中的一个文档。我可以想象,随着时间的推移,这份文件可能会变得非常大。
在内存中使用运算符($push
、$pull
等)会使文档的操作变慢。
它还可能在数据库中创建碎片,因为这些是随着时间的推移而不断增长的未绑定数组,这也会降低性能。
与将每个订单存储为记录相比,您的方法也不会产生任何优势,除了您可以一次性获取所有待处理订单,但是,配置批量大小,将所有订单存储为单独的文档时,您可能会非常接近。
- 要求输入在数据列表中
- 从javascript创建一个列表
- 如何使用jQuery选择下拉列表的值
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- Javascript按钮下拉列表
- 如何使用json将对象列表从java转换为javascript
- 区分JSON中的矩阵和列表列表
- jQuery表单添加不适用于下拉列表
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 接受不在列表中的值-引导组合框
- 禁用jQuery中的下拉列表
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 使用 Javascript 优化一个巨大的无序列表
- 使用 JavaScript 创建巨大的选项列表与以标记形式交付它们
- MongoDB模式设计 - 巨大的列表
- 调试javascript——以及标准库中巨大的错误列表
- 拆分大型下拉列表以避免具有巨大的功能
- 使用数组值缩短一个巨大的列表
- AngularJS从一个巨大的列表中更新单个元素