|
我在线上用CLUSTER。
分布式数据库肯定会有一些限制,出于性能上的考虑各点的查询结果限制肯定会有的。
我2个管理器,4个存储和SQL节点共用,其中4个节点都用作MASTER角色,下面挂了一些INNODB的从库。
从存储数据角度说,它也是最终持久化到外存的,数据是安全的,一般OLTP的数据也可以放进去,注意单行大小,CLUSTER IO开销,在设计上避免大数据集 的结果查询。尽可能多的设计单行 OR 本地化查询。
从SQL角度说,他一些未支持的常用特性,可能会不适合一些应用。
如果在多个节点命中,SQL在GROUP 之前 的数据集越少 或 越接近最终结果集 还是比较好的。 反之结果多了,网络开销 和 多次 计算使得它比单机慢很多,可能还会报错。另外搜索上目前还不支持对字符串的搜索,对数值类型的LIKE还是可以用的。 CLUSTER是个好东西,如果可以在产品设计之初开始使用,比起从异构数据库迁移,将会轻松的多。
配置上也有一些技巧,内存分配,初始化文件大小。 如果你使用DISK表,相应的要增加超时时间,要不一条你觉得正常的SQL都会报错了。 而它的操作都是放到内存里面进行的,因此SQL复杂,操作的数据太多,也是有限制的,可以根据自己的应用来配置,自己一条SQL大概允许写多少行,而这些都是硬限制。当然这些都可以通过程序优化来解决的。
CLUSTER在线运行一年多,我最大的感触不是CLUSTER查询有多好。 我越来越偏向把它当作写库,当作MASTER库来使用,做写数据的负载均衡,也方便做HA,下面可以挂SLAVE,用CLUSTER做MASTER,因为同步复制的原理,SLAVE可以切换到其他的CLUSTER节点继续复制,这样实现多节点写入,也保证MASTER的冗余。
|
|