作者:陆豪
在对Mysql,MongoDB等数据库系统进行分析时,经常面临的一个问题是在进行分析查询时如何避免对实时业务产生影响,也就是OLAP负载和OLTP负载隔离的问题。针对这个问题,阿里云数据湖团队一直在努力优化,提供满足不同场景的解决方案。
最近,我们支持了对MongoDB和RDS只读实例的分析,做到了完全不影响源库、数据完全实时,为对负载隔离有更高要求的用户提供了更好的选择。
场景分析
OLAP负载和OLTP负载隔离的问题,常常会和数据的实时性、成本等因素做权衡,综合考虑。过去,数据湖针对不同的隔离性要求和成本,提供过一些方案:
- 针对直接查询RDS的用户,可以通过jdbc-scan-splits这个hint来调整SQL的并发度。用户可以根据业务的特点设置合理的并发度,控制OLAP查询产生的影响。jdbc-scan-splits关键字的用法参见帮助文档。
- 通过一键建仓功能在业务低峰期把数据拖到DLA,避免直接分析源库。具体介绍参见文章。
但是,仍然有一些场景是这些方案覆盖不到的,例如:
- 一键建仓目前暂时不支持MongoDB。同样,MongoDB也不能使用jdbc-scan-splits这个hint。
- 以上提到的两种方法对源库仍然会产生一定的影响,如果业务没有明显的低峰,这种影响仍然不能忽略。
- 一键建仓不能满足对数据实时进行分析的需求。
考虑到这些因素,我们针对对分析的实时性有较高要求又可以接受一定的成本的用户,通过支持分析只读实例来实现OLAP负载隔离。这样我们就比较完整的支持了大部分场景:
分析方案 | 对源库影响 | 数据实时性 | 是否支持MongoDB | 成本 |
---|---|---|---|---|
直接查询源库 | 较大 | 实时 | 支持 | 低 |
一键建仓 | 较小 | 非实时 | 不支持 | 较低 |
查询只读实例 | 几乎无影响 | 实时 | 支持 | 较高 |
以下描述使用DLA分析MongoDB和RDS只读实例的具体步骤。
使用DLA分析MongoDB只读节点
添加MongoDB只读节点
MongoDB副本集实例在创建时可以指定只读节点的个数:
如果创建时没有选择只读节点,在创建之后也可以在实例基本信息页面添加只读节点:
添加了只读节点之后,可以在页面上看到只读节点的连接地址:
关于只读节点参见MongoDB帮助文档。
创建数据库
CREATE DATABASE mongo_ro WITH DBPROPERTIES (
catalog = 'mongodb',
location = '只读节点连接地址,见上图',
database = 'mongo_test',
INSTANCE_ID = 'mongodb_instance_id',
vpc_id = 'vpc-*******'
);
只要这里的location写上MongoDB只读节点的连接地址,后续通过DLA进行的查询都只会连接MongoDB的只读节点。
使用DLA分析RDS只读实例
添加RDS只读实例
参见 RDS帮助文档,可以在实例详情页面右侧“添加只读实例”创建一个只读实例。
只读实例拥有独立的实例ID和连接地址:
创建数据库
CREATE SCHEMA hello_mysql_vpc_rds WITH DBPROPERTIES (
CATALOG = 'mysql',
LOCATION = 'jdbc:mysql://rm-******fofake.mysql.rds.aliyuncs.com:3306/rds_mysql_dbname',
USER = 'rds_mysqldb_username',
PASSWORD = 'rds_mysqldb_password',
INSTANCE_ID = '只读实例ID',
VPC_ID = 'rds_mysqldb_vpcid'
);
这样,后续通过DLA进行的查询都会落在只读实例上面,不会对源库产生任何影响。
关于我们
数据湖分析Data Lake Analytics简介
欢迎大家使用数据湖分析(DLA),DLA不仅仅便宜,且快,且方便,专为阿里云数据湖分析方案而生
- 支持自建、托管RDS、NoSQL、OSS(JSON、CSV、Parquet等格式)多种数据源分析
- 支持按量 按照扫描量 的计费方式,准入门槛0元,提供的Serverless的弹性服务为按需收费,不需要购买固定的资源,完全契合业务潮汐带来的资源波动,满足弹性的分析需求,同时极大地降低了运维成本和使用成本
- 平台底层托管大集群且自动弹性,在一定数据量情况下,分析性能比自建小集群高出400%
- 支持一键 把 MySQL、PG、SqlServer、PolarDb数据库 拖到DLA,再分析,解决原MySQL不敢分析的问题。 DLA 分析性能TPC-H 10G情况 比原MySQL 8c16g 等高出10倍,数据量越大,MySQL性能越差,在1TB数据量下,原MySQL基本跑不出来
- 产品文档:https://www.aliyun.com/product/datalakeanalytics
- 帮助文档:https://help.aliyun.com/document_detail/70378.html
- MySQL&PG&SqlServer一键同步数据到DLA:https://help.aliyun.com/document_detail/126559.html
- 新客户1元试用:https://common-buy.aliyun.com/?commodityCode=openanalytics_post