2012-08-29 94 views
1

我正试图从不同的Java进程处理的多个部分重构信息流。请注意,我不产生流量,我只是读了一些关于它们的信息。在多个Java进程之间提供共享实体的解决方案

我已经尝试使用MySQL(MyISAM/InnoDB表)与插入重复密钥更新使用每个流的ID。我也尝试存储所有信息并在最后运行查询以获取完整信息。这些方法都不能产生所需的性能。

我正在寻找一种解决方案,可以让我在多个Java进程之间拥有一组共享对象。对象应该在运行之间保持一致,并且可以快速查找/更新(每秒> 100k查找/更新)。

我想了几个解决方案,包括:

  • 的NoSQL:是这样的MongoDB,HBase的等
  • 一个缓存解决方案一样的Ehcache,Memcached的等

的问题是我没有任何这些解决方案的经验。那么,你会推荐什么符合以下标准:

  • 在单个系统上速度非常快。我提到的大部分应用程序都是为分布式系统构建的,但在这里并不是这样。
  • 易学/使用(我希望能够为原型就在一天)
  • 成熟的技术
  • 免费用于商业目的使用
  • 最好的开源
+0

我怀疑你不会从这些库中获得每秒100K的更新。我写了一个更快的库,但它只支持一个作者,它需要很好地理解数据如何在内存中布局。 –

回答

1

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

0

如果您只想执行包含Java应用程序的对象交换,也可以查找元组空间。 java,JavaSpaces有特定的空间实现,它应该能够完成你所需要的。不知道他们是否可以跟上演出。另外我不确定这种技术在多大程度上仍然被广泛使用,因为它只支持Java,并且不像NoSQL商店那么灵活。

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

另一种选择是与Redis一起使用,您在那里有通知,它可以确保按照您要查找的要求进行扩展。

0

旧的(传统?)解决方案是JavaSpaces。然而,从软件架构师的角度来看,我认为分布式缓存是现今的替代品。特别要看看榛子和infinispan。

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

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

术语“信息流”这个词听起来更像是一个complex event processing问题。

相关问题