如果我使用 4 个节点的集群,每个节点有 4GB RAM,那么总 RAM 内存为 16 GB。我必须在一个表中存储 20 GB 的数据。那么内存数据库将如何容纳这些数据呢?我在某处读到数据在 RAM 和 Disk 之间交换,但它不会使数据访问变慢。请解释
5 回答
evicts
如果在容纳更多数据时感到内存压力,GemFire 或 GemFireXD将数据存储到磁盘。它可能会对性能产生一些影响。但是,用户可以控制驱逐发生的方式和时间。所有算法都使用最近最少使用的算法来驱逐数据。此外,当一行被驱逐时,主键值保留在内存中,而剩余的列数据被驱逐。这使得从磁盘中获取行的速度更快。
您可以通过以下链接了解 GemFireXD 中的驱逐:http: //gemfirexd.docs.pivotal.io/1.3.0/userguide/developers_guide/topics/cache/cache.html
HANA 提供了从主内存中卸载数据的可能性。由于数据随后存储在硬盘上,因此访问这些数据的查询当然会运行得更慢。如果您还没有听说过,请查看热/暖/冷数据概念。
本文为您提供有关此主题的更多信息:http: //scn.sap.com/community/bw-hana/blog/2014/02/14/sap-bw-on-hana-data-classification-hotwarmcold
OP 专门询问了集群,因此排除了 SQLite(至少开箱即用)。您需要一个能够:
- 将 4 X 4GB 的内存视为 16GB 的“存储”(IOW 将数据分布在集群的各个节点上,但将其视为一个整体)
- 压缩数据以将 20GB 的原始数据压缩到可用的 16GB
eXtremeDB 就是这样一种解决方案。Oracle 的数据库内存(带有 RAC)也是如此。我确定还有其他人。
如果你这样配置你的表,GemFireXD 可以使用堆外内存来在内存中存储更多的数据,从而将数据驱逐到磁盘上的需要更远一些(尽管对驱逐数据的读取进行了优化以加快查找速度,因为查找键在内存中)
http://gemfirexd.docs.pivotal.io/1.3.1/userguide/data_management/off-heap-guidelines.html