MySQL集群和大blob

时间:2015-03-17 22:56:16

标签: mysql

我决定将MySQL Cluster用于我的更大项目。除了将文档存储在仅具有三个索引的简单表格方案中之外,还需要存储大小为1MB到50MB的信息。这些信息将是序列化的自定义表,它们是数据馈送的聚合。

如何存储这些信息以及这些信息将会有多少节点?我理解,复制因子为3,这些信息将被写入三次,我理解有协调器节点(命名不同)所以我问自己存储这些信息的影响是什么?

我是否理解,对于读取群集会将这些blob发送到三个服务器(一个请求信息,一个协调器和一个数据服务器)并且写入是5(1 + 1 + 3)?

1 个答案:

答案 0 :(得分:0)

一般来说MySQL现在只支持NoOfReplicas = 2,使用3或4通常不受支持且测试不充分,这里注意到: http://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-ndbd-definition.html#ndbparam-ndbd-noofreplicas

“最大可能值为4;目前,实际上只支持值1和2。”

如上述URL中所述,数据以与此设置相同数量的副本存储。因此,使用NoOfReplicas = 2,您将获得2份副本。它们存储在ndbd(或ndbmtd)节点上,管理节点(ndb_mgmd)充当协调器和配置源,它们不存储任何数据,也不存储mysqld节点。

如果您有4个数据节点,则可以将整个数据集拆分为一半,然后将每个数据集存储在4个数据节点中的2个数据节点上。如果您有8个数据节点,则整个数据集将分为四个部分,然后每个部分存储在8个数据节点中的2个上。

此过程有时称为“分区”。当查询运行时,数据被拆分并发送到每个分区,该分区尽可能在本地处理它(例如,通过使用索引删除不匹配的行,这称为引擎条件下推,请参阅http://dev.mysql.com/doc/refman/5.6/en/condition-pushdown-optimization.html)和然后它在mysqld中聚合进行最终处理(可能包括计算,连接,排序等)并返回给客户端。 ndb_mgmd节点不以任何方式参与实际数据处理。

默认情况下,数据由PRIMARY KEY分区,但您可以将其更改为其他列的分区。有些人使用它来确保给定查询仅在大多数时间在单个数据节点上处理,例如通过对表进行分区以确保同一客户的所有行都在单个数据节点上而不是分布在它们上。这可能会更好,或者更糟,取决于你想要做什么。

您可以在此处详细了解数据分区和复制: http://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-nodes-groups.html

请注意,MySQL Cluster实际上并不适合存储如此大的数据,无论如何,您可能需要调整一些设置并尽量保持小事务。使用BLOB有一些特定的额外限制/含义,您可以在此处讨论: http://dev.mysql.com/doc/mysql-cluster-excerpt/5.6/en/mysql-cluster-limitations-transactions.html

我会进行全面的测试,以确保它在高负荷下表现良好,如果您继续并确保您设置良好的监控并测试您的故障情况。

最后,我还强烈建议从Oracle获得售前支持和支持合同,因为MySQL Cluster是一个非常复杂的产品,需要正确配置和使用才能充分利用它。为了披露,我在Oracle支持中为Oracle工作 - 因此您可以将该建议视为有偏见或非常了解。