MongoDB,如何将两个或多个数据库合并

MongoDB,如何将两个或多个数据库合并,mongodb,database-design,Mongodb,Database Design,到目前为止的故事:首先,我们得到了一个web应用程序和一个数据库。然后,产品所有者决定对第一个应用程序进行衍生(如果第一个应用程序是服装网站,那么第二个网站是婴儿服装网站)。我们为第二个应用程序创建了第二个数据库。第三,第四,第n。我可以证明这一决定是正确的,因为数据库的信息没有交叉 现在:产品负责人决定制作一个超级应用程序,一个应用程序来管理所有产品。常见情况:用户对某些产品进行查询,结果必须包含来自不同数据库的聚合数据(但不是全部,k来自n) 问题:解决我们面前的共同问题是否有一些共同模式

到目前为止的故事:首先,我们得到了一个web应用程序和一个数据库。然后,产品所有者决定对第一个应用程序进行衍生(如果第一个应用程序是服装网站,那么第二个网站是婴儿服装网站)。我们为第二个应用程序创建了第二个数据库。第三,第四,第n。我可以证明这一决定是正确的,因为数据库的信息没有交叉

现在:产品负责人决定制作一个超级应用程序,一个应用程序来管理所有产品。常见情况:用户对某些产品进行查询,结果必须包含来自不同数据库的聚合数据(但不是全部,k来自n)

问题:解决我们面前的共同问题是否有一些共同模式

第一种方法:超级数据库(所有数据库数据,复制到一个大型数据库)

  • 优点:只需要一个查询;更容易应用排序或其他筛选
  • 缺点:我们将如何区别项目的原始数据库;可能是一些ID冲突;必须执行耗时且危险的信息复制;将与旧的应用程序不向后兼容
第二种方法:相同的数据库(无更改)

  • 优点:应用程序将向后兼容;不会有危险的应对措施
  • 缺点:一个查询变成多个查询(速度较慢,更难聚合)

将这一切都包含在多个数据库中是可以的,因为MongoDB(当然)没有连接,因此这里没有聚合问题的真正威胁。我想,如果10gen在聚合函数等中释放子选择功能,允许某种类型的伪连接,将来可能会出现问题

如果要将多个MRs输出到同一个集合,那么这里的MRs可能会有一个问题,但是现在可以将MRs输出到不同的DBs(已经有一段时间了),所以这很好

此外,对于多个数据库(在2.2中),由于2.2中的锁定机制是DB级别的,所以锁定将在您这边

在我个人看来,考虑到复制和冲突ID的问题,我会坚持使用现有的方法,只需创建一个抽象层,使其看起来像来自一个数据库


当然,如果您觉得将其存储在不同的数据库中是一个真正的逻辑问题,并且很容易混淆数据,那么您可能别无选择。

您已经列出了这两个选项。现在你必须选一个。