我正在尝试从不同Java进程处理的多个部分重建信息流。请注意,我不生成流程,我只是阅读了一些有关它们的信息。
我尝试使用MySQL(MyISAM / InnoDB表)和INSERT ON DUPLICATE KEY UPDATE使用每个流的id。我还尝试存储所有信息并在最后运行查询以获取完整信息。这些方法都没有产生所需的性能。
我正在寻找一种解决方案,它允许我在多个Java进程之间拥有一组共享对象。对象在运行之间应该是持久的,并且要快速地同时查找/更新(每秒> 100k查找/更新)。
我想到了一些解决方案,包括:
问题是我对这些解决方案没有任何经验。那么,您认为符合以下标准的是什么:
答案 0 :(得分:1)
您可以尝试一个单独的java进程来协调其他进程。此过程将把信息传递给主进程。你可以用RMI连接它们。
答案 1 :(得分:0)
如果你只想用java应用程序交换对象,你也可以看到元组空间。 Java,JavaSpaces有特定的空间实现,它们应该能够满足您的需求。不确定他们是否能跟上表现。此外,我不确定这项技术的使用范围有多广,因为它只支持Java,并且不像NoSQL商店那样灵活。
Wikipedia有更详细的描述和不同实现的列表,其中许多都是开源的。
另一个选择是使用Redis,你有通知,它可以确保扩展到你正在寻找的要求。
答案 2 :(得分:0)
旧的(遗留?)解决方案是JavaSpaces。但是,从软件架构师的角度来看,我会说分布式缓存是当今的替代品。特别是看看淡褐色和无限期。
从性能角度来看,我对“大”分布式缓存解决方案的性能不满意,当只需要一个内存缓存时,请参阅cache2k benchmarks页面上的我的文章(hazelcast需要是在这里添加)。
无论如何,请首先澄清您的问题陈述,因为您的问题属于XyProblem类别。您没有描述实际问题,您的问题归结为“快速可靠的分布式对象”解决方案。有什么样的数据?费率是多少?访问者是谁?考虑到写入和读取是并行的这一事实,需要满足哪些一致性保证?
通过术语“信息流”,它听起来更像complex event processing问题。