1

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

4

5 回答 5

1

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

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

于 2015-03-26T12:32:23.520 回答
0

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

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

于 2015-03-25T12:51:16.277 回答
0

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

于 2015-03-25T15:28:07.367 回答
0

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

  1. 将 4 X 4GB 的内存视为 16GB 的“存储”(IOW 将数据分布在集群的各个节点上,但将其视为一个整体)
  2. 压缩数据以将 20GB 的原始数据压缩到可用的 16GB

eXtremeDB 就是这样一种解决方案。Oracle 的数据库内存(带有 RAC)也是如此。我确定还有其他人。

于 2015-03-26T00:31:59.420 回答
0

如果你这样配置你的表,GemFireXD 可以使用堆外内存来在内存中存储更多的数据,从而将数据驱逐到磁盘上的需要更远一些(尽管对驱逐数据的读取进行了优化以加快查找速度,因为查找键在内存中)

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

于 2015-04-10T05:16:56.803 回答