编年史图可以处理大于内存的数据



我对堆内存的工作方式有点困惑。我有一台具有 32GB 内存的服务器,以及一个大小约为 1TB 的键值映射数据集。我正在寻找一个简单快速的嵌入式 Java 数据库,它允许我根据这个 1TB 数据集将键映射到一个值,该数据集主要必须从磁盘读取。此数据集中的每个条目都很小(<500 字节),因此我认为使用文件系统是无效的。

我想为此使用编年史地图。我读到堆外内存使用量可能会超过 ram 大小,并且它以某种方式与文件系统交互,但与此同时,编年史图被描述为内存数据库中的数据库。Chronicle Map 是否可以为我的服务器处理 1TB 数据集,或者我是否仅限于使用 32GB 或更小的数据集?

答案是这取决于您的操作系统。在Windows上,Chronicle Map必须适合主内存,但是在Linux和MacOSX上,它没有主内存中的修复(区别在于内存映射如何在这些操作系统上实现) 注意:Linux甚至允许您映射大于磁盘空间的区域(MacOSX和Windows没有)

因此,在 Linux 上,您可以在具有 32 GB 内存的机器上映射 1 TB 甚至 100 TB。请务必记住,您的访问模式和驱动器选择对性能至关重要。如果您通常大部分时间访问相同的数据并且您拥有 SSD,这将表现良好。如果您有旋转磁盘和随机访问模式,您将受到驱动器速度的限制。

注意:我们已经测试了 Chronicle Map 到 25 亿个条目,它的性能很好,因为它使用了 64 位的密钥哈希。

最新更新