写点什么

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

2020 年 7 月 13 日

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

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


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

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



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


自定义告警

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


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



权限管理

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


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



导入导出管理

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


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


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



索引管理

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


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



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

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

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


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

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



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

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



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

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



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

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



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

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



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

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



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

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


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


2020 年 7 月 13 日 08:58712

评论

发布
暂无评论
发现更多内容

第八周课后练习

jizhi7

记一次神奇的MySQL死锁

废材姑娘

spring MySQ

Python进阶——什么是描述符?

Kaito

Python

跨越“数字鸿沟”,日本老年智能化服务的解法

脑极体

新增原创标签相关改动

yinhaixiang

aa bb cc

《逻辑和计算机设计基础》第五版(英文原版)PDF免费下载

计算机与AI

计算机基础 计算机组成原理

区块链发展前景广阔,要紧跟时代步伐

13828808769

区块链发展 时代发展

mongodb 源码实现系列 - mongodb详细表级操作及详细时延统计实现原理(快速定位表级时延抖动)

杨亚洲(专注mongodb及高性能中间件)

数据库 mongodb 性能调优 源码刨析 分布式数据库mongodb

访问者模式及其在Java Parser中的应用

maijun

甲方日常 67

句子

工作 随笔杂谈 日常

生产环境全链路压测建设历程之九 淘宝网全链路压测的原理

数列科技杨德华

【架构师训练营 1 期】第十二周作业

诺乐

数据类型· 第1篇《元组和列表的性能分析、命名元组》

清菡

测试开发

以理性不断的崇敬 - 对DDD之后复杂业务软件系统设计的思考

Winfield

领域驱动设计 DDD 架构设计

ReactNative | 项目复盘,涉及环境、RN版本升级、安全等方案

梁龙先森

前端 混合应用开发 React Native

浅谈产品与项目之间的爱恨情仇

学习笔记4

Qx

ISP芯片:如何让数字之眼“看清”真实世界?

脑极体

金融科技 | 建设中台能力,助力开放生态

xcbeyond

金融科技 中台战略 中台架构

还在手写Operator?是时候使用Kubebuilder了

Java架构师迁哥

FORSAGE智能合约矩阵系统软件APP开发

开發I852946OIIO

系统开发

时序数据库DolphinDB和TimescaleDB 性能对比测试报告

DolphinDB

大数据处理 分布式系统 时序数据库 DolphinDB 数据库开发

Spring Boot 过滤器

噜噜猫

Spring Boot

Java虚拟机科普系列—元空间Metaspace的内存结构

Java老k

Java JVM Java虚拟机 metaspace

新增原创标签相关改动

yinhaixiang

测试 个人 aa bb

Week_12 作业

golangboy

极客大学架构师训练营

求求你,别再用wait和notify了!

王磊

Java

如何搭积木式的快速开发H5页面?

徐小夕

Java 前端 前端工程 React 数据可视化

第八周-总结

jizhi7

我国一项物联网安全测试技术成为国际标准;Windows 10将支持安卓应用

京东科技开发者

【架构师训练营 1 期】第十二周学习总结

诺乐

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

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