2010-03-08 70 views
5

我读过许多MySQL集群文档和一些教程,但我仍然有一些事情不清楚,他们的主要现在是:的MySQL集群问题

  1. 当一个数据节点重新启动(崩溃并再次上升)它的数据仍然可用?更新/添加将像往常一样工作?它会“同步”吗?
  2. 集群的运行速度是否快于独立运行?特别是,我多次更新行,但每次更新一行,这意味着网络延迟可能会影响性能。有什么模式可以让事情变得更快,比如添加更多的SQL节点或添加模式数据节点?

关于问题#2中,行的更新是在以下语法:

UPDATE db_accounts.tbl_items SET items=items+%lld WHERE id_account=%u 

“id_account” 是一个索引(唯一的)。

回答

8

MySQL Cluster是一个内存数据库(尽管某些列可以存储在磁盘上,索引列不能)。如果插头被拔出,您的数据就会消失。节点重新加入集群的恢复过程是,它从正常存活的节点中提取丢失的数据(要求节点间有良好的快速链接),然后仔细应用复制事件,直到它赶上并可以主动参与。如果最近的备份可用,则可以从其中重建该备份而不是另一个节点,但原理相同:节点必须从头开始重新填充数据。

MySQL簇基本上是一个分布式散列表。保存特定行数据的NDB节点由应用于主键的散列算法确定。假设您的数据在整个节点上传播良好,性能会因增加节点而增加。如果查询必须触及多个节点,性能可能受到严重影响 - 即。复杂的连接 - 但闪回很快,用于检索指定主键的特定行。

显然,考虑到节点是分布式的,缓慢或拥塞的网络会严重影响性能。

+0

非常感谢,我认为会的! – Poni 2010-03-09 14:33:22

+0

“保存特定行数据的NDB节点由应用于主键的散列算法确定。”不在其他NDB节点中复制行吗? – metdos 2011-12-12 08:01:19

5

即使您的MySQL簇表在内存中,默认情况下,任何写操作都是异步检查点到磁盘(可以基于每个表将其关闭)。

如果整个群集失败(数据中心断电),那么当您恢复数据时,将从这些磁盘检查点检索数据。缺点是,由于它们是异步创建的,因此您可能会错过一些更新。

如果单个数据节点出现故障,并且从本地磁盘备份中恢复,它将通过应用来自其对等数据节点的最新更新而迎头赶上。

要进一步提高数据的可用性,您可以使用MySQL异步复制到第二个站点(如果需要,可以在世界的另一侧)。