我需要一个快速且支持多个连接的 MySQL 数据库。大多数连接仅用于读取,但少数连接用于读取/写入。所有连接都需要读取和写入至少一些数据。
我有 4 台测试服务器专门用于实验。最初我计划使用多主服务器,但后来我阅读了一些有关 MySQL Cluster 的内容。我有一些问题:
MySQL Cluster 仅有 RAM 吗? 宣传册上说支持磁盘表,但有时甚至连他们自己的文档都说不支持。我希望能够在断电时幸存下来。
与多主服务器相比,MySQL Cluster 能提供更好的可靠性吗? 我担心停电会导致我的多主设备完全不同步。能够顺利从停电或其他故障中恢复是我考虑使用多主设备以外的设备的主要原因。
有没有办法使用临时表? 我的应用程序使用了一些临时表,但我发现 MySQL Cluster 不支持它们。除了将永久表当作临时表使用外,还有其他解决方法吗?
我可以随时添加或删除数据节点吗? 没有任何服务中断?
答案1
回答您的问题(顺便说一下,手册中也回答了这些问题。)
- MySQL Cluster (ndb) 始终将所有索引保存在内存中。它的数据结构和访问模式针对这种情况进行了优化。它们也可以(可选)写入磁盘。非索引数据可以存储在磁盘上,并根据需要读取(和缓存)。通常,对于数据库来说,拥有足够的内存来将工作集保存在内存中是很好的,但集群在这方面要严格一些。
- MySQL/Oracle 宣称 MySQL Cluster 的可靠性达到 99.999%。请注意,可靠性很大程度上不在于软件,而在于环境。如果您的交换机或电源出现故障,整个集群可能会瘫痪。MySQL Cluster 有相当好的例程来保持功能和同步,即使某个节点瘫痪后又恢复正常。在 MMR 中正确执行此操作需要更多工作,但也可以做到。
- 1. MySQL Cluster 可以很好地处理 RAM 中的数据,因此您可能也可以使用 ndb 来处理这些数据。或者,根据实际数据和用例,您可能可以在不同的 MySQL 服务器上独立保存临时表。请注意,有基准测试(虽然基准测试总是撒谎)显示 ndb 比内存表更胖。
- 是的,最新版本的 MySQL 集群允许在线更改节点配置,甚至在线更改表结构。使用 MMR 后,这两项操作都更加复杂。
说了这么多关于 MySQL 集群的优点,我还是想指出一点:MySQL 集群有一些局限性,例如,在 MySQL 集群上执行 JOIN 操作目前非常慢。下一个版本将修复这个问题(寻找“下推连接”),因此在设置时应小心谨慎,并在进入集群之前进行一些测试,看看它是否符合您的需求。