0
点赞
收藏
分享

微信扫一扫

Polardb 如何替换MYSQL 之 IMCI 列式(1)建立一个列式引擎


Polardb   如何替换MYSQL 之 IMCI 列式(1)建立一个列式引擎_数据库

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。

讲了那么多期,都是在力量上进行论述,本期开始进入到正式的POALRDB 的内部操作中,POLARDB 与MYSQL 在登录中最大的不同是,你可以通过代理来连接到数据库中,这里的一个重点是,POLARDB 是支持多节点的,通过代理来控制多个节点,这里分为三种节点,最大POLARDB 支持 7 个总节点

1 主节点

2  行式从节点

3  列式从节点

Polardb   如何替换MYSQL 之 IMCI 列式(1)建立一个列式引擎_数据库_02

而这样的方式在进行底层的操作出现了一些问题,因为我们无法直接连接到读节点中的确认的某个节点的直连,所以每次登录需要制定你操作的语句的定位的位置,举例如你想登录到列节点,则在登录到 POLARDB FOR MYSQL的时候,需要加入 -c 的,在我们mysql 根本不适用的登录参数,登录POALRDB 则需要挂载 -c

在挂载后,才能使用POALRDB 的HINT 节点的模式,否则敲入的命令是对全部的节点生效的。下面的force 命令才能生效,进入的才是POLARDB 的列存节点。

Polardb   如何替换MYSQL 之 IMCI 列式(1)建立一个列式引擎_字段_03

create table imic_test (id int primary key,name varchar(200)) engine innodb comment 'columnar=1';

在建立一个支持列存的表,是需要特殊的命令来支持的,这里POLARDB 采用了在 comment 后面添加 'columnar=1' 的方式来进行,凡是在表最后的comment 中添加了 columnar =1 则说明这个表在POLARDB 中会增加类存,也就是在列存节点中是存在这张表的,否则列存是不会包含这个表的。

另外在操作一些MYSQL的语句,诸如 create table like 是可以在POALRDB 多节点运行的,因为机制和MYSQL不一样,所以单机可以运行的命令在POALRDB for MySQL 都是可以使用的,并且 create table like是可以在产生的新表中增加列索引的。

Polardb   如何替换MYSQL 之 IMCI 列式(1)建立一个列式引擎_字段_04

这里还发现阿里云的文档的BUG 里面提及可以使用create  table select 语句,实际上是不可以的。(希望更新文档)

Polardb   如何替换MYSQL 之 IMCI 列式(1)建立一个列式引擎_数据库_05

同时可以通过 show create table tablename  full 的方式来查看表中是否具有列式的索引,显然这个表是具有这个索引的。

Polardb   如何替换MYSQL 之 IMCI 列式(1)建立一个列式引擎_mysql_06

下面我们建立一个测试表,百万数据的量,并且将所有的列都加入到列存中。

Polardb   如何替换MYSQL 之 IMCI 列式(1)建立一个列式引擎_数据库_07

下面的这个例子很说明问题,在使用了列存的百万表上进行 distinct 没有任何行索引的情况下,查询速度之快。

Polardb   如何替换MYSQL 之 IMCI 列式(1)建立一个列式引擎_字段_08

Polardb   如何替换MYSQL 之 IMCI 列式(1)建立一个列式引擎_数据库_09

我们将列存撤出后,可以看到虽然我们用了索引的情况下,查询的速度还是列存无法进行比较。

Polardb   如何替换MYSQL 之 IMCI 列式(1)建立一个列式引擎_数据库_10

同时在操作中给我最大的冲击就是快,在一个100多万的表上加所有的列到列存,基本上没有延迟,直接就生效,查询的方式马上变为列的方式进行查询并开始动用更多的CPU 来进行处理。

给我的感觉用几个字可以形容,添加快,生效快,无延迟。以上是简单查询如count , distinct ,group by ,order by 等 我将一切在MYSQL 中都属于蹂躏数据库的查询,在POLARDB for mysql 加列的服务中,挨个试了一遍,完美,完美,完美。 

添加索引的状态也有展示。

Polardb   如何替换MYSQL 之 IMCI 列式(1)建立一个列式引擎_字段_11

MYSQL you are dead on cloud .

当然任何解决方案都有自己的问题,我们也在找这个方案中的问题

1  不同的版本对于字段的支持类型有变化,基于POLARDB的版本,建议在8.01 的POALRDB 的小版本要到 8.0.1.1.30 支持了 blod text  ,分区表索引等。所以版本是你能用什么字段来进行列处理的关键。

2  DDL 操作中如果你是添加字段,那么和行存不一样的是,整体的列存会删除,重建。

3  列存的数据是逐步同步的,同步是异步的方式可以通过

select * from information_schema.imci_async_ddl_stats;表来进行相关列索引的查询。

Polardb   如何替换MYSQL 之 IMCI 列式(1)建立一个列式引擎_数据库_12

但是该吐槽的吐槽,目前的列式引擎在更新数据库版本的过程中,我们遇到了更新后,列的索引重建的问题,按照我们的理解,变动较大。但是这是测试是可以,但如果是生产的情况下,我们该如何办理呢。这也是POALRDB 在升级中一直忽略的一些问题,因为使用POALRDB 的客户,以后一部分,或者相当一部分是希望 POALRDB 将 MYSQL RDS 升级时的长时间不能在线工作的问题,解决,而如果列式的升级涉及了长时间的索引重建,业务无法进行正常工作,这个感受可不怎么美好。

Polardb   如何替换MYSQL 之 IMCI 列式(1)建立一个列式引擎_数据库_13

Polardb   如何替换MYSQL 之 IMCI 列式(1)建立一个列式引擎_数据库_14

举报

相关推荐

0 条评论