4

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

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

4

1 回答 1

4

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

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

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

于 2016-12-31T12:55:09.733 回答