【发布时间】: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