我对 MySQL Cluster 有疑问:
数据库是否可以大于 RAM 的数量?(不是所有的集群数据都在内存中,但一些数据将驻留在集群节点的硬盘上)
特别是,是否可以指向 MySQL 集群,哪些分区不必在内存中并且可以存储在磁盘上。(在内存不足的情况下)。
我只是问,如果这样的解决方案可以用 MySQL Cluster 实现。
我对 MySQL Cluster 有疑问:
数据库是否可以大于 RAM 的数量?(不是所有的集群数据都在内存中,但一些数据将驻留在集群节点的硬盘上)
特别是,是否可以指向 MySQL 集群,哪些分区不必在内存中并且可以存储在磁盘上。(在内存不足的情况下)。
我只是问,如果这样的解决方案可以用 MySQL Cluster 实现。
MySQL Cluster FAQ指出数据库可能大于可用内存,但 FAQ 条目中引用的文档指出只有 NDB 表的非索引列可以存储在磁盘上。
通过识别要存储在磁盘上的表数据,您可以拥有比物理 RAM 更大的数据集。
可以有选择地使非索引属性驻留在磁盘上,但索引属性始终在内存中。数据库越大,表上的索引越多,您就越有可能需要更多的内存或主机。
与大多数基于磁盘的 DBMS 类似,有一个 LRU(最近最少使用)缓冲区缓存来缓存热页。当读取包含基于磁盘的数据的记录时,会在缓冲区高速缓存中进行查找以查看页面是否存在。如果不是,则必须从磁盘读取记录数据。
在某个阶段,缓冲区缓存被检查指向并且缓冲区缓存中的所有脏页都被写回表空间。表空间与索引属性的可用 RAM 一起定义了您可以在磁盘数据表中存储多少数据。
这意味着 MySQL Cluster 中的磁盘数据表与传统的基于磁盘的 DBMS 存在相同的性能限制。缓冲区缓存越大越好,因为存在成为磁盘 I/O 限制的风险。随机访问多、对性能和响应时间要求高的表最好设计为内存表,以避免受磁盘 I/O 限制。
ndbinfo.diskpagebuffer 表提供有关此缓存有效性的信息;MySQL Cluster CGE 的用户还可以通过 MySQL Enterprise Monitor 图表查看随时间呈现的此信息,如http://www.clusterdb.com/mem+/中所述