【问题标题】:Hazelcast fast recovery through shared MemoryHazelcast 通过共享内存快速恢复
【发布时间】:2013-12-30 06:20:49
【问题描述】:

我们计划将我们的 C++ 内存数据库应用程序移植到 Java 中。 我们希望将 Hazelcast 用作 Java 用语中的内存数据库解决方案。

拥有 40TB 数据的系统所需的吞吐量是每秒 30k 次读取和写入。 由于内存中的数据量很大,一旦系统出现故障,我们就不能在吞吐量上妥协。

使用 C++ 的内部实现为我们提供了将这些数据与磁盘存储一起存储在共享内存中的灵活性。 一旦应用程序重新启动,我们可以通过将进程附加回共享内存文件来恢复它。

我们能否在 Hazelcast 中也提供类似的功能? 或者是否有一些类似的内存数据网格解决方案可以提供此功能?

【问题讨论】:

    标签: java ehcache hazelcast scaleout-hserver


    【解决方案1】:

    目前 Hazelcast 没有磁盘溢出功能;但我们的人正在努力,希望它可以在 Hazelcast 3.3 中使用。

    因此,您需要使用自定义 MapLoader/MapStore 接口,您可以连接到 Map 实例并自己添加持久性。

    【讨论】:

      【解决方案2】:

      来自Overflow in Hazelcast Queue Store

      by Enes Akar 2013 年 12 月 26 日 Hazelcast 队列存储中的溢出已关闭评论 Hazelcast 3 的新功能之一是 队列存储。

      不同于地图商店;溢出是可能的。如果你设置一个内存 限制;它开始持久化到磁盘并在排队时跳过内存 达到这个限制。

      这里是配置:

      <queue-store>
                  <class-name>com.hazelcast.QueueStoreImpl</class-name>
                  <properties>
                      <property name="binary">false</property>
                      <property name="memory-limit">1000</property>
                      <property name="bulk-load">500</property>
                  </properties>
      </queue-store>
      

      以上配置:

      项目将以其对象形式(反序列化形式)持久化。

      如果队列的大小已达到 1000(内存限制),则下一个元素 只会持久化到磁盘,不会存储在内存中。

      商品将从商店批量加载,大小为 500。

      还有一些注意事项:

      在内存过高的情况下避免过度使用 RAM 时使用内存限制 加载。

      如果您希望内存(和存储)中的所有项目使用 Integer.MAX_VALUE,如果 您希望所有项目都在商店中,然后使用 0 作为内存限制。

      如果您没有从外部到达商店(只是 hazelcast 使用 store) 然后将二进制配置设置为 true。那会增加 将跳过作为反序列化步骤的性能。

      这里你可以看到一些 QueueStore 实现的例子:

      https://github.com/hazelcast/hazelcast/blob/master/hazelcast/src/test/java/com/hazelcast/queue/QueueStoreTest.java

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-04
        • 1970-01-01
        • 2016-12-07
        • 1970-01-01
        相关资源
        最近更新 更多