【发布时间】:2014-02-12 09:38:51
【问题描述】:
我们正在开发两个 web 应用程序,webapp#1 是一个商店应用程序,基于 spring 的应用程序和 mysql,另一个 (webapp#2) 是 webapp#1 的后台应用程序。
我们希望后台操作 (webapp#2) 不会影响 webapp#1 的数据库,这需要非常高的可用性。
我们面临的问题是如何共享(如果有的话)与两个 web 应用相关的实体。
例如,为了让后台生成关于商店产品的按需报告,它必须在实体“产品”和“商店”上进行聚合。
现在,“Product”和“Store”显然是 webapp#1 架构中的实体,但为了让 webapp#2(后台)生成报告,它必须具有相同的实体。
那么,我们究竟如何才能做到这一点?我们应该在两个 webapps 模式上复制“产品”和“商店”吗? (并遭受冗余数据的困扰)冗余甚至是现实生活中的一种做法吗?好像太糟糕了。
请记住,如果架构仅在 webapp#1 中,则后台应用程序可能会在生成报告时产生干扰。
报告场景不是真正的问题,它只是一个例子。
最好的,
【问题讨论】:
-
是只有读访问是干扰还是读写?
-
读取访问也受到干扰,因为某些查询非常复杂
-
我认为在高可用性数据库上触发报告生成查询不是一个好主意。您需要有某种暂存数据库来触发报告生成查询。
-
所以我需要数据冗余?
-
不完全。但是对于例如如果您正在创建每日报告 - 创建一个每日作业,该作业将在 1 天期间将实时数据导入暂存数据库。导入完成后,在暂存数据库上运行您的复杂查询。生成报告后,您可以从暂存数据库中清除数据。确保暂存数据库保存您生成报告期间的数据。
标签: java mysql spring web-applications