如何开箱即用的分析你的数据库数据(JDBC索引技术预览)

数据分析的困局

我们知道Spark是可以直接对接JDBC协议的数据源的。但这个功能其实是个半吊子功能。实际用的话,速度慢不说, 不是数据库被读挂了就是Spark自己挂了。

那怎么办呢?传统办法肯定是配合大数据技术架构,粗暴点,比如用sqoop 按天同步数据库到数仓,精细点的,用canal读binlog然后 写入到Kafka,之后再用流式程序对接更新到可更新的存储里。在没有数据湖实现如delta,hudi,iceberg之类的之前,可能还要写到中间存储,比如 HBase之类的,然后再定时同步到Hive里。

当然了,还有就是类似引入TiDB这种新的分布式数据库,然后拿他做后置库(从库),利用TiDB的HTAP特性,做分析。缺点也很明显,要做分析,无论大表小表都需要一股脑儿弄到TiDB里,才能做分析。

随着微服务的崛起,用户使用的数据库实例其实是越来越多的,然而用户如果想做个跨库分析,要么必须引入整个大数据架构体系(这意味着十几人的团队,一个较长的建设周期),亦或是引入一个新的数据库技术,并且所有的数据都必须在这个新的数据库上才能做分析(TiDB使用固态硬盘)。由此可见,为了完成数据分析,成本相当高昂。

如何破局

MLSQL依赖于自己多年的积累,可以做到开箱即用,用户只要在Console添加了数据库连接信息,就可以直接对数据库做分析。除此之外,对于已经有数仓体系的公司,我们也可以利用相同的技术,加速用户对数仓数据的分析。尽管如此,我们这篇内容重点还是介绍对数据库的分析。我们可以做到:

  1. 实时 (最高到秒级数据可见性)
  2. 不依赖于数据库性能以及不会给原始数据库造成太大压力
  3. 保证分析的效率和速度,支持跨库分析以及和其他任意数据源的混算

使用示例

打开MLSQL Console, 新增MySQL数据库链接信息:

输入信息后,此时进入分析工坊就可以看到MySQL数据库相关表信息了:

用户可以依葫芦画瓢添加多个。

这个时候,这些表都是直连数据库的。如果有大表,必然出现很大的性能下降,同时给数据库带来很大压力。我们假设表access_token很大,这个时候我们可以到索引管理页面给表添加索引:

双击access_token会需要你填写一些参数(所有参数系统都会自动填充,用户可以选择更改或者直接点确定即可)

此时,我们把索引类型选择【实时】,唯一标记一条数据的组合字段,这里是id(如果需要联合组件可以按逗号分隔填写多个)最后选择索引构建引擎。

点击【应用】,如果无错误,系统会返回成功信息:

此时可以进入索引列表查看索引情况:

因为我的数据集比较小,系统很快构建完索引,并且会实时更新(系统默认是60s,可控制)。

现在重新进入分析工坊,可以看到这个表已经被标记为索引过的了:

我个人建议超过200w以上数据的表都可以建索引。

现在你就可以尽情的对你的MySQL数据库做分析了。此外,你如果使用MLSQL语言,也是可以获得加速的,比如

load jdbc.`mlsql_console.access_token` as at;

虽然你写的是jdbc,但是系统也会自动使用索引而非直连MySQL获取数据。

是不是很简单?

结束语

我们目前正在设计的索引格式有Kylin Cube, 物化视图(会整合我之前开发的sql-booster项目),帮助用户更好的对数仓数据进行索引加速。当然,对于数据可见性要求不高的数据库,也是可以用这些索引格式的。

results matching ""

    No results matching ""