有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

并行处理集群java独立应用程序

我正在开发一个java独立应用程序,它可以读取大文件(500 Mo),反序列化这些文件(protobuf message-GoogleAPI),并将其插入到Oracle11DB中

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

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

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

有人对此有想法吗


共 (1) 个答案

  1. # 1 楼答案

    how to make the insertion into the main table faster

    头奖!你必须找出你的瓶颈,很可能是在读取文件或数据库。文件很简单,只需将它们拆分并放在不同的机器上即可。当然,在同一台机器上运行多个JVM不会有帮助,因为它们都会争夺I/O。因此,您必须拆分文件,并将它们与JVM一起分发到多台机器上

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

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

    how to update the cache?

    又是头奖了。您还必须分发/群集缓存。番石榴贮藏还不够,你需要一些更复杂的东西,比如RMI贮藏、陶土或榛子酱。基本上,它们提供缓存API,但会通知集群中的其他成员缓存已更改,需要失效

    顺便说一句,500 MiB并不是那么多,处理需要多长时间?再一次,你必须通过分析来找出是什么让你放慢了脚步