阿里云分析型数据库MySQL版(AnalyticDB)测试初体验(1)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 阿里云分析型数据库MySQL版(AnalyticDB)测试初体验

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

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

image.png


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

转过身看看阿里云,发现有 分析型数据库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启动、停止

image.png

同步进度

image.png


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

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

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

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

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

分区表模式下:

image.png


维度表模式下:

image.png


好了,变通之后表结构是同步过去了,可是在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产品经理的帮助,感谢。



            </div>
相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
9天前
|
数据采集 自然语言处理 数据库
深入体验阿里云通义灵码:测试与实例展示
阿里云通义灵码是一款强大的代码生成工具,支持自然语言描述需求,快速生成高质量代码。它在测试、代码质量和用户体验方面表现出色,能够高效地生成 Python 和 Java 等语言的代码,助力开发者提升开发效率和代码质量。无论是新手还是资深开发者,都能从中受益匪浅。
深入体验阿里云通义灵码:测试与实例展示
|
8天前
|
关系型数据库 MySQL 测试技术
【赵渝强老师】MySQL的基准测试与sysbench
本文介绍了MySQL数据库的基准测试及其重要性,并详细讲解了如何使用sysbench工具进行测试。内容涵盖sysbench的安装、基本使用方法,以及具体测试MySQL数据库的步骤,包括创建测试数据库、准备测试数据、执行测试和清理测试数据。通过这些步骤,可以帮助读者掌握如何有效地评估MySQL数据库的性能。
|
8天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
23 1
|
10天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
25 4
|
17天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
84 1
|
4天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
38 0
|
8天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
37 3
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
59 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
239 7
Jmeter实现WebSocket协议的接口测试方法
|
2月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
248 3
快速上手|HTTP 接口功能自动化测试