前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >云开发自动化索引的设计与实现

云开发自动化索引的设计与实现

作者头像
腾讯云开发TCB
发布2020-07-15 18:46:58
6660
发布2020-07-15 18:46:58
举报
文章被收录于专栏:云开发云开发

导语

很多开发者都遇到类似这样的经历:一个产品功能开发测试都正常,发布上线后也正常,但是过一段后,如果有个活动或流量一大程序就突然卡了,也有可能流量正常也没搞活动,但是过一段时间后程序响应越来越慢,这个时候一般都要花很大精力去排查原因,最后发现是数据库查询没有索引导致的。流量大或数据量增加后会导致请求变慢,加上索引就正常了。

在小程序云开发的数据库场景下,我们会思考为什么会出现这样的问题?为什么用户总是会忘记加索引?能不能让用户无需关心这个问题,让数据库自动加上索引?

业界方案及其问题

针对这个问题,业界一般采用的是全量索引的方案:通过给所有的字段加单字段索引,引导用户主动添加多字段索引,从而实现保证所有的查询都有索引。但这样代价是会有大量的冗余索引,占用了大量的磁盘空间,而且,一些多字段的场景下,依然需要用户参与。这样的方案不能满足云开发 Cloudbase 的需求。

云开发数据库自动化索引

于是,在我们对业务进行分析后,提出了自己的解决方案 —— 分析数据并自动建立索引。我们针对系统中查询较慢的用户请求,自动分析出最佳建立索引的方式,并基于此建立索引,从而覆盖了单字段索引和多字段索引的情况。

想要理解自动建立索引,就要了解如何手动建立索引:对于单字段索引,建立起来比较简单,无论升序还是降序都是一样的。但对于多字段组合索引时,会有各种方式来建立索引,比如,三个字段的索引,就会受限制于索引是否覆盖了三个不同的字段、字段相应的升降序是否匹配,如果不匹配,可能索引就没有效果。

正因为加好索引并不简单,也证明自动加索引势在必行。在实际实现自动添加索引的需求中,我们通过筛选出耗时超过一定阈值的查询语句,从而获得需要进行优化的数据库查询,并依据数据库索引的前缀匹配规则,按照最少创建索引数量的原则,增加相应的索引,尽量让索引覆盖到所有的查询语句。

为了避免添加索引导致的锁表影响用户的数据查询,我们在具体添加索引的时候,采用了异步添加索引的方式,不仅如此,我们还通过限制单个数据库增加索引的频率和数量来规避未知风险。最后,我们会定期筛选那些长时间没有被查询命中的索引,对其进行删除,确保系统不会存在太多的冗余索引影响性能。

上述自动索引的整个过程对于用户来说,都是不可见且无感知的。不过,在实际的上线过程中,大盘的数据查询整体耗时减少了 50%,用户侧的体验也发现程序速度突然变快了。

结语

自动索引的方案帮助云开发 Cloudbase 解决了绝大多数的数据库查询较慢的问题,但程序总有覆盖不到的部分,对于这一部分,云开发后续会在开发阶段提示增加相应的索引,以及提供慢查询日志导出和自定义告警功能,让用户感知到问题, 从而在业务逻辑上进行优化。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云开发CloudBase 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 业界方案及其问题
  • 云开发数据库自动化索引
  • 结语
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档