是否有通过网络同步对象Map的标准方法?

时间:2014-11-17 10:59:49

标签: java network-programming synchronization

在Java中,我有一个包含对象的HashMap(如果有帮助,可以序列化)。在网络的其他地方,我在另一个应用程序副本中有另一个HashMap,我想与第一个保持同步。

例如,如果在计算机A上有人运行myMap.put("Hello", "World");而在计算机B上有人运行myMap.put("foo", "bar");,那么在传播更改一段时间后,两台计算机都将mayMap.get("Hello") == "World"mayMap.get("foo") == "bar"

Java语言,库或其他程序中的现有工具是否满足此要求?如果这已经解决了问题"为此不必编写自己的代码就好了。

如果有多种方法可以实现这一点,我希望按优先顺序:

  1. 保证更改会在100%的时间内传播(并不需要花费多长时间)
  2. 变化迅速传播
  3. 在计算机之间使用最少带宽的情况下传播更改。
  4. (注意:我在搜索解决方案时遇到了麻烦,因为结果主要是关于同一应用程序中从多个线程同步对Map的访问的问题。这是我的问题是什么。)

2 个答案:

答案 0 :(得分:3)

您可以查看hazelcast内存数据库。

它是专为分布式架构设计的开源解决方案。

由于淡褐色IMap延伸java.util.Map,因此它可以很好地映射到您的问题。

链接:Hazelcast IMap

答案 1 :(得分:1)

您要做的是在两个节点之间调用群集

这里我有一些解决方案

  1. 您可以使用序列化制作地图来达到您的要求 每个时间间隔内可序列化的映射读写状态 并同步它。这是实现你的核心和基本方式 功能。但是通过使用序列化,您必须手动管理     地图的同步(即你必须为此做代码)

  2. Hazelcast开源分布式缓存机制hazelcast 是最好的api,并达到了成为集群环境的图书馆 并在不同节点之间共享数据

  3. coherence web还提供了实现群集的机制 甲骨文

  4. Ehcache是2003年推出的缓存库,用于改进 通过减少底层资源的负载来提高性能。 Ehcache是 不适用于通用缓存和缓存Hibernate (二级缓存),数据访问对象,安全凭证和 网页。它还可以用于SOAP和RESTful服务器缓存, 应用程序持久性和分布式缓存

  5. 以上所有 Hazelcast 是最好的api通过它一定会帮到你