我们计划将我们的C ++内存数据库应用程序移植到Java中。 我们希望将Hazelcast用作Java术语中的内存数据库解决方案。
具有40TB数据的系统所需的吞吐量是每秒30k读取和写入。 由于内存中的数据量很大,一旦系统出现故障,我们就无法在吞吐量上做出牺牲。
使用C ++的内部实现为我们提供了将这些数据与磁盘存储一起存储在共享内存中的灵活性。 应用程序重新启动后,我们可以通过将进程附加回共享内存文件来恢复它。
我们是否也可以在Hazelcast中使用类似的功能? 或者是否有一些类似的内存数据网格解决方案,我们可以使用此功能?
答案 0 :(得分:3)
目前Hazelcast没有磁盘溢出功能;但我们的人正在研究它,希望它可以在Hazelcast 3.3中使用。
因此,您需要使用自定义MapLoader / MapStore接口,您可以连接到Map实例并自行添加持久性。
答案 1 :(得分:0)
来自Overflow in Hazelcast Queue Store
作者:Enes Akar 2013年12月26日关于Hazelcast队列商店溢出的评论关闭Hazelcast 3的新功能之一是 队列商店。
与地图商店不同;溢出是可能的。如果你设置了内存 Iimit;它开始持久化到磁盘并在队列时跳过内存 达到这个极限。
这里的配置:
<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,if 你想要存储中的所有项目然后使用0作为内存限制。
如果你没有到外面的商店(只是hazelcast使用 store)然后将二进制配置设置为true。那会增加 将跳过作为反序列化步骤的性能。
在这里您可以看到QueueStore实现的一些示例: