【问题标题】:Two web applications with shared data两个具有共享数据的 Web 应用程序
【发布时间】: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


【解决方案1】:

选项 1:例如,您可以使用 Web 服务。从真正的聚合表中读取数据。它被一些工作填充。

选项 2:或者拥有一个带有自己的数据库的报告服务器,webapp#2 报告应用程序可以使用该数据库。在这个数据库中,当 webapp#1 没有被加载时,可以在预定义的时间完成 db 级别的复制。

【讨论】:

    猜你喜欢
    • 2013-04-22
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多