其实是测试半遂体验。

这阵子对OLAP数据库产生了兴趣,先是简单测试了ClickHouse,性能的确不错,不过它在稳定&可靠性,整体生态&周边配套方面还有待加强,我会持续保持关注。

3月27日,腾讯云推送的文章 TXSQL(TencentDB for MySQL) 8.0特性介绍 中提到即将推出 基于MySQL框架的列存引擎CSTORE,看了下架构图,和以前红极一时的 infobright 有点神似。

不过现在还没上线,还不能开始内测,只能看看了。

转过身看看阿里云,发现有 分析型数据库MySQL版(AnalyticDB,简称ADB) 以及 云数据库ClickHouse 可选。

ADB的产品介绍可以看官方文档 什么是分析型数据库MySQL版,我抓取了其中几个关键技术信息:

  • 云端PB级高并发实时数据仓库。

  • 采用关系模型的行列混存技术。

  • 自动索引,智能优化器。

  • 高度兼容MySQL和SQL 2003语法。

  • 可对RDS直接创建一个分析实例,构建ADB,并利用DTS实现数据同步。

看着很牛逼,有木有,那就测测呗。

1. 新建RDS实例和ADB实例

我选择的RDS实例对标之前用于测试ClickHouse的规则

  • 4CPU

  • 16G内存

  • 500G存储

选择ADB实例时,系统会根据RDS中的数据量,只显示符合条件的规格,我这里选择的是 3.0版本、T16型号、存储空间 600G。

2. 导入测试数据

老样子,用ClickHouse官网提到的dbgen工具生成测试数据,生成数据时选择  -s 100 参数。

然后在RDS实例中分别导入到几个测试表。

MySQL [testabc]> load data local infile '/data/ssb-dbgen/customer.tbl' into table customer fields terminated by '\t';

提醒:ClickHouse官网提供的建表DDL需要自己微调下,改成适用于MySQL的语法和数据类型。

3. 创建数据同步DTS任务

DTS的工作机制类似 pt-table-sync,需要每个表都要指定一个主键,这就让我很不开心了。

生成的测试表中, 是在其他表都导完数据后,再用 CREATE...SELECT 创建的。

几个测试表的总数据量是604,637,902(6亿),创建完DTS同步任务后,经过22.5小时候,同步的数据量约为325,174,022条,完成率53.78%,折算下来每秒约3990条记录,这个速度如果是OLTP数据库也还算可以,但放在海量数据的OLAP场景下,可就有点慢了。

对了,我选择的是 medium 规则,号称最高同步性能 5000 records/s

DTS启动、停止

同步进度

由于测试经费预算有限,我只能放弃全量数据同步,有多少算多少吧。

接下来的事情可就有点头疼了。

上面说了,lineorder_flat表是 CREATE...SELECT 创建的,而这个语法在ADB中是不支持的(产品页面上宣称全面支持MySQL语法,产品经理果然很会画大饼啊,哈哈)。

好嘛,我退而求其次,改成 在RDS中先创建一个空表,让DTS把表结构同步过去,再在ADB中用INSERT...SELECT写数据

由于lineorder_flat原表是没有主键的,我需要新建一个自增INT做主键,否则DTS配置阶段是过不去的,无论我选择分区表还是维度表,都必须指定主键列。

分区表模式下:

维度表模式下:

好了,变通之后表结构是同步过去了,可是在ADB上执行 INSERT...SELECT 时,弹出下面的错误提醒:

INSERT INTO lineorder_flat SELECT ... FROM lineorder AS l INNER JOIN customer AS c ON c.C_CUSTKEY = l.LO_CUSTKEY INNER JOIN supplier AS s ON s.S_SUPPKEY = l.LO_SUPPKEY INNER JOIN part AS p ON p.P_PARTKEY = l.LO_PARTKEY limit 1;失败原因:[40040, 2020040414153117201906308103453294111] Query execution error: : Insert query has mismatched column types. The 1 column has mismatched types. Table: bigint. Query: decimal(20,0).

而上面这条SQL,如果把所有列读取出来,再手动构造成INSERT写入,则不会报错,这就尴尬了,搞不懂具体是错在哪里。

不得已,只能回到RDS实例上,硬着头皮对其他几个表都先加上主键和必要,再生成测试数据了。

在RDS主库上往lineorder_flat表中写入1000万条数据,等到DTS同步完成后,再在ADB上跑测试SQL。

4. 执行测试SQL

下面是几个测试SQL执行耗时、返回数据,和ClickHouse运行结果的对比(提醒:CH的数据量是6亿,ADB的数据量是1000万,相差60倍)。

SQL ADB(毫秒)/返回数量 CH(秒)/返回数量 CH扫描数量(10万)
Q1.1 33/0 2.141/1 91.01
Q1.2 33/0 0.320/1 7.75
Q1.3 31/0 0.053/1 1.81
Q2.1 271/100 17.979/280 600.04
Q2.2 385/56 3.625/56 600.04
Q2.3 99/7 3.263/7 600.04
Q3.1 383/100 6.906/150 546.67
Q3.2 130/100 5.330/600 546.67
Q3.3 96/24 3.666/24 546.67
Q3.4 65/2 0.058/4 7.76
Q4.1 304/35 10.110/35 600.04
Q4.2 519/100 1.928/100 144.42
Q4.3 67/772 1.373/800 144.42

在ADB中没办法看到每次扫描了多少条数据,因此少了这项数据。

看起来性能还算可以,就是不知道如果数据量一样的话,结果又会如何。

这次的测试就先到这里吧,以后有机会再继续。

本次测试得到了DTS产品经理的帮助,感谢。

最后,说几个槽点吧。

1. DTS任务出现了重复的作业ID

按理说,这个任务ID应该是唯一的吧?

在原来的那个任务上,停止任务后,多点几次"重新配置同步",就会出现重复的ID了。

2. 无主键的表同步数据时,会自动删除重复数据

创建测试表,插入3条测试数据,其中有2条是重复的。

# 创建一个没有主键的测试表
[testabc]> CREATE TABLE t1 (id int(11) DEFAULT NULL,c1 varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;[testabc]> insert into t1 select 1,'c1';
[testabc]> insert into t1 select 2,'c2';
[testabc]> insert into t1 select 2,'c2'; -- 重复数据
[testabc]> select * from t1;
+------+------+
| id   | c1   |
+------+------+
|    1 | c1   |
|    2 | c2   |
|    2 | c2   | -- 重复数据
+------+------+

配置DTS同步任务,选择id列作为主键。

DTS任务报告共有3条数据,同步时没任何重复(冲突)的报错(提醒)。

但是在ADB库,则只能查到两条数据。

记得RDS有个特性就是可以帮客户自动隐式创建内置主键(如果用户表没显式定义主键的话),这时候就应该用于DTS呀,白瞎了这功能。

3. 删数据太慢测试删除500万数据,期间几次观测计算,每秒删除数据量约 2673 条。跑了几百秒之后,删了200万数据,忍不住了,终止删除任务。

4. 看似简单的SQL语法也不支持

有几个测试SQL中,有用到AS别名列语法,但发现并不支持,例如下面这个:

SELECTsum(LO_REVENUE),Year(LO_ORDERDATE) AS year,P_BRAND
FROM lineorder_flat
WHERE P_BRAND >= 'MFGR#2221' AND P_BRAND <= 'MFGR#2228' AND S_REGION = 'ASIA'
GROUP BYyear,P_BRAND
ORDER BYyear,P_BRAND;

运行时并不会报错,但下面这个SQL就会报错了

SELECTC_CITY,S_CITY,Year(LO_ORDERDATE) AS year,sum(LO_REVENUE) AS revenue
FROM lineorder_flat
WHERE (C_CITY = 'UNITED KI1' OR C_CITY = 'UNITED KI5') AND (S_CITY = 'UNITED KI1' OR S_CITY = 'UNITED KI5')
GROUP BYC_CITY,S_CITY,year
ORDER BYyear ASC,revenue DESC;

报错内容见下

失败原因:[20038, 2020040418065317201906308103453830416] : line 0:1: Column 'year' cannot be resolved

看起来在WHERE条件中,不能用到别名列,但在GROUP BY和ORDER BY可以,略诡异。

5. 基本功能异常

在ADB的集群信息,点"管理DTS任务"链接,新打开页面异常。

或者,在日常刷新页面时,弹出这个提醒

全文完。


由叶老师主讲的知数堂「MySQL优化课」第17期已发车,课程从第15期就升级成MySQL 8.0版本了,现在上车刚刚好,扫码开启MySQL 8.0的修行之旅吧。


另外,叶老师在腾讯课堂的短课程《MySQL性能优化》已开课,本课程讲解读几个MySQL性能优化的核心要素:合理利用索引,降低锁影响,提高事务并发度

下面是报名小程序码

晴澜茶坊

主营安溪铁观音、闽南乌龙,做人人喝得起的好茶。

点击小程序选购

满1斤送还优质羊脂玉瓷茶具+茶巾

点“在看”给我一朵小黄花

阿里云分析型数据库MySQL版(AnalyticDB)测试初体验相关推荐

  1. 悠星网络基于阿里云分析型数据库PostgreSQL版的数据实践

    悠星网络基于阿里云分析型数据库PostgreSQL版的数据实践 说到"大数据",当下这个词很火,各行各业涉及到数据的,目前都在提大数据,提数据仓库,数据挖掘或者机器学习,但同时另外 ...

  2. 阿里云分析型数据库使用教程

    产品概述 随着企业IT和互联网系统的发展,越来越多的数据被产生了.数据的量的积累带来了质的飞跃,使得数据系统从业务系统的一部分演变得愈发独立,通过对数据的分析和挖掘产生自己独特的价值. 在业务系统中, ...

  3. 阿里云分析型数据库AnalyticDB:使用Logstash插件进行高效数据写入

    前言 AnalyticDB(简称ADB,ADS,早期项目名Garuda)是阿里巴巴自主研发的海量数据实时高并发在线实时分析型数据库(Real-Time OLAP).自2012年第一次在集团发布上线以来 ...

  4. 阿里云分析性数据库的发展历史

    详细内容请点击: 阿里云分析型数据库使用教程 (分析型数据库(AnalyticDB),是阿里巴巴自主研发的海量数据实时高并发在线分析(Realtime OLAP)云计算服务,使得您可以在毫秒级针对千亿 ...

  5. 【阿里云产品评测】小鸡咕咕的初体验

    小编: 以一个新手的角度分析了云服务器 ECS.关系型数据库 RDS.开放存储服务 OSS.内容分发网络 CDN.云引擎 ACE的种种...配以大量过程截图,非常通俗易懂.最后,不禁感慨"如 ...

  6. 阿里下一代云分析型数据库AnalyticDB入选Forrester云化数仓象限

    前言 近期, 全球权威IT咨询机构Forrester发布"The Forrester Wave: CloudData Warehouse Q4 2018"研究报告,阿里巴巴分析型数 ...

  7. 阿里巴巴下一代云分析型数据库AnalyticDB入选Forrester Wave™ 云数仓评估报告 解读

    前言 近期, 全球权威IT咨询机构Forrester发布"The Forrester WaveTM: CloudData Warehouse Q4 2018"研究报告,阿里巴巴分析 ...

  8. 阿里云RDS金融数据库(三节点版) - 案例篇

    原文链接 摘要: 标签 PostgreSQL , MySQL , 三节点版 , 金融数据库 , Raft , 分布式共享存储版 背景 土豆哪里去挖? 土豆郊区去挖. 一挖一麻袋? 一挖一麻袋. 挖掘机 ...

  9. 阿里云RDS金融数据库(三节点版) - 性能篇

    标签 PostgreSQL , MySQL , 三节点版 , 金融数据库 , Raft , 分布式共享存储版 背景 终于到了性能篇,三节点同时满足了企业对数据库的可用性.可靠性的要求,那么性能如何呢? ...

最新文章

  1. python怎么导入时间-Python的import导入与时间
  2. 我的RHCA之路随想
  3. java entryset_Java HashMap entrySet()方法与示例
  4. HDU 2845 Beans
  5. python 谷歌登录_用Python登录Gmail并发送Gmail邮件的教程
  6. win7双系统,暴力删除ubuntu后出现grub rescue解决
  7. Java学习中的不解
  8. 为你解惑之WPF经典9问详解
  9. java代码如何降低重复率_JAVA 如何实现大文本去除重复行
  10. Oracle 11g的下载与安装
  11. 直播 | IJCAI 2021论文解读:生理时间序列的分类方法及其在睡眠分期的应用
  12. [项目实战篇] Emos在线办公小程序--搭建项目
  13. Drools教程 —— 安装及eclipse项目创建
  14. ADS学习记录--元器件库列表
  15. Thrift与其他传输方式的比较
  16. c# 阿拉伯数字转成中文
  17. [转]出现蓝屏代码stop ** 0x000000a5(0x00000001,0x89758d98,0x000000000,0x00000000)
  18. 自制python图片下载器
  19. 阿里M8级铁子整理出SQL手册:收获不止SQL优化,抓住SQL的本质
  20. 怎么设置圆角html5,css怎么设置圆角?

热门文章

  1. 洗地机充电底座语音芯片选型?NV040DS语音芯片
  2. DB2数据库的备份与恢复
  3. 安卓 jni 开发错误 undefined reference to __android_log_print
  4. YOLOv5 Detect 参数说明
  5. FFmpeg 预设编解码器
  6. SurfaceGo_BMR_41_1.011.2.zip恢复镜像网盘满速下载地址
  7. oracle数据库归档模式修改ARCHIVELOG
  8. 开源的RSS订阅器FreshRSS
  9. java数组排序sort原理,ZooKeeper的十二连问
  10. 在Vue中使用Echarts来实现(数据可视化)