到目前为止的故事:首先,我们得到了一个 Web 应用程序和一个数据库。然后产品所有者决定对第一个应用程序进行分拆(如果第一个应用程序是服装网站,那么第二个网站是专门用于婴儿服装的网站)。我们为第二个应用创建了第二个数据库。之后是第三、第四、第 n 个。我可以证明这个决定是正确的,因为数据库的信息没有相交。
现在:产品负责人决定制作一个超级应用程序,一个应用程序来统治它们。常见故事:用户对某些产品进行查询,结果必须包含来自不同数据库的聚合数据(但不是全部,k from n)。
问题:是否有一些共同的模式可以解决摆在我们面前的常见问题?
第一种方法:超级数据库(所有数据库数据,复制到一个巨大的数据库)
- 优点:只需要一个查询;应用排序或其他过滤更容易
- 缺点:我们将如何区分项目的原始数据库;可能是一些ID冲突;必须对信息进行耗时且危险的复制;不会向后兼容旧应用程序
第二种方法:相同的数据库(无更改)
- 优点:应用程序将向后兼容;不会有危险的应对
- 缺点:一个查询变成多个查询(更慢,更难聚合)