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

Does MySQL clusters support coordinator node?

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

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

此功能称为协调器节点,它在 cassandra 中,但我在 MySQL

上找不到任何内容

请注意,MySQL 无法从多个节点明确请求一条记录,如所讨论的:

mysql is told to get a record off of multiple nodes

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

简答:

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

不会出现从多个数据节点请求相同数据的情况。

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

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

更多详细信息:

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

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

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

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

如果您通过其他条件请求记录,将发出对 tables 分区的多次扫描,但每个分区只会扫描 一个 数据节点.

更多细节:

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

相反,它连接到数据节点以充当事务协调器 TC。

TC 数据节点依次从 su​​itable 数据节点请求实际记录,后者将不通过 TC 直接将记录发送回请求的 mysqld。

在 mysqld 事务以键查找开始的情况下,该信息用于 select 数据节点上的事务协调器,那里的记录是为了避免额外的网络跃点。

注:

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