评论

浅析小程序云开发数据库核心能力及最佳实践

随着用户量的不断增多,用户需求的不断变多,云开发的迭代速度也越来越快,云开发推出了不少的新功能,这篇文章,将历数这些云开发的新功能,看看你都用上了没。

作者:王国洗、邓坤力

​ 随着用户量的不断增多,用户需求的不断变多,云开发的迭代速度也越来越快,云开发推出了不少的新功能,这篇文章,将历数这些云开发的新功能,看看你都用上了没。

云开发数据库基础能力概览

云开发数据库主要提供的是一个 JSON 文档型数据库, JSON 数据格式让他对于前端开发十分的油耗,开发者可以轻松的完成数据的修改。此外,在数据库基础之上,云开发还提供了丰富的数据类型和多个平台的 SDK,让开发者可以在各个平台完成自己的业务开发。不仅如此,云开发数据库还提供数据库的安全规则控制,让开发者得以实现更加细粒度的权限控制。对云开发概念不熟悉的同学可以查看产品文档

当然,除了上面提到的这些基础能力以外,还有很多其他的特色能力,可以帮助你更好的完成自己的业务开发。接下来,我们来看看这些特色能力。

自定义告警

为了辅助业务监控服务质量,云开发为数据库提供了自定义告警能力,开发者可以借助监控能力,来实现监控服务的可用性。

对于开发者来说,可以借助云开发提供的自定义告警能力,来完成业务质量的监控、问题的快速触达,将问题扼杀在摇篮之中。

权限管理

脱离了安全,业务就没有任何保证可言。在数据库权限设置方面,云开发提供了两种设置,第一种是初期提供的基础的四种简易权限设置,第二种是灵活的、可自定义的权限控制,即数据库安全规则。每个集合可以拥有一种权限配置,权限配置的规则是作用在集合的每个记录上的。

通过不同粒度的权限控制方式,开发者可以十分简单的实现各种不同权限控制能力。不仅如此,因为有了权限控制能力,云开发的数据库可以在前端直接操作,可以有效的提升研发效率。

导入导出管理

针对不同的业务,云开发提供了数据导入、数据导出、数据回档功能。

针对有需求从传统业务迁移至云开发上的开发者,可以选用云开发提供的数据导入能力,通过将数据转换成 JSON 或 CSV 格式,来导入到云开发数据库中。类似的,如果业务需要对数据进行离线统计分析的时候,就可以借助数据导出的功能,实现本地的数据分析。

除此之外,从安全的角度考虑,我们面向开发者开放了数据回档的功能,简单的几下点击,就可以实现数据的快速回档,告别删库跑路。

索引管理

数据库索引可以提升数据库查询的性能,云开发也提供了相应的索引管理功能,帮助开发者方便快捷的完成索引的创建,优化数据库查询的性能。目前云开发数据库索引支持键值索引和地理位置索引,后续也有可能会支持 Hash 索引和全文索引等。

开发者可以借助云开发提供的索引功能,优化数据库查询的性能,提升产品的体验。

如何创建高效的数据库索引

最佳实践1:每个生产环境查询都应有索引支持

首先我们需要记得,每一个我们放到线上生产环境的查询,都应该配有索引支持,只有有索引支持才能尽可能规避数据量和请求量上涨带来的慢查询风险。

最佳实践 2:尽可能使用组合索引

如果我们的查询条件包含多个字段,那么为这些字段创建一个组合索引后的查询效率是比只使用单字段索引要高很多的。像下图这个case

最佳实践 3:组合索引字段顺序策略

要注意组合索引中字段的顺序。比如下图这样一个包含两个查询字段,一个排序字段的这么一个查询语句,那我们在创建组合索引的时候是不是任意顺序都可以呢?确认任意顺序都能让这个查询语句用到索引,但那不一定是最优的顺序。最优的顺序是b,c,a,为什么呢?在创建组合索引时,我们应遵循这么一个字段顺序原则:等于>排序>范围查询字段

最佳实践4:注意组合索引升降

要注意组合索引的升降序,这个升降序也并不是可以随意指定的,特定的升降序组合只可以满足特定的排序查询。以下面这个查询为例。

最佳实践 5:利用覆盖索引高效查询

可以利用好覆盖索引。什么是覆盖查询,就是当查询条件和查询要返回的所有字段都在索引中的时候,就是覆盖查询,当命中覆盖查询的时候,查询不再需要去读取数据,直接从索引中取得结果,可以进一步更加的高效。下面这个查询是一个例子:

最佳实践 6:数组查询也要建索引

要记住数组也可以使用索引,像下图中的示例,a 字段是个数字数组,b字段是个对象嵌套数组,它们其实都可以利用到索引,像a字段我们可以直接建个索引,如果需要查b数组里面的x字段,那可以建个b.x的字段索引。

最佳实践 7:去除多余索引

要去除多余的索引。什么是多余的索引呢?首先当然是没用到的索引,过时的索引,这些都可以去掉,但还有一类多余的索引需要特别提及,那就是重复前缀的索引和相反升降序的索引,这些也是多余的索引。

最佳实践 8:大数据量下避免使用低区分度操作符

在大数据量下避免使用低区分度的操作符,这些都是取反的操作符,他们的区分度通常都很低,因此很难高效的使用索引,因此只应该在少量的时候使用。

希望以上的能力介绍和最佳实践建议,可以帮助到大家更好地使用到云开发数据库。如果你对上面8个最佳实践建议还无法很好地理解,这也没有关系,因为微信开发者工具很快就会推出一个自动分析数据库查询语句,然后自动给出索引建议的能力,这项能力可以让大家在偏离数据库索引最佳实践的时候给出提示和警告,从而让小程序的数据库查询都尽可能有正确、完整的索引保障,并且还是遵循最佳实践的方式建立的索引。

本分享课程视频可以在这里查看:https://cloud.tencent.com/developer/salon/live-1234

【相关指引】

云开发(CloudBase)是云端一体化的后端云服务,采用 serverless 架构,免去了移动应用构建中繁琐的服务器搭建和运维。同时云开发提供的静态托管、命令行工具(CLI)、Flutter SDK 等能力极大的降低了应用开发的门槛。使用云开发可以快速构建完整的小程序/小游戏、H5、Web、移动 App 等应用。

产品文档:https://cloud.tencent.com/product/tcb

技术文档:https://cloudbase.net

技术交流加Q群:601134960

最新资讯关注微信公众号【腾讯云云开发】

最后一次编辑于  2020-07-06  
点赞 0
收藏
评论

2 个评论

  • Levy
    Levy
    2020-08-25

    想学习云开发的同学,推荐使用BaseCloud极速全栈开发框架:https://docs.base-cloud.joiny.cn/#/pages/functions/aboutUs

    2020-08-25
    赞同
    回复
  • 春林
    春林
    2020-07-02

    用httpapi 数据量大的时候 加转义 太麻烦了 什么时候能去掉不用转义多好 还有 集合里操作数组里的数组的数组里面的增删改查 怎么操作 有没有具体的代码演示呀 光是一个笼统的文档太难理解了

    2020-07-02
    赞同
    回复
登录 后发表内容