MySQL 集群是否支持协调器节点?

问题描述

我正在创建一个新应用程序,这次使用 MysqL 而不是 cassandra,因为它更难学习和设置。了解MysqL集群,选择使用这个数据库是因为我所有的开发人员都非常熟悉mySQL查询语法和数据库结构。

但是当 MysqL 被告知从多个节点获取记录时,它是告诉所有节点搜索记录还是有某种方式它必须知道数据存储在哪些节点上?

功能称为协调器节点,它在 cassandra 中,但我找不到任何用于 MysqL内容

解决方法

请注意,MySQL 无法像所讨论的那样从多个节点显式请求记录:

mysql 被告知从多个节点获取记录

当然一个 Ndb 集群通常由多个数据节点组成,这些数据节点具有相同的数据,但是一个 MySQL 查询请求记录中不能有来自显式数据节点的记录。

简答:

一条记录只从一个数据节点获取。

不会从发生的多个数据节点请求相同的数据。

表的数据分布细节是Ndb内部表定义的一部分。

在 MySQL Cluster 中,行数据检索或修改不需要特殊的协调器节点。

更多细节:

所有数据节点以及所有 NdbAPI 节点,例如 MySQL 服务器 (mysld),都知道哪些数据如何分布在哪些数据节点上。

分布单位是一个表分区,每个分区在一个节点组内的每个数据节点上都会有一个副本(copy)。 (也有完全复制的表,每个分区在所有数据节点上都有一个副本。)

如果您通过主键请求记录,将从一个数据节点获取记录。

如果您使用二级索引通过唯一键请求记录,则将首先使用二级索引从一个数据节点获取主键,然后在内部使用该主键通过数据节点从一个数据节点(可能是同一个数据节点)获取记录。

如果您通过某些其他条件请求记录,则会对表分区进行多次扫描,但每个分区只会被一个数据节点扫描。

更多细节:

mysqld 或任何其他 NdbAPI 节点实际上并不直接从拥有它的数据节点请求记录。

而是连接到数据节点以充当事务协调器 TC。

TC 数据节点依次从合适的数据节点请求实际记录,该数据节点会将记录直接发送回请求的 mysqld,而不通过 TC。

如果 mysqld 事务以键查找开始,则该信息用于选择数据节点上的事务协调器,该记录是为了避免额外的网络跃点。

注意:

还有一个节点邻近度的概念,Ndb 可以使用它来优化其对 TC 数据节点的选择。就像 mysqld 与数据节点位于同一主机上,或者配置为与某些数据节点位于同一位置域中一样。