代码之家  ›  专栏  ›  技术社区  ›  Poni

mysql集群问题

  •  5
  • Poni  · 技术社区  · 16 年前

    我已经阅读了很多mysql集群文档和一些教程,但仍有一些不清楚的地方,现在主要是:

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

    关于问题2,行的更新采用以下语法:

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

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

    2 回复  |  直到 14 年前
        1
  •  8
  •   Martin    16 年前

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

    mysql集群基本上是一个分布式哈希表。持有特定数据行的ndb节点由应用于主键的散列算法确定。通过添加节点来提高性能,前提是数据可以很好地跨节点传播。如果查询必须接触多个节点(即复杂的连接),性能可能会受到严重影响,但对于给定主键的特定行,检索速度会非常快。

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

        2
  •  5
  •   Andrew Morgan    15 年前

    即使mysql集群表在内存中,默认情况下任何写操作都会异步检查到磁盘(可以根据每个表来关闭)。

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

    如果一个数据节点出现故障并从其本地磁盘副本中恢复,它将通过应用对等数据节点的最新更新来赶上。

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