MongoDB架构设计 - 巨大的列表

时间:2013-09-09 10:49:42

标签: javascript mongodb mongoose

我想知道什么是存储数据的最佳方式,例如,在我的mongoDB中的餐馆订单。

所以,首先我需要一个“订单”系列。

还需要进行大量阅读以便在服务员之间同步数据,所以我不想存储已完成(付款)的订单以及仍然在同一列表中打开的订单。

所以我提出了一个“Orders”集合,它有2个数组字段:“current”和“history”。 在目前,我将存储所有尚未支付的订单(需要通过所有服务员同步),在“历史记录”中,我将存储所有已关闭的,只需要经理或想要查看数据的人访问

这样我可以最小化访问时间和发送数据量。

这是一种正确,最佳的做法吗?

或者我应该将所有内容存储在一个列表中,然后执行按时间或类似方式排序的查询,并限制我发回的文档数量?

编辑:

在这个系列中,我希望保存多家餐厅的订单。所以我可以在这个集合中为每个餐馆使用一个文件并在那里嵌入订单,或者将这个集合中的所有订单放在同一级别,然后每个订单都有一个restaurantId

1 个答案:

答案 0 :(得分:2)

由于订单集合代表单个餐厅,因此它不会包含所有订单的记录,每个文档看起来像:

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

所有需要知道订单等待出去的服务员都会从此系列获得billed false的所有订单文件。

如果您在billed上放置索引,这应该足够了。

使用您说的其他方法可能会导致问题,例如,它是存储所有订单的集合中的一个文档。我可以想象文档会变得非常大。

在内存中使用运算符($push$pull等)可能会使文档操作变慢。

它还可能在数据库中创建碎片,因为这些碎片会随着时间的推移不断增长,这也会降低性能。

您的方法也不会创建任何优于将每个订单存储为记录的优点,除了您可以一次性获得所有订单待定,但是,配置批量大小,您可能会非常接近将所有订单存储为单独的文件。