MongoDB,如何建立两个或多个数据库的联合

时间:2012-10-01 11:37:25

标签: mongodb database-design

到目前为止的故事:首先,我们有一个Web应用程序和一个数据库。然后产品所有者决定剥离第一个应用程序(如果第一个应用程序是衣服的站点,第二个站点是专用于婴儿服装的站点)。我们为第二个应用程序创建了第二个数据库。第三,第四,之后的第n个。我可以证明这个决定是正确的,因为数据库的信息并不相交。

现在:产品所有者决定制作一个超级应用程序,一个应用程序来统治它们。常见故事:用户对某些产品进行查询,结果必须包含来自不同数据库的聚合数据(但不是全部,来自n的k)。

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

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

  • 专业人员:只需要一个查询;它更容易应用排序或其他过滤
  • 缺点:我们将如何区分项目的原始数据库;可能是ID的一些冲突;必须进行耗时且危险的信息复制;将不会向后兼容旧版应用程序

第二种方法:相同的数据库(无变化)

  • pros :应用程序将向后兼容;没有危险的应对
  • 缺点:一个查询变为多个查询(更慢,更难聚合)

1 个答案:

答案 0 :(得分:2)

将这一切安置在多个数据库中是很好的,因为MongoDB(当然)没有JOIN,没有真正的威胁存在聚合问题。我想如果10gen在聚合函数等中释放子选择的能力以允许某种类型的伪连接,那么将来可能会遇到问题。

如果你要做多个MR输出到同一个集合但是MR现在可以输出到不同的数据库(现在已经有一段时间了),这里可能存在一个MR问题,所以没关系。

对于多个数据库(在2.2中),由于2.2中的锁定机制是DB级别,因此锁定将在您身边。

在我个人看来,考虑到复制和冲突ID的问题,我会坚持你所拥有的,只需创建一个抽象层,使它看起来像是来自一个数据库。

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