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

2023-10-11 10:10

本文主要是介绍Polardb 如何替换MYSQL 之 IMCI 列式(1)建立一个列式引擎,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

7b79e700209c97372fa00c3f421332ec.png

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群。

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

1 主节点

2  行式从节点

3  列式从节点

cb75c5a787bcf738bfb650b95f1c6f4f.png

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

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

f59ac315f9e2954566772959dd16ae60.png

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是可以在产生的新表中增加列索引的。

87b54d751c1f53ecdda0c2c841411714.png

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

24d65fb8ff89b71c828edf9ca8fc032a.png

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

835ea878f1d8686ee93815203f62f3e9.png

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

66c7736501d988229c50ad882ff3c91b.png

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

423d257b26db0b0dd21cc4194c72dd41.png

1d79031373a5a67c197196e6695f30e8.png

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

7b2daf29024b93f510deb912f86a91e3.png

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

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

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

e528135ebd1f65e2ffab5e6063b6952e.png

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;表来进行相关列索引的查询。

009d2ae31f757c7c38ddee2b511e90c0.png

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

8a3db6de077283091a6b6882643f0c79.png

c1b09004f50a86c05e32129e46898e85.png

这篇关于Polardb 如何替换MYSQL 之 IMCI 列式(1)建立一个列式引擎的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/187310

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

MySQL 衍生表(Derived Tables)的使用

《MySQL衍生表(DerivedTables)的使用》本文主要介绍了MySQL衍生表(DerivedTables)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录一、衍生表简介1.1 衍生表基本用法1.2 自定义列名1.3 衍生表的局限在SQL的查询语句select

MySQL 横向衍生表(Lateral Derived Tables)的实现

《MySQL横向衍生表(LateralDerivedTables)的实现》横向衍生表适用于在需要通过子查询获取中间结果集的场景,相对于普通衍生表,横向衍生表可以引用在其之前出现过的表名,本文就来... 目录一、横向衍生表用法示例1.1 用法示例1.2 使用建议前面我们介绍过mysql中的衍生表(From子句

六个案例搞懂mysql间隙锁

《六个案例搞懂mysql间隙锁》MySQL中的间隙是指索引中两个索引键之间的空间,间隙锁用于防止范围查询期间的幻读,本文主要介绍了六个案例搞懂mysql间隙锁,具有一定的参考价值,感兴趣的可以了解一下... 目录概念解释间隙锁详解间隙锁触发条件间隙锁加锁规则案例演示案例一:唯一索引等值锁定存在的数据案例二: