Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >云开发数据库VS传统数据库丨云开发101

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

原创
作者头像
腾讯云开发TCB
修改于 2019-09-17 07:04:46
修改于 2019-09-17 07:04:46
2.8K1
举报

云开发数据库与传统数据库的不同

小程序·云开发中,最核心的便是三大组件:数据库云存储云函数,从今天开始,我们将开始隔日更的专栏文章,云开发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、SQLiteMySQL、MSSQL 等,但云开发所使用的 MongoDB 则是完全不同的数据库方案,因此,在进行数据库结构设计时,也有所不同。错误的思考模型,会使得你在后续的应用开发过程中,给自己带来无尽的麻烦。因此,也就有了我们这篇文章,向你介绍 NoSQL 世界的魅力。

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相关的技术故事/技术实战经验,请扫码关注【腾讯云云开发】公众号

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
1 条评论
热度
最新
如何对前端用户提交的数据进行后台验证?在不使用云函数的前提下。
如何对前端用户提交的数据进行后台验证?在不使用云函数的前提下。
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
云开发的数据库权限机制解读丨云开发101
在使用云开发进行开发时,数据库权限是一个让不少人困扰的部分,四种数据库权限,到底是什么意思?其各自的权限、应用场景都是什么?大多数人对于这个机制,还是模糊的。为了帮助大家进行更好的开发,在涉及到具体的代码之前,我们先来了解一下云开发的数据库权限机制。
腾讯云开发TCB
2019/09/17
8900
云开发常用数据结构设计剖析丨云开发101
在使用云开发进行产品开发的时候,我们常常需要思考,我们的应用的数据结构应该如何设计,今天我们来看一些在进行应用开发时常见的一些场景的数据结构,来帮助你更好的理解云开发,以及不同场景下云开发的应用。
腾讯云开发TCB
2019/09/24
4850
传统的关系型数据库与NOSQL数据库间的对应关系、MongoDB的安装以及使用、 MongoDB中针对于MapReduce的实现、MongoDB数据库的用户管理、使用Java操作MongoDB数据库
MongoDB数据库是现在使用较为广泛的数据库,但是使用它都是需要一定的应用环境,在实际的开发环境之中,传统的关系型数据库依然是使用的主体,因为这样的数据属于结构化数据,而MongoDB这样的NOSQL数据库只是一个辅助,与Node.JS结合的时候它就是主力。
爱明依
2019/03/12
1.1K0
数据库开发必备:深入理解DDL、DML、DQL和DCL
DDL(Data Definition Language),数据定义语言,用来定义数据库结构,包括创建、修改和删除数据库对象,如数据库、表、索引和视图。常用的 DDL 操作包括:
平凡之路.
2025/03/24
6440
数据库开发必备:深入理解DDL、DML、DQL和DCL
如何在云开发Cloudbase中使用Redis?
云开发 Cloudbase 是腾讯云为移动开发者提供的云原生一体化应用开发平台,可用于开发多种客户端,它帮助开发者统一构建和管理资源,免去了应用开发过程中繁琐的服务器搭建及运维、域名注册、数据接口实现等繁琐流程,让开发者可以专注于业务逻辑的实现,而无需理解后端逻辑及服务器运维知识,开发门槛更低,效率更高。详情可以查看官网文档:https://cloud.tencent.com/product/tcbfrom=12334
腾讯云开发TCB
2020/06/28
1.7K0
如何在云开发Cloudbase中使用Redis?
嵌入式数据库 QuickIO 诞生记
一年前,我在业余时间编写一个后端项目,项目使用的技术栈是 Java Vert.x + MongoDB。Vert.x 是一个事件驱动的网络应用程序框架,因其异步响应的特性,读写 MongoDB 时不可避免要编写大量异步回调的代码。“回调地狱”现象的产生,让代码的可读性逐渐下降。
artbits
2023/05/01
1.2K0
【MySQL】为什么需要NOSQL数据库
抛开成熟度和工具先不谈,NOSQL的优势是我们需要关注的点,即为什么需要NOSQL数据库。
秋水长天
2024/01/16
2740
用云开发数据库实现列表触底自动加载功能丨云开发101
在前面的两篇文章中,我们简单的谈了谈云开发数据库与传统数据库的差异,以及云开发数据库中的权限机制,今天我们来分享一些实用的代码,快速帮助大家完成自己的小程序的部分功能。
腾讯云开发TCB
2019/09/24
7650
学生信息管理系统开发实战:掌握多数据模型关联关系的设计和使用
我们日常使用的业务系统,核心都是围绕数据展开,基于数据变化出无穷的可能。本篇文章将基于《学生信息管理系统》这样浅显易懂的场景,介绍如何设计和创建模型,如何在多模型之间建立复杂的关联关系,以及如何在云开发平台中实际操作数据。
腾讯云开发TCB
2024/09/27
2860
学生信息管理系统开发实战:掌握多数据模型关联关系的设计和使用
MongoDB 2023年度纽约 MongoDB 年度大会话题 -- 企业级从传统数据库到NOSQL,你会更好
这是2023年纽约NYC MongoDB大会的第二期,这期的主题是在企业级别从RDBMS 迁移到 NoSQL.
AustinDatabases
2023/09/26
2320
MongoDB 2023年度纽约 MongoDB 年度大会话题 -- 企业级从传统数据库到NOSQL,你会更好
你们要的云开发数据库基础入门来了|视频教程
近来小程序·云开发越来越热,云开发主要基于Serverless架构,Serverless架构包含两块:Faas(函数即服务)和BaaS(后端即服务)。
腾讯云开发TCB
2020/03/31
1.1K0
你们要的云开发数据库基础入门来了|视频教程
【数据库07】后端开发必备的大数据知识指南
随着计算机的飞速发展,网站产生了大量数据,数据规模远超传统数据库系统能够处理的规模,我们把具有量大,存储速度要求高,数据多样性丰富的特征的数据统称为大数据。
半旧518
2022/11/18
5730
【数据库07】后端开发必备的大数据知识指南
掌握数据库的二元性:使用备忘单探索 SQL 领域和 8 种不同的 NoSQL 数据库
在当今的数字时代,数据是组织的命脉,可以推动创新、推动洞察力并增强决策制定能力。随着企业努力有效地管理和利用其数据,选择合适的数据库变得至关重要。数据库领域向我们展示了两个突出的范例:SQL 和 NoSQL。这些不同的方法提供了不同的优势和功能,提供了丰富的数据存储和管理选项。
用户1418987
2023/10/16
2470
掌握数据库的二元性:使用备忘单探索 SQL 领域和 8 种不同的 NoSQL 数据库
什么是关系型数据库和非关系型数据库
应用程序都离不开数据库,那不同的数据结构,就会存放在不同的数据数据库中,所以数据库按数据结构分为关系型数据库和非关系型数据库。接下来就总结一下这两者的区别吧。
小冷coding
2023/05/25
2.6K0
什么是关系型数据库和非关系型数据库
腾讯云开发的电商解决方案结合 AI 可以有哪些新火花?
云开发平台可以帮助开发者快速低门槛构建小程序、网页以及移动应用,无需购买服务器、通过云开发提供后端代码、通过云存储解决文件存储、通过云数据库解决数据查询读写。
腾讯云开发TCB
2024/11/18
2470
腾讯云开发的电商解决方案结合 AI 可以有哪些新火花?
如何进行数据库选型
导语:随着云上应用的迅速发展,DT时代的到来,面对数智化、多场景情况下,我们如何做好数据库选型?
蝉羽
2022/06/28
3.2K0
当数据库遇到分布式两者会擦出怎样的火花!
数据库通常有着完善的事务支持,但是局限于单机的存储和性能,于是就出现了各种分布式解决方案。最近读了《Designing Data-Intensive Applications》这本书,所以做一个总结,供大家做个参考,有什么不对的请大家指正,一起讨论。
Java程序猿
2021/07/30
8550
物联网云平台数据存储方案,这次我终于找对了
物联网云平台是一个连接设备和互联网的系统,通过传感器、设备和网络进行数据采集和传输,需要一个可靠和高效的存储系统来存储和管理大量的物联网数据。存储的意义在于提供数据的持久性和可访问性,使得数据可以在任意时间被查询、分析和应用。
架构师修炼
2023/09/03
1.7K0
物联网云平台数据存储方案,这次我终于找对了
Apifox与Apipost数据库连接功能详细对比,让接口管理更高效!
在现代软件开发中,数据库是驱动各类应用和服务运行的核心组件。无论是企业级应用、互联网服务,还是物联网解决方案,数据库的类型和数量通常都因业务需求和技术架构的复杂性而不断拓展。
多吃核桃
2025/03/03
1060
Apifox与Apipost数据库连接功能详细对比,让接口管理更高效!
腾讯云云开发简单快捷方便易用扩展性强!
在当今快速发展的科技时代,云计算已经成为了软件开发的重要组成部分。随着企业对灵活性、可扩展性和高效性的需求不断增加,云开发平台应运而生。腾讯云云开发作为腾讯云推出的一项新型开发服务,旨在为开发者提供一个高效、便捷的开发环境。本文将详细分享我在使用腾讯云云开发过程中的体验,包括环境搭建、功能使用、实际案例以及总结与展望。
lyushine
2024/11/12
2610
腾讯云云开发简单快捷方便易用扩展性强!
推荐阅读
相关推荐
云开发的数据库权限机制解读丨云开发101
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档