内存数据库如何在GemfireXD中存储大于RAM内存的数据?

时间:2015-03-25 09:59:56

标签: in-memory-database hana gemfire

如果我使用的是4个节点的集群,每个节点都有4GB RAM,那么总RAM内存为16 GB。我必须在表格中存储20 GB的数据。 那么内存数据库将如何容纳这些数据?我在某处看到数据在RAM和RAM之间交换。磁盘,但不会使数据访问速度变慢。请解释

5 个答案:

答案 0 :(得分:1)

GemFire或GemFireXD evicts如果在容纳更多数据的同时感觉到内存压力,则数据到磁盘。 它可能会有一些性能影响。但是,用户可以控制驱逐的方式和时间。所有算法都使用最近最少使用的算法来驱逐数据。 此外,当一行被驱逐时,主键值保留在内存中,而其余的列数据被驱逐。这样可以更快地从磁盘中获取行。

您可以通过以下链接了解GemFireXD中的驱逐: http://gemfirexd.docs.pivotal.io/1.3.0/userguide/developers_guide/topics/cache/cache.html

答案 1 :(得分:0)

HANA提供从主内存中卸载数据的可能性。由于数据随后存储在硬盘上,因此访问此数据的查询当然会运行得更慢。如果您还没有听说过它,请查看热/暖/冷数据概念。

本文为您提供有关此主题的其他信息:http://scn.sap.com/community/bw-hana/blog/2014/02/14/sap-bw-on-hana-data-classification-hotwarmcold

答案 2 :(得分:0)

虽然这个问题仅针对SQLITE& HANA希望分享有关Oracle Database Inmemory的一些见解。它通过使用各种压缩算法实现将大表加载到内存区域。填充到IM列存储中的数据使用一组新的compression algorithms进行压缩,这不仅有助于节省空间,还可以提高查询性能。例如,当capacity high大小压缩为3GB时,表格大小为10GB。这允许将大小大于RAM的表以压缩格式存储在内存区域中。

答案 3 :(得分:0)

OP专门询问了一个集群,因此排除了SQLite(至少开箱即用)。您需要一个可以的DBMS:

  1. 将4 X 4GB的内存视为16GB的“存储”(IOW将数据分布在群集的noes上,但将其视为一个整体)
  2. 压缩数据以将20GB的原始数据压缩到可用的16GB
  3. eXtremeDB就是这样一种解决方案。 Oracle的数据库内存(使用RAC)也是如此。我确定还有其他人。

答案 4 :(得分:0)

如果你这样配置你的表,GemFireXD可以使用offheap内存来存储更大量的数据到内存中,从而推迟了将数据驱逐到磁盘上的需要(尽管读取被驱逐的数据的速度更快查找,因为查找键在内存中)

http://gemfirexd.docs.pivotal.io/1.3.1/userguide/data_management/off-heap-guidelines.html