基于开源应用快速构建HTAP系统(2)-阿里云开发者社区
上述规则的意思是,当SELECT语句中包含 "+CLICKHOUSE" 关键字时,就会自动转发到 ClickHouse 后端去处理,其余的都发送到MySQL后端处理。例如下面这两条SQL就会分别转发到MySQL和ClickHouse后端:
#SQL #1 [root@yejr.run]> SELECT * FROM sbtest1 WHERE id=1; #SQL #2 [root@yejr.run]> SELECT /*+CLICKHOUSE*/ * FROM sbtest1 WHERE id=1;
第二条SQL利用MySQL的注释语法巧妙地实现规则HINT。
查询 stats_mysql_query_digest 表的结果予以确认:
roxysql> select hostgroup, schemaname, username, digest, digest_text from stats_mysql_query_digest;
+-----------+------------+----------+--------------------+----------------------------------+
| hostgroup | schemaname | username | digest | digest_text |
+-----------+------------+----------+--------------------+----------------------------------+
| 0 | sbtest | app_user | 0x5662D7CF0442E794 | select * from sbtest1 where id=? |
| 1 | sbtest | app_user | 0x5662D7CF0442E794 | select * from sbtest1 where id=? |
+-----------+------------+----------+--------------------+----------------------------------+
可以看到,两条SQL看起来一样,但分别转发到不同的hostgroup了。
最后配置ProxySQL的监控服务(可选,非必须):
proxysql> set mysql-monitor_enabled="true"; proxysql> set mysql-monitor_username="monitor"; proxysql> set mysql-monitor_password="monitor"; proxysql> save mysql variables to disk; load mysql variables to runtime;
至此,一个全部基于开源应用的简易HTAP系统就构建好了。
4. 性能对比
在这里,我选用ClickHouse官方提供的benchmark方案:Star Schema Benchmark。
编译完成后先是利用ssb-dbgen生成测试数据(指定参数 -s 50):
./dbgen -s 50 -T c & ./dbgen -s 50 -T l & ./dbgen -s 50 -T p & ./dbgen -s 50 -T s & ./dbgen -s 50 -T d &
再创建几个测试库表,自行修改建表的DDL以适应MySQL语法。而后导入测试数据,最后根据文档并生成 lineorder_flat 表。
[root@yejr.run]> show table status; +----------------+--------+---------+------------+-----------+----------------+--------------+ | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | +----------------+--------+---------+------------+-----------+----------------+--------------+ | customer | InnoDB | 10 | Dynamic | 1378209 | 120 | 166363136 | | lineorder | InnoDB | 10 | Dynamic | 297927870 | 100 | 29871833088 | | lineorder_flat | InnoDB | 10 | Dynamic | 292584926 | 430 | 125952851968 | | part | InnoDB | 10 | Dynamic | 1192880 | 111 | 132792320 | | supplier | InnoDB | 10 | Dynamic | 99730 | 110 | 11026432 | +----------------+--------+---------+------------+-----------+----------------+--------------+
数据全部加载完毕后,再在ClickHouse中创建MaterializeMySQL复制通道:
clickhouse :) CREATE DATABASE ssb ENGINE = MaterializeMySQL('172.24.10.10:3380', 'ssb', 'repl', 'repl');
数据量比较大,耐心静待它复制完成即可。
然后连接 ProxySQL,先简单执行大表count(),观察耗时的不同:
#直接执行count(),会转发到后端 MySQL 实例 [root@yejr.run]> select count(*) from lineorder_flat; +-----------+ | count(*) | +-----------+ | 300005811 | +-----------+ 1 row in set (3 min 2.14 sec) #加上HINT规则,会转发到后端 ClickHouse 实例 [root@yejr.run]> select /+CLICKHOUSE/ count(*) from lineorder_flat; +-----------+ | count(*) | +-----------+ | 300005811 | +-----------+ 1 row in set (5.67 sec)
光是 count(*) 就差了好多倍。
再选取其中前4个SQL测试,记录的耗时如下:
Query | MySQL | ClickHouse(从库) | ClickHouse(原生) |
Q1.1 | 308.388684 | 0.149 | 0.107 |
Q1.2 | 320.373203 | 0.280 | 0.027 |
Q1.3 | 279.673361 | 0.346 | 0.030 |
Q2.1 | 286.451062 | 1.246 | 0.489 |
很明显,直接在MySQL上查询的效率实在太低了,而作为从库的MaterializeMySQL和ClickHouse原生的MergeTree表虽然也有一定差距,但相差也没那么大了,还算是很快的。
4. 其他说明
- ClickHouse的MaterializeMySQL中不支持 create like 语法。例如执行 create table db2.a like db1.a,其中db1是要复制到ClickHouse的,而db2是留在MySQL端,即便这样也会导致ClickHouse端复制报错,需要重启才行。
- ClickHouse的MaterializeMySQL中也不支持函数索引。
- 偶尔发现ProxySQL的监控模块连接到ClickHouse后,会发送 SET wait_timeout=N 命令,会导致ClickHouse报错,但不影响正常使用。重启ProxySQL,或者重启监控开关都可以解决。
Enjoy it :)
</div>
基于开源应用快速构建HTAP系统(2)-阿里云开发者社区相关推荐
- mysql htap 开源_基于开源应用快速构建HTAP系统
原标题:基于开源应用快速构建HTAP系统 利用ProxySQL.MySQL.ClickHouse快速构建HTAP系统1. 关于ClickHouse 企业里随着数据量的增加,以及日趋复杂的分析性业务需求 ...
- 基于八叉树的空间划分及搜索操作-阿里云开发者社区
原理 建立空间索引在点云数据处理中有着广泛的应用,常见的空间索引一般 是自顶而下逐级划分空间的各种空间索引结构. 比较有代表性的包括 BSP树 KD树 KDB树 R树 四叉树 八叉树 这些结构中,KD ...
- mysql异地多活方案_基于MGR高可用异地多活方案-阿里云开发者社区
一.概述 主要目的实现MySQL高可用解决方案,实现异地多活. 二.实现构思 基于MGR实现高可用异地多活 首先要基于位置信息进行分片,例如华北 华中,华南,程序层要进行ip过滤和判断, 针对不同的i ...
- mysql 轨迹数据存储_基于Tablestore实现海量运动轨迹数据存储-阿里云开发者社区...
前言 现在越来越多的人都开始关心自己的运动数据,比如每日的计步.跑步里程.骑行里程等.运动APP与运动类的穿戴设备借助传感器.地图.GPS定位等技术,收集好运动数据以后,通过与互联网社交功能结合,产生 ...
- abaqus实例手册_《ABAQUS 6.14超级学习手册》——1.6 实例快速入门-阿里云开发者社区...
本节书摘来自异步社区<ABAQUS 6.14超级学习手册>一书中的第1章,第1.6节,作者: 齐威 更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.6 实例快 ...
- ubuntu下amd超频工具_Ubuntu 16.04 LTS 推荐开源 AMDGPU 和 Radeon 驱动程序-阿里云开发者社区...
Ubuntu 16.04 LTS 将不支持 AMD 催化剂驱动作为 AMD GPU(图形处理单元)的驱动程序,相反 Canonical 建议用户采用开源的 Radeon 和 AMDGPU 作为替代. ...
- boot spring 解析csv_文件系统(02):基于SpringBoot框架,管理Xml和CSV文件类型-阿里云开发者社区...
一.文档类型简介 1.XML文档 XML是可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言.标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如数据结构,格 ...
- python可视化库matplotlib_环境搭建 | Python 数据可视化库 Matplotlib 快速入门之一-阿里云开发者社区...
数据挖掘基础环境安装与使用 [学习目标] 完成数据挖掘基础阶段的所有环境安装 应用jupyter notebook完成代码编写运行 库的安装 学习目标 目标 搭建好数据挖掘基础阶段的环境 应用 无 整 ...
- 阿里云 mysql 100_MySQL服务进程占用系统CPU达100%-阿里云开发者社区
故障现象:ping云主机严重丢包,丢包率达99%,仅有一两个包可到达:更无法远程: 排查:云主机 CentOS6.4 后台查看CPU占用高达99% 还好能登入系统,操作也并不卡顿: top查看 mys ...
最新文章
- 阿里巴巴宣布成立人工智能治理与可持续发展实验室
- WP老杨解迷:开发生态两极化和榜单乱象
- word2vec模型评估_特征工程(下)—特征评估
- 【机器视觉】 dev_set_line_width算子
- HttpResponse对象
- 【英语学习】【Level 08】U03 My Choice L5 The star that shines the brightest
- 华为路由器防火墙配置命令总结(上)
- python 百度搜索结果_Python洗涤百度搜索结果
- 模拟登录,发送amf类型数据
- oracle clob 导出csv,在Apex把csv导入数据库Clob字段再导入到各自对应列的解决方法...
- c语言题库及答案(选择题,C语言题库及答案(选择题).doc
- 【Paddle 入门打卡】用Paddle做MINIST手写数据集识别
- 带下拉菜单截图 巧用PrtSc截图键
- 8.使用xshell上传文件
- Spring Cloud Netflix之Euraka Server注册中心
- 开源帮助:什么是退出代码 137,你能修复它吗?
- 法国 计算机金融 大学,法国金融硕士专业大学排名(2020年QS)_快飞留学
- Android手机无法识别SD卡的处理方法
- 阿拉伯文变形规范,阿拉伯语变形规则,阿拉伯文组合规则
- Power BI 案例篇之大屏展示
热门文章
- 数据拯救单身狗!助攻两性相处的6个小数据
- VMware虚拟机黑屏不显示画面
- css a标签去除下划线
- Pandas中to_excel实现数据追加或者覆盖到Excel工作表
- matplotlib 文档:Pyplot tutorial
- 学习人工智能可以从事哪些职业,有哪些就业前景和薪资待遇?
- Open3D Mesh 网格
- 如何在编译时判断是否支持SSE/SSE2/AVX/AVX2/AVX-512
- 基于概率论的分类方法:朴素贝叶斯及CSDN_RSS源分析
- 堆(heap):先进先出,栈(stack)先进后出