哪种在 MongoDB 中存储此数据的方式性能更高?在项目集合中缓存 max/min 值或基于所有出价的即时计算?

Which way of storing this data in MongoDB is more performant? Caching max/min values in Item collection or on-the-fly calculation based on all bids?

我正在与一家创建交换平台的初创公司合作,用户可以在该平台上购买和出售来自具有大约 50,000 个文档的项目集合中的商品,他们为这些项目创建买卖出价。

对于我们的 "buy it now"/"sell it now" 功能,需要计算商品的最佳买卖出价。目前我们正在使用 UserBids 集合中的买卖标价字段中的索引即时计算这些(对于给定的 Item 文档,假设 ID 为 1234,我们将找到项目 1234 的所有 UserBids 并获得最大买入标价和最低卖出价)。这用于向每个用户提供他们可以 buy/sell 立即购买商品的最佳价格,并且需要对 UserBids 集合进行大量查询,但避免了必须为每个商品更新规范的 'best' 价格.

我想知道如果 Item 架构具有 MaxBuy 和 MinSell 字段会不会性能更高。这将要求项目文档的 MaxBuy 和 MinSell 字段在用户每次输入新出价时接收更新,使用类似 Items.update({id: itemId, $or: [{maxBuy: {$lt: currentBuyBid}}, {maxBuy: null}]}) 的内容。我们仍然需要执行相同数量的查询来向用户显示最优惠的价格,但这些查询不需要聚合,并且随着交易的增长,我们预计 UserBids 集合的增长将远远超过 Items 集合(这应该保持相对相同的大小)

出价可能 added/modified 有规律,但我们预计查看最佳 buy/sell 价格的用户数量会高出大约 10-100 倍。是否有好的方法来评估这些方法中哪一种最好?

这主要取决于哪个用例更频繁且对性能更关键:

  1. 用户出价会触发重新计算所述字段
  2. 有人查价

当您假设后一种用例更频繁时,这就是您应该优化的用例。