云开发数据库VS传统数据库丨云开发101

云开发数据库与传统数据库的不一样

在小程序·云开发中,最核心的即是三大组件:数据库、云存储和云函数,从今天开始,咱们将开始隔日更的专栏文章,云开发101,在第一周,咱们将从最最核心的数据库开始提及。数据库

云开发数据库简介

首先,咱们先来了解一下云开发的数据库,云开发数据库是由云开发团队提供给云开发用户的数据库服务,开发者能够在小程序、云函数等环境中,经过简洁易懂的函数调用,来获取到对应的数据,方便开发者快速完成业务逻辑中关于数据库的部分。编程

在开发过程当中,你可使用诸如 wx.cloud.database().collection('data').where({"age":10}).get() 这样的方法获取到数据库中的信息,而无需再经过服务端提供的 API 完成数据库请求,将数据查询的权力下放到小程序端,加快应用的迭代效率。小程序

云开发数据库底层技术简介

云开发数据库所使用的是 NoSQL (Not Only SQL)数据库方案中的 MongoDB 数据库。MongoDB 数据库是目前业界发展的最好的 NoSQL 数据库,可让开发者以 SQL 和 NoSQL 两种方式完成数据库结构的建设,快速完成应用的开发。数据结构

NoSQL 与 SQL

咱们在传统的 Web 应用开发过程当中,大多使用的是 SQL 数据库,如 Oracle、SQLite、MySQL、MSSQL 等,但云开发所使用的 MongoDB 则是彻底不一样的数据库方案,所以,在进行数据库结构设计时,也有所不一样。错误的思考模型,会使得你在后续的应用开发过程当中,给本身带来无尽的麻烦。所以,也就有了咱们这篇文章,向你介绍 NoSQL 世界的魅力。less

Schemaless 带来的特性

在咱们使用 SQL 数据库开发时咱们须要先行设计好数据库的结构、数据表的结构等,而 NoSQL 型数据库,所以,让咱们在开发的时候,也会有了不一样的开发模式。咱们无需在进行应用开发时,先行添加表结构,咱们只须要根据咱们本身的使用状况,随时增长、删除新的字段,完成本身的业务需求,也正是这种自由,使得云开发有了快速开发、快速迭代的特性。数据库设计

云开发数据库结构设计思路

因为云开发所使用的数据库类型与咱们所熟悉的数据库类型不一样,所以,在开发的时候,咱们也要相应的修改咱们的数据库结构,以适配 NoSQL 数据库的各项特性,从而下降编程时的复杂度,又好又快的知足本身的业务需求。分布式

和 SQL 数据库不一样, MongoDB 数据库因为其存储结构从设计之初即是考虑分布式、多节点存储,其 Best Practice 是「以空间换时间」,所以,在设计应用数据结构时,不要考虑应用的数据存储空间,而是更多思考,如何以更快的速度将数据查询出来。函数

可是,数据库的设计不能彻底追求时间,也要思考编程的复杂程度,平衡时间、空间与编程复杂度,以一个更好的方式完成本身的数据库设计。工具

举个例子,由于极度追求数据的空间换时间,整个数据系统的多种数据仅设计一个集合,全部的数据都挂在一个集合中,显然是不合理的,这种存储会致使应用后续的迭代形成麻烦。设计

一样的,极度的不追求空间换时间,也是一种错误的选择,若是你将全部的数据都放在各自的独立集合中,则会形成没有很好的利用 NoSQL 数据库的特性,也会使得你的后续编程变得麻烦。

所以,在使用云开发数据库时,咱们须要思考咱们的业务发展方向,将可能会用到的场景进行割离,思考应用的数据库结构,从而确保本身的应用在后续开发的时候不出问题。

云开发数据库使用常见问题

在实际的应用中,咱们也看到,很多人由于不熟悉 NoSQL 的数据库设计理念,在实际开发过程当中,出现了很多的问题,这里咱们一一讨论一下。

自建主键属性

在 MongoDB 数据库中,数据存储使用的是 ObjectID,所以,其数据的 ID 并不是 1 ,2 ,3 ,4 ,而是一个相似于 a718a0f318d76 hash 值,很多人在开发时,由于认为没有自增的数据,没法完成数据排序,就自行实现了一个自增的 ID,每次新增的时候,都从新查询一遍,获取最新的值之后, 再从新新增数据。

但实际上,咱们能够有一种更加优雅和方便的工具来完成这种需求,那就是新增一个字段 created_at,这个字段的值设置为当前时间的时间戳 Timestamp。当你后续须要进行数据按新增的数据进行排序时,可使用这个字段进行逆序排序,同时,由于这个数据使用的是当前的时间数据,你还能够将其用于数据的「建立于XX年XX月XX日」的功能,完成本身的业务需求。这个数据除了能进行直接的排序,还能够用于后续按日期导出数据,好比筛选出某一个特定时间段的数据。

相比于一个自增的 ID,created_at 更加的简单易用,同时,由于不须要提早获取上一条记录中这个字段的值,能够有效的下降数据的查询次数。

时间存储问题

在咱们进行业务逻辑开发时,时间数据的获取是不可或缺的,很多人习惯于使用一个可视化的日期数据,便会将数据库中的日期字段设置为 2019-09-09,以便于在使用时直接输出到数据库中,但实际上在开发过程当中,建议你们存储时间戳 Timestamp 来做为具体的时间。

这是由于 2019-09-09 的数据并不是一个能够用于排序的字段,在后续开发的过程当中,由于你使用的是字符串做为时间,若是你须要将数据进行排序,将会没法排序或出现排序错误的状况;此外,由于你存储的是字符串类型的时间,那么后续若是你的业务需求发生了展现形式的变化,会致使你花费大量的时间去修改全部数据的时间,或者在数据的读取和存储时进行屡次格式转换,徒增麻烦。

所以,对于时间存储有需求的,咱们一向建议你们使用时间戳来存储,由于时间戳是一个数字类型的数据,所以能够直接进行大小的比对,同时,由于时间戳的数据是全球统一的,若是你的应用后续有全球化的需求,也能够很好的支持。

没法区分是否要拆分为独立的数据集合存储

在进行云开发的数据应用开发的时候,咱们发现,很多开发者的疑问是,我所使用的数据,是否有必要进行独立拆分出一个 Collection 来进行数据存储。

这个问题咱们能够以一些简单的问题来判断:

  1. 你所使用的数据是否有排序的需求?
  2. 你所使用的数据是否有修改的需求?
  3. 你所使用的数据除了在此处使用,是否还在其余地方使用?

这里咱们举几个例子来讲明一下,好比说,咱们有一个需求,是为一个内容发布系统的文章新增评论功能,那么咱们应该如何完成这部分呢?

若是你的评论数据没有排序、修改,也仅在此处使用,你能够考虑将评论数据放在文章数据中的一个子属性中,这样能够有效的完成数据查询,你在文章进行查询的时候,直接将评论数据查询出来,并进行显示,十分的方便。

若是你的评论数据有排序、修改以及其余地方使用的需求,那么就建议你将评论数据单独存放在一个集合中,以便在后续完成排序、更新和调用,若是此时你将其放在文章数据中,在后续查询时就会有不少问题,操做起来极为不便,给本身徒增烦恼。

固然,具体状况具体分析,若是你在分析完成后,依然没有答案,能够在公众号后台提出你的问题,咱们将尽快给您回复。

总结

在本次的文章中,咱们分享了云开发所使用的 NoSQL 数据库与传统的 SQL 数据库的区别,以及由于这种区别所带来的开发体验上的不一样,理解这些基础内容,将会帮助你更好的应用云开发数据库开发你本身的产品。

若是你对于云开发有任何问题,都欢迎你在文章留言出留下你的疑问,咱们将一一解答。


若是你想要了解更多关于云开发CloudBase相关的技术故事/技术实战经验,请扫码关注【腾讯云云开发】公众号~

相关文章
相关标签/搜索