我有一个数据库设计问题,我真的需要一些帮助和建议。
我们已经建立了一个拍卖平台。最初的策略是"用户可以竞标单一拍卖"并且MongoDB被选中用于工作并且到目前为止一直很好。
现在,我正在尝试实施不同的架构来支持拍卖组,以便用户可以创建一组拍卖,并且客户可以出价拍卖或团体。
第1组
第3组
我正在努力采取正确的方法。理想情况下,在搜索拍卖时,API返回会将组内的所有拍卖分组。至少这是实施集团战略的主要要求,否则对客户来说无用。
这就是我的想法:
保留一个集合竞价。当用户发布组时,每次拍卖存储文档,以及标记为 groupId 的组本身(相同集合)的额外文档(当为null时,我知道它是组本身)。在本文档中,我将保存拍卖的属性(如最低预算金额,总出价金额等)。
但是我如何对此进行分组并返回一个包含拍卖列表的组?您是否认为这是一个合适的解决方案或更好的解决方案,作为MongoDB的文档数据库是一个很好的选择与群组的实现?
这种拍卖方式适用于服务。当前架构是:
拍卖
分类
用户
目前,API正按类别,结束和名称过滤拍卖。组实现仅按类别进行过滤。
此应用程序中还有其他功能,但它们与拍卖组无关。
答案 0 :(得分:0)
您必须复制部分数据才能获得最佳搜索效果。如果您来自关系数据库阵营,这可能是最难学的内容之一。
您的AuctionGroups集合需要有足够的有关每次拍卖的数据,以便进行有用的搜索 - 而不仅仅是每次拍卖的ID。
AuctionGroups {
_id : ObjectId,
name : String, // needed? do the groups have a searchable name/desc?
auctions: {
auctionId : ObjectId,
auctionDesc : String,
categoryName : String
}
}
您应该为要作为拍卖组的一部分搜索的字段添加索引(可能是全文)。您应该在AuctionGroup记录中包含正确显示搜索结果所需的所有字段。当用户打开特定拍卖时,然后从数据库中加载完整的拍卖记录。可能略有更新的值。 (您将注意到,如果您经常使用ebay,那么当前的出价和搜索结果的其他详细信息通常会比实际列表延迟几秒钟。同样的交易。)您可以反馈到您的AuctionGroups更新主要的拍卖条目或计时器。
答案 1 :(得分:0)
我更像是一个关系型的DB家伙,但是我会有2个收藏:
1)分组
2)具有附加属性的拍卖:
所以想法是当用户进入一个群组时:
当用户将拍卖(带有AuctionID)添加到组(具有GroupID)时:
注意:
这样您就可以有效地检索所有组和任何组的auctionIds。然后,您将不得不使用这些ID查询拍卖集合。所以,是的,您将对数据库进行N + 1次呼叫(1次为该组加1次每次拍卖,但我认为每组的拍卖数量无论如何都会很小,所以这不应该是一个大问题。)
如果您想知道拍卖是否已分组,那么只需检查其GroupID是否为空,如果它通过其ID获取相关的组
假设一次拍卖可以绑定到0或1组。如果您希望1次拍卖可以绑定到多个组,那么只需将Auctions集合中的GroupID更改为数组