chronicle-map 可以处理大于内存的数据吗?

Can chronicle-map handle data larger than memory?

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

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

答案取决于您的操作系统。在 Windows 上,Chronicle Map 必须适合主内存,但是在 Linux 和 MacOSX 上,它在主内存中没有修复(不同之处在于内存映射在这些操作系统上的实现方式)注意:Linux 甚至允许您映射比磁盘更大的区域 space(MacOSX 和 Windows 不支持)

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

注意:我们已经对 25 亿个条目的 Chronicle Map 进行了测试,它使用 64 位散列键时表现良好。