MongoDB NoSQL模式设计

MongoDB NoSQL模式设计,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一个数据库设计问题,我真的需要一些帮助和建议 这是为了我们建立的拍卖平台。最初的策略是“用户可以在一次拍卖中出价”,MongoDB被选为这项工作的执行者,目前为止效果良好 现在我正在尝试实现一个不同的模式来支持拍卖组,这样用户就可以创建一个由多个拍卖组成的拍卖组,而客户可以对一个拍卖或一个拍卖组进行出价 第一组 拍卖 拍卖B 拍卖C 第3组 拍卖D 我正在努力寻找正确的方法。理想情况下,在搜索拍卖时,API返回将所有拍卖分组。至少这是实施集团战略的主要要求,否则对客户毫无用处 我是这

我有一个数据库设计问题,我真的需要一些帮助和建议

这是为了我们建立的拍卖平台。最初的策略是“用户可以在一次拍卖中出价”,MongoDB被选为这项工作的执行者,目前为止效果良好

现在我正在尝试实现一个不同的模式来支持拍卖组,这样用户就可以创建一个由多个拍卖组成的拍卖组,而客户可以对一个拍卖或一个拍卖组进行出价

第一组

  • 拍卖
  • 拍卖B
  • 拍卖C
第3组

  • 拍卖D
我正在努力寻找正确的方法。理想情况下,在搜索拍卖时,API返回将所有拍卖分组。至少这是实施集团战略的主要要求,否则对客户毫无用处

我是这样想的:

保存单个收藏拍卖。当用户发布组时,会在每次拍卖时存储文档,并为组本身(同一集合)存储一个额外文档,标记为groupId(如果为空,我知道它是组本身)。在本文档中,我将保存拍卖的财产(如最低预算总额、总出价等)

但是,我如何将其分组并返回一个包含拍卖列表的组呢?您认为这是一个合适的解决方案还是更好的解决方案,作为MongoDB和document db是使用组实现的好选择

这是一个服务拍卖模式。当前模式为:

拍卖

  • Id
  • 分类ID、结束和状态-复合键
  • 开始
  • MaxBid
  • MinBid
  • 出价-用户ID、数量和日期
  • 声誉-最低声誉需要根据完成的工作数量、收入和他们的反馈发布出价
类别

  • 名称
  • 说明
  • 统计数据
用户

  • 出价-用户的工作建议:拍卖Id、金额、日期
  • 拍卖-创建拍卖
  • 声誉
  • 总收入
  • 类别-用户完成作业的类别Id
目前,API正在按类别、结束和名称过滤拍卖。组实现将仅按类别进行筛选


此应用程序中还有其他功能,但它们与拍卖组无关。

您必须复制一些数据以进行最佳搜索。如果您来自关系数据库阵营,这可能是最难学习的事情之一

您的AuctionGroups集合需要有足够的关于每次拍卖的数据,以便进行有用的搜索,而不仅仅是每次拍卖的ID

AuctionGroups {
 _id : ObjectId,
 name : String, // needed? do the groups have a searchable name/desc?
 auctions: { 
   auctionId : ObjectId,
   auctionDesc : String,
   categoryName : String
 }
}

您应该为希望作为拍卖组的一部分进行搜索的任何字段添加索引(可能是全文)。您应该在AuctionGroup记录中包含正确显示搜索结果所需的所有字段。当用户打开特定拍卖时,从数据库中加载完整的拍卖记录。可能有稍微更新的值。(如果您经常使用易趣,您会注意到当前出价和搜索结果上的其他详细信息通常会比实际挂牌延迟几秒钟。相同的交易。)您可以在更新主拍卖条目或计时器时返回到您的拍卖组。

我更像是一个关系数据库的家伙,但尽管如此,我还是有两个系列:

1) 组队

  • GroupID
  • AuctionGroupID:指向拍卖集合中相关“分组”拍卖的ID
  • AuctionID:中相关“正常”拍卖的ID列表 拍卖收藏
  • 额外的搜索数据(将充当 缓存(用于所有分组拍卖):
    • [CategoriesID]:相关拍卖中类别的汇总列表
    • minBegin,maxBegin
    • 我的,马克森德
2) 具有附加属性的拍卖:

  • GroupID-对于非分组拍卖,该值为空
  • IsGroup(可选,见下文)布尔标志-否则必须将AuctionID与 组集合中的AuctionGroupID,以确定此拍卖是否为“分组”拍卖
因此,当用户进入一个组时:

  • 为组生成新的guid GroupID
  • 插入新的 拍卖集合中的“记录”,组id=步骤中的id 1,并且可以选择IsGroup=true
  • 在列表中插入新的“记录” 组集合,步骤1)中使用GroupID,步骤2中使用AuctionGroupID生成的id
  • 当用户将拍卖(使用AuctionID)添加到组(使用GroupID)时:

  • 使用该GroupID设置拍卖记录中的GroupID属性, 并且可以选择isGroup=false
  • 将auctionID添加到组记录中的auctionID列表中
  • 更新有关的未公开信息 组记录(类别、minBegin、maxBegin)
  • 注:

  • 当用户更改任何选项时,您需要执行步骤3) 集团内现有的拍卖
  • 组中的所有拍卖加上分组拍卖本身在拍卖集合中将具有相同的GroupID
    • 如果您使用可选的isGroup标志,这将告诉您哪些活动是“组”活动
    • 否则,您可以通过将其与组记录中的AuctionGroupID进行匹配来判断其中哪一个是分组的
  • 这样,您可以高效地检索所有组和任何组的拍卖ID。然后,您必须使用这些ID查询拍卖集合。因此,是的,您将有N+1个对数据库的调用(1个用于组,另1个用于每个auc)