我有一个数据转换产品,它允许在数据库中选择一个表并将源数据库中的行数据转换为目标数据库.
这是在当前产品(基于java的工作台和引擎)中处理的,一次处理1000行并且并行执行10个线程.这种方法适用于较小的数据集.但是,当我必须同时转换大量数据集(比如大约X万条记录)时 – 这种方法仍然有效,但是
>我的产品运行的主机的cpu负载很重.
>源数据库和目标数据库被打得太多,他们开始放慢速度. (现在,这可能是因为数据库服务器可能在较慢的硬件上运行.)
我开始寻找解决方案,并通过在源/目标数据库服务器计算机上请求硬件“加强”来快速解决这个问题.这涉及到购买新的多核cpu和一些额外的RAM.事实证明,升级硬件不仅仅是唯一的问题:需要购买数据库的多个软件许可证 – 多亏了多核处理器(每个核心许可证).
所以,球现在在我的球场上,我将不得不通过改变我的产品来找到解决这个问题的方法.而且,这是我需要你帮助的地方.此时,我可以想到一种处理大负载的可能方法:
Approach1
>从源数据库读取数据,将其持久保存到临时介质(文件).
>通过在分布式环境(更便宜的单核机器)中运行数据来转换持久文件中的数据,通过处理切换到文件持久性的“权衡移动”. (使用Apache Hadoop之类的东西来处理分布式计算部分)
>将数据写入目标数据库.
从架构的角度来看,这就是我现在能想到的.
你以前处理过这种情况吗?如果是的话,你是怎么处理的?
感谢您的建议和帮助.
最佳答案
原文链接:https://www.f2er.com/java/437719.html