【问题标题】:MongoDB scheme on a big project一个大项目上的MongoDB方案
【发布时间】:2016-11-18 14:01:19
【问题描述】:

我们最近开始从事一个大项目,我们决定使用 MongoDB 作为 DDBB 解决方案。

我们编写了很多代码,但项目已经开始增长,我们发现我们正在尝试使用joins,而不是使用NoSQL方式,这表示糟糕的 DDBB 设计。

我想在这里问的是我们项目的一个好的设计,目前它包括以下内容:

  • 超过 12.000 种产品
  • 超过 2000 名卖家

每个卖家都应该有自己的私人区域,允许根据 +12.000“产品模板列表”创建产品目录。

卖家应该能够设置价格、库存和报价,然后这些将仅反映在他的公开产品列表中。产品模板列表将保持不变。

目前我们有两个系列。一个用于产品(包含一般产品信息,如名称、描述、照片等)和一个集合,我们在其中存储包含来自第一个集合的产品 ID 的文档,该 ID 与卖方和股票、价格和报价价值。

我们正在使用aggregate 和$lookup 来“模拟”SQL 的左连接来合并两个集合,但是这个过程并没有像我们希望的那样扩展,而且我们遇到了严重的性能问题。

我们知道,在 NoSQL 中使用连接并不是要走的路。我们应该做什么?我们应该如何重构我们的 DDBB 设计?我们是否应该在每个文档中嵌入每个卖家的价格、报价和库存?

【问题讨论】:

  • 你为什么用mongo?
  • 我们在项目开始前开了个会,决定 MongoDB 能给我们带来的好处多于损害。 12K产品和2K卖家只是一个演示数据,未来可能会是数百万。
  • 关系数据库能够有效管理数十亿行,而不仅仅是数百万行......
  • @Renzo 好吧,您甚至可以成功地将 Redis 用于应用程序或平面文件。这并不是一个好的选择。鉴于大多数 RDBMS 的可扩展性和故障转移功能,我们可以在 非常 长时间内争论任何关系数据库实际上是一个不错的选择。
  • @Nache 请提供样本文件。

标签: mongodb performance code-cleanup nosql


【解决方案1】:

使用“嵌入文档”或“连接两个或多个不同集合”的决定应取决于您将如何检索数据。如果每次在获取产品时,您都将获取卖家,那么它使其成为嵌入文档而不是不同的集合是有意义的。但是如果您打算分别获取这两个实体,那么您剩下的唯一选择就是使用 Join。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多