我的团队需要找到解决以下问题的方法:
我们的应用程序允许用户查看企业的总销售额、产品总数、区域总数、区域 x 产品总数、区域 x 部门总数等。你明白了。有太多的值需要聚合才能得到其中许多无法即时计算的总数——我们必须预先聚合它们以提供合适的响应时间,这个过程大约需要 5 分钟。
这个问题,我们认为是一个常见的问题,但找不到参考,是如何在不关闭用户的情况下允许更新各种销售。此外,用户不能接受最终的一致性——如果他们向下钻取总共 12 个,他们最好看到加起来为 12 的数字。所以我们需要一致性 + 可用性。
到目前为止,我们提出的最佳解决方案是将所有查询定向到冗余数据库“B”(针对查询进行了优化),而将更新定向到主数据库“A”。当我们决定花 5 分钟更新所有聚合时,我们更新数据库“C”,它是另一个冗余数据库,就像“B”一样。然后,新用户会话被定向到“C”,而现有用户会话继续使用“B”。最终,警告任何使用“B”离开的人,我们终止“B”上的会话并在那里重新聚合,交换“B”和“C”的角色。典型的排水停止场景。
我们很惊讶我们找不到任何关于此的讨论,并担心我们过度设计了这个问题,或者这可能不是我们认为的问题。非常感谢任何建议。