【发布时间】:2010-12-31 03:07:56
【问题描述】:
我想为 MySQL Cluster 6 实现 NDB Cluster。我想为具有至少 200 万条记录的非常庞大的数据结构执行此操作。
我想知道实现 NDB 集群是否有任何限制。例如,NDB 集群的 RAM 大小、数据库数量或数据库大小。
【问题讨论】:
标签: mysql cluster-computing bigdata mysql6
我想为 MySQL Cluster 6 实现 NDB Cluster。我想为具有至少 200 万条记录的非常庞大的数据结构执行此操作。
我想知道实现 NDB 集群是否有任何限制。例如,NDB 集群的 RAM 大小、数据库数量或数据库大小。
【问题讨论】:
标签: mysql cluster-computing bigdata mysql6
200 万个数据库?我假设您的意思是“行”。
无论如何,关于限制:要记住的最重要的事情之一是 NDB/MySQL Cluster 不是通用数据库。最值得注意的是,连接操作,还有子查询和范围操作(查询,例如:从现在到一周前创建的订单)可能比您预期的要慢得多。这部分是由于数据分布在多个节点上的事实。尽管已经进行了一些改进,但加入性能仍然可能非常令人失望。
另一方面,如果您需要处理许多(最好是较小的)并发事务(通常是按主键进行单行更新/插入/删除查找)并且您设法将所有数据保存在内存中,那么它可以是一个非常可扩展和高性能的解决方案。
您应该问自己为什么需要集群。如果您只是想要您现在拥有的普通数据库,除了增加了 99,999% 的可用性,那么您可能会感到失望。当然 MySQL 集群可以为您提供很好的可用性和正常运行时间,但您的应用程序的工作负载可能不太适合集群所擅长的事情。此外,您还可以使用其他高可用性解决方案来增加传统数据库的正常运行时间。
顺便说一句 - 以下是文档中的限制列表:http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-limitations.html
但是不管你做什么,试试集群,看看它是否对你有好处。 MySQL 集群不是“MySQL + 5 个九”。你试试就知道了。
【讨论】:
NDB 集群带有两种类型的存储选项。
1.在内存存储中。 2.磁盘存储。
NDB 在内存数据存储中引入,在 7.4 (MYSQL 5.6) 版本开始支持磁盘存储。
当前版本 7.5(MySQL 5.7) 支持磁盘存储,在这种情况下将没有大小限制,因为数据将驻留在磁盘中,并且限制取决于您可用的磁盘存储空间。
磁盘存储配置 - https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-disk-data-symlinks.html
在 NDB 集群中的内存存储也相当成熟,可以在管理节点 config.ini 文件中定义内存使用情况。 例子 - 数据内存=3072M 索引内存=384M
在平均表中(取决于存储在列中的数据)总 db 大小应小于 1GB,可以轻松配置。
注意 - 在我自己的实现中,我面临一个性能挑战,因为 NDB 的性能随着表中行数的增加而下降。 在高负载下,并发读取会随着行数的增加而下降。 确保您不进行全表扫描并提供足够的 where 子句谓词。 为了获得适当的性能,请根据您的查询模式正确定义二级索引。 定义二级索引会再次增加内存消耗,因此请相应地规划您的查询模式和内存资源。
【讨论】: