【问题标题】:MySQL cluster questionsMySQL 集群问题
【发布时间】:2010-03-08 13:08:11
【问题描述】:

我已经阅读了很多 MySQL Cluster 文档和一些教程,但仍有一些不清楚的地方,目前主要是:

  1. 当数据节点重新启动(崩溃并再次启动)时,它的数据是否仍然可用?更新/添加会照常工作吗?它会“同步”吗?
  2. 集群运行速度是否比独立运行快?特别是,我多次更新行,但一次更新一个,这意味着网络延迟可能会影响性能。有没有我可以遵循的模式来加快速度,例如添加更多 SQL 节点或添加模式数据节点?

关于问题#2,更新一行的语法如下:

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

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

【问题讨论】:

    标签: mysql cluster-computing


    【解决方案1】:

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

    MySQL Cluster 基本上是一个分布式哈希表。保存特定数据行的 NDB 节点由应用于主键的哈希算法确定。假设您的数据在节点之间很好地传播,则通过添加节点来提高性能。如果查询必须触及多个节点,性能可能会受到严重影响 - 即。复杂的连接 - 但在给定主键的情况下检索特定行的速度非常快。

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

    【讨论】:

    • 非常感谢,我想就可以了!
    • “保存特定数据行的 NDB 节点由应用于主键的哈希算法确定。”行不是在其他 NDB 节点中复制吗?
    【解决方案2】:

    即使您的 MySQL 集群表在内存中,默认情况下,任何写入都会异步检查点到磁盘(可以在每个表的基础上关闭此功能)。

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多