2

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

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

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

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

4

2 回答 2

3

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

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

于 2013-12-30T06:38:04.057 回答
0

来自Hazelcast 队列存储中的溢出

作者: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 使用存储),则将二进制配置设置为 true。这将提高性能,因为将跳过反序列化步骤。

在这里您可以看到一些 QueueStore 实现的示例:

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

于 2016-03-04T06:23:30.717 回答