我对堆内存的工作方式感到有些困惑。我有一个32GB内存的服务器,以及大小约1TB的键值映射数据集。我正在寻找一个简单而快速的嵌入式Java数据库,它允许我根据这个1TB数据集将键映射到一个值,这个数据集通常必须从磁盘读取。此数据集中的每个条目都很小(<500字节),因此我认为使用文件系统将是无效的。
我想为此使用Chronicle Map。我读到堆内存使用量可以超过ram大小,并且它以某种方式与filesysytem交互,但同时,Chronicle Map被描述为内存数据库。 Can Chronicle Map可以处理我服务器的1TB数据集,还是仅限于使用32GB或更少的数据集?
答案 0 :(得分:3)
答案取决于您的操作系统。在Windows上,Chronicle Map必须适合主内存,但是在Linux和MacOSX上它并没有在主内存中修复(区别在于如何在这些操作系统上实现内存映射)注意:Linux甚至允许您映射一个区域大于您的磁盘空间(MacOSX和Windows不会)
因此,在Linux上,您可以在具有32 GB内存的计算机上映射1 TB甚至100 TB。重要的是要记住,您的访问模式和您选择的驱动器对性能至关重要。如果您通常在大多数情况下访问相同的数据并且您拥有SSD,那么它将表现良好。如果您有旋转磁盘和随机访问模式,则会受到驱动器速度的限制。
注意:我们已经测试了Chronicle Map到25亿个条目,并且它使用64位哈希键表现良好。