您好我正在编写一个Web应用程序,它连接到700个数据库并执行基本的SELECT查询。
例如:
有一个按钮可以检索每个分支的经理。 公司有700个分支,每个分支细节都存储在不同的数据库中。 选择查询从每个数据库中检索1条记录,并返回该分支的管理器。 因此执行此代码需要很长时间。 我不能让用户等到这个时间(30分钟)
由于内存限制,我无法使用多线程。
注意:此Web应用程序使用Spring MVC。服务器Tomcat7。
可能的解决方法吗?
答案 0 :(得分:2)
有了许多要查询的数据库,我能看到的唯一可能的解决方案就是缓存。如果实时不是问题(请注意,执行30分钟会使您失去实时),那么您可能会探索以下可能性,所有这些都需要将数据集中到单个逻辑或物理数据库中:
群集:将数据库服务器放在一个庞大的群集中,该群集配置为性能,因此在内部使用缓存。根据许可证成本,此解决方案可能过于不切实际或甚至过于昂贵。
将数据推送到中央数据库:所有700个数据库服务器都会将您需要的数据推送到您的应用程序将使用的中央数据库。您可以使用数据库服务器'复制功能(例如在MSSQL或PostgreSQL中)或计划的数据传输。此方法需要对数据库服务器进行管理访问,以配置复制或删除脚本以按计划运行。
从中央数据库主机中提取数据:让集中式主机将所需数据提取到本地数据库,其中的表通过计划的数据传输进行更新。这是最简单的方法。它的缺点是实时查询是不可能的。
传输仅需要的数据是关键。使您的select语句尽可能缩小以限制执行时间。
如果资源限制紧张,中央数据库可能是您的Web应用程序服务器或不同的计算机。我发现PostgreSQL只需很少的努力就可以与MSSQL实现出色的兼容性。没有进一步的信息,它就更难准确。