1

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

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

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

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

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

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

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

3 回答 3

1

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

于 2012-08-29T14:56:12.077 回答
0

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

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

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

对我来说,“信息流”这个词听起来更像是一个复杂的事件处理问题。

于 2014-06-18T16:49:45.710 回答
0

如果您只想与 java 应用程序交换对象,您还可以查看元组空间。java空间有具体的实现,JavaSpaces,应该可以做你需要的。不确定他们是否可以跟上性能。此外,我不确定这项技术的使用范围有多广,因为它只支持 Java,并且不像现在的 NoSQL 存储那样灵活。

维基百科有更详细的描述和不同实现的列表,其中许多是开源的。

另一种选择是使用 Redis,那里有通知,它可以肯定地扩展到您正在寻找的要求。

于 2014-06-18T11:40:31.060 回答