集群java独立应用程序

时间:2012-10-19 19:46:34

标签: java parallel-processing

我正在开发一个java独立应用程序,它可以读取大文件(500 Mo),反序列化这些文件(protobuf消息 - Google api)并将其插入到oracle 11 DB中。

重要的是,数据库中有一个主表,还有几个小表(可以与字典进行比较)。 对于所有词典,我有一个谷歌缓存(番石榴)。 主表没有缓存。在主表中只有插入,没有更新,没有删除。

目前,此应用程序运行在单个JVM上。 (可能我可以添加多线程。)

我想让它适用于几个JVM。 我的问题是知道该怎么做才能获得更高的性能并使其正常工作。 我发现了两个问题:如果群集应用程序允许我同时读取多个文件,如何更快地插入主表,以及如何更新缓存?

有人对此有所了解吗?

1 个答案:

答案 0 :(得分:2)

  

如何更快地插入主表

累积奖金!您必须确定您的瓶颈,并且很可能是读取文件或数据库。文件很简单,只需将它们拆分并放在不同的机器上即可。当然,在同一台机器上运行几个JVM无济于事,因为它们都会竞争I / O.因此,您必须拆分文件并将它们与JVM一起分发到多台计算机上。

我假设反序列化protobuf不是瓶颈,它需要一些CPU,但不是那么多。

最后你有了一个数据库。单个单线程JVM可以充分利用数据库,但值得尝试。首先让你的应用程序多线程,看看它是否有帮助。

  

如何更新缓存?

再次获得奖金。您还必须分发/群集缓存。番石榴缓存是不够的,你需要更复杂的东西,如RMI集群EhCache,Terracotta或Hazelcast。基本上,它们提供缓存API,但通知群集的其他成员缓存已更改并需要使其无效。

BTW 500 MiB实际上并不是那么多,处理需要多长时间?同样,你必须进行分析才能找到让你失望的原因。