在多个Java进程之间提供共享实体的解决方案

时间:2012-08-29 14:42:50

标签: java caching concurrency nosql

我正在尝试从不同Java进程处理的多个部分重建信息流。请注意,我不生成流程,我只是阅读了一些有关它们的信息。

我尝试使用MySQL(MyISAM / InnoDB表)和INSERT ON DUPLICATE KEY UPDATE使用每个流的id。我还尝试存储所有信息并在最后运行查询以获取完整信息。这些方法都没有产生所需的性能。

我正在寻找一种解决方案,它允许我在多个Java进程之间拥有一组共享对象。对象在运行之间应该是持久的,并且要快速地同时查找/更新(每秒> 100k查找/更新)。

我想到了一些解决方案,包括:

  • NoSQL:像MongoDB,HBase等。
  • 像EhCache,Memcached等的缓存解决方案。

问题是我对这些解决方案没有任何经验。那么,您认为符合以下标准的是什么:

  • 在单个系统上非常快。我提到的大多数应用程序都是为分布式系统构建的,但事实并非如此。
  • 易于学习/使用(我希望能够在一天内对其进行原型设计)
  • 成熟技术
  • 即使是出于商业目的也可以免费使用
  • 最好是开源

3 个答案:

答案 0 :(得分:1)

您可以尝试一个单独的java进程来协调其他进程。此过程将把信息传递给主进程。你可以用RMI连接它们。

答案 1 :(得分:0)

如果你只想用java应用程序交换对象,你也可以看到元组空间。 Java,JavaSpaces有特定的空间实现,它们应该能够满足您的需求。不确定他们是否能跟上表现。此外,我不确定这项技术的使用范围有多广,因为它只支持Java,并且不像NoSQL商店那样灵活。

Wikipedia有更详细的描述和不同实现的列表,其中许多都是开源的。

另一个选择是使用Redis,你有通知,它可以确保扩展到你正在寻找的要求。

答案 2 :(得分:0)

旧的(遗留?)解决方案是JavaSpaces。但是,从软件架构师的角度来看,我会说分布式缓存是当今的替代品。特别是看看淡褐色和无限期。

从性能角度来看,我对“大”分布式缓存解决方案的性能不满意,当只需要一个内存缓存时,请参阅cache2k benchmarks页面上的我的文章(hazelcast需要是在这里添加)。

无论如何,请首先澄清您的问题陈述,因为您的问题属于XyProblem类别。您没有描述实际问题,您的问题归结为“快速可靠的分布式对象”解决方案。有什么样的数据?费率是多少?访问者是谁?考虑到写入和读取是并行的这一事实,需要满足哪些一致性保证?

通过术语“信息流”,它听起来更像complex event processing问题。