开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。
MYSQL 是ORACLE 后面经常被提到要替换的数据库,MYSQL 为什么要被替换,嗯这点是一言难尽,但是可以说明的是,替换MYSQL 的数据库类型还蛮多的, 今天要说明的就是POALRDB FOR MYSQL 的一个特性,列式存储。
我们都知道MYSQL即使目前的MYSQL 8.030 或更高的版本在处理OLAP 轻量级的情况下,还不是一个好的选择,对比其他的数据库POSTGRESQL 在OLAP 处理上是无法进行比较的,而MYSQL 的被替换的问题,不光是在线下,在线上也是火热一片。POLARDB 作为阿里云的当家花旦,替换MYSQL已经是云上上了阿里云的一段佳话。
从成本的角度,从使用的扩展性,以及安全性等等等等,MYSQL RDS 都是弟弟。今天要说的是POALRDB for MYSQL的另一个打击MYSQL RDS 的数据引擎,IMCI, 通过IMCI 可以将POLARDB FOR MYSQL 从OLTP 变为OLTP + OLAP 的 HTAP 系统,简言之MYSQL 最大的缺点将不在存在。
首先需要了解的,如MYSQL + CLICKHOUSE 虽然是解决线下MYSQL OLTP+OLAP的一套方案,但是缺点也是有的,如这样的方案是后备式的,不是在线式的。
因为POALRDB 本身就是新一代基于云厂商硬件基础上研制的数据库产品,他整体抛弃了MYSQL 的设计方式,举例
1 POALRDB 的优点之一就是 POALRDB 的 PROXY ,这套PROXY 可以将你的语句直接分发到 写节点,或读节点,或列式节点,根据优化器产生的语句的COST 来将你的语句一分为三。同时CBO 优化器同时面向行 列存根据COST 选择语句的具体计算对象。
2 POLARDB 的优点之二,就是 shared storage ,即使加了列式 IMCI 也是一套存储,那么一套存储的优点非常多,数据的同步过程省去了,数据的一致性更能保证,避免了 PAXOS RAFT 协议在一些 shared nothing 方面的弊病(其实就是性能问题),并且在硬件底层进行了分布式写的设计,从硬件解决了数据的安全性的问题
3 结果的汇聚,一条语句,多重处理方式,最终你却在一个位置获得数据的结果,这是POALRDB 的优点之三。
最终让你用起来和MYSQL一样一样一样的,但是那些MYSQL的问题又都消失了。(不需要SQL的重写或人工改变)
Interesting !!!!!!!
除此以外 POLARDB FOR MYSQL 的IMIC 解决方案还可以成为单独的OLAP的解决方案。通过节点与代理之间的关系的调整,IMIC 节点很容易成为一个单独面对OLAP 场景下的数据节点,可狼 可奶。
说完了好的,的说说一些限制和我们已经知道的问题。
首先说数据库智能的那帮子东西,不要轻易信他们,数据库是一个动态变化的产品,而不是和其他的非数据库部分是静态的,静态的东西好管理,动态的,有业务逻辑契合的东西是不好管理的。你设置的一些固定的东西,不知道在什么时间就被打破了,打破了,其他的好说,数据库就可能产生各种各样的问题。
列式的部分也是这样,虽然很好也有自己的问题
1 对于语句的一些问题,是无法使用列式的情况,如子查询中出现 group by , order by 的情况,是无法进行列式引擎的数据处理的。
2 CTE 通用表达式中,进行递归查询的是无法进行列式存储IMCI的查询的(这点是可以理解的)
3 子查询中出现 JOIN 的语法
4 子查询中出现LIMIT 的字句
5 子查询中出现了窗口函数
6 子查询中出现了UNION 的部分
除此以外,一些特殊的表达式等出现在语句中也是无法进行处理的
1 REGEXP 查询模式是无法进行了, like 部分也是无法进行列式查询的。
2 一些特殊的函数部分,如聚合函数 JSON 类的是无进行列式处理的
3 加密与压缩算法类的函数
当然这个解决方案目前我们预估可能存在的一些问题,也的说明一下,因为这个IMCI 是在去年上线的新功能,所以还需要一些更多的用户来进行使用并总结经验。
问题1 :用户需要更多的数据库知识,因为在列式节点加载后,是需要人工来进行表和列的确认,并自行进行索引的添加的。这点就需要更有相关业务知识和语句优化方面知识的DB 人员来进行专业的操作,而不是建立好列式就可以直接工作了,
建议需要进行压测,并将目前在系统中运行部良好的,适合列式的语句挑选出来,然后进行添加列存,在压测后查看相关的优化的结果。
问题2 :列式调优参数多,需要一定时间一定经验去调整,并且可能是反复调整。loose_imci_optimizer_switch ,loose_imci_auto_update_statistic,loose_imci_max_enum_join_pairs 。
目前我们对于列存方面还在测试阶段,还在磨合,后面有更多的关于列存在POALRDB 的使用的问题和经验会继续分享。
总结:POALRDB FOR MYSQL 给了使用MYSQL 的开发一个新的数据库模式,一个可以尝试将MYSQL 的问题尽量移除,更强大的"MYSQL"