性能文章>js直接操作数据库会怎么样>

js直接操作数据库会怎么样原创

1年前
346023
这几天刷脉脉的时候看到一个话题初看觉得可笑,再看陷入沉思,最后还是决定花点时间想清楚,写下来。
确实没见人这么干过,为什么呢?
技术限制
被技术限制了?据我所知目前没有面向js的数据库驱动,但反观现在的技术大潮,写一个面向js的数据库驱动应该也不是什么难事。
安全限制
被安全性限制了?js在网站中的分量不言而喻,数据展现、交互、检验、酷炫的效果等等,前端的大半壁江山非它莫属,但它的隐私性却捉襟见肘,F12以后便可窥全貌,当然这不算缺点,毕竟它直接和用户交流,而且运行在用户浏览器中,在好奇宝宝面前如皇帝的新装一般。
扩展\稳定性
假设已经有了js的数据库驱动而且安全性已经解决,是不是就可以了?非也,想想当初为什么要前后端分离,不就是为了分而治之降低复杂度、耦合性,提高稳定性,让各自的职责更清晰,难道要重走历史的老路?另一方面来讲前端是最不稳定的,需要时刻追随业务的角度,今天是pc端网页,明天是手机端h5,后天又是公众号、小程序等等,每种类型的前端都要把操作数据库的逻辑copy一遍,重复度太高,维护绝对是一种噩梦,基础的相对稳定的内容就应该下沉,而不是各自为政,回忆下TCP/IP四层结构,是不是越往下的越稳定,应用层花活很多,但越往下的层就越稳重。
任何事情脱离了场景都不能轻易说对错,恰好我最近手头有一个案例可以拿出来讨论一下。
场景出发
前几天朋友找我咨询一件事,他希望做一个演示的小程序,就两个页面,列表和详情,列表会有一个简单的搜索,问我都需要准备哪些资源,我虽然对于小程序不是很了解,但是根据公司里小程序的运行情况我大概跟他说需要以下几点:
1.前端开发小程序页面;
2.后端提供一个服务为前端提供接口,需要买一台服务器来运行后端服务和数据库;
3.需要买一个公网域名,后端服务的接口需要公网能访问到;
朋友的反应是太复杂了,买机器、装数据库、公网域名,这一套没有点运维知识的人不好玩转,问我能不能简化,我说这就是最基本的了,他接着说网上介绍小程序有个云数据库你知道不,我看前端也可以直接操作数据库,你帮我看看是否可行,我准备找个前端就把这全套做了。
跟他交流完我觉得小程序这个云数据库有点意思,准备去官网探探虚实,新事物总能让人兴奋,一起来看下官网的介绍。
微信云开发

微信云开发是微信团队联合腾讯云推出的专业的小程序开发服务。

开发者可以使用云开发快速开发小程序、小游戏、公众号网页等,并且原生打通微信开放能力。

开发者无需搭建服务器,可免鉴权直接使用平台提供的 API 进行业务开发。

 

云开发优势

 
无需搭建服务器
快速构建小程序、公众号

无需搭建服务器,只需使用平台提供的各项能力,即可快速开发业务。

 
免登录、免鉴权调用微信开放服务

无需管理证书、签名、秘钥,直接调用微信 API 。复用微信私有协议及链路,保证业务安全性。

 
统一开发多端应用

支持环境共享,一个后端环境可开发多个小程序、公众号、网页等,便捷复用业务代码与数据。

 
按量计费,成本更低

支持按量计费模式,后端资源根据业务流量自动扩容,先使用后付费,无需支付闲置成本。

 

能力概览
储存数据与文件
云数据库: 文档型数据库,稳定可靠;支持在小程序端和云函数中调用。
存储: 云端文件存储,自带 CDN 加速,支持在前端直接上传/下载,可在云开发控制台可视化管理。
运行后端代码
云函数: 在云端运行的代码,微信私有协议天然鉴权,开发者只需编写自身业务逻辑代码。
扩展能力
静态网站: 快速部署网站,支持自定义域名、网站防刷等配置。
内容管理(CMS): 一键部署,可视化管理文本、Markdown、图片等多种内容,使用云数据库读取数据并使用数据。
打通微信生态
云调用: 云函数内免鉴权调用小程序开放接口,包括服务端调用、获取开放数据等能力。
微信支付: 免鉴权、免签名计算、免 access_token,在云函数内原生调用微信支付接口。
环境共享: 跨账号资源和能力复用,可授权云开发资源给其他小程序/公众号使用。

数据库

云开发提供了一个 JSON 数据库,顾名思义,数据库中的每条记录都是一个 JSON 格式的对象。一个数据库可以有多个集合(相当于关系型数据中的表),集合可看做一个 JSON 数组,数组中的每个对象就是一条记录,记录的格式是 JSON 对象。

关系型数据库和 JSON 数据库的概念对应关系如下表:

关系型 文档型
数据库 database 数据库 database
表 table 集合 collection
行 row 记录 record / doc
列 column 字段 field

数据库 API 包含增删改查的能力,使用 API 操作数据库只需三步:获取数据库引用、构造查询/更新条件、发出请求。以下是一个在小程序中查询数据库的图书记录的例子:

/ 1. 获取数据库引用
const db = wx.cloud.database()
// 2. 构造查询语句
// collection 方法获取一个集合的引用
// where 方法传入一个对象,数据库返回集合中字段等于指定值的 JSON 文档。API 也支持高级的查询条件(比如大于、小于、in 等),具体见文档查看支持列表
// get 方法会触发网络请求,往数据库取数据
db.collection('books').where({
publishInfo: {
country: 'United States'
}
}).get({
success: function(res) {
// 输出 [{ "title": "The Catcher in the Rye", ... }]
console.log(res)
}
})

 

简单总结下步骤:

1.开通云开发服务;

2.控制台创建集合、维护数据;

3.前端使用sdk直接读取云数据库中数据;

4.前端展示数据;

相对于传统开发模式省去了维护数据库,购买公网域名等事项,极大的提高了开发速度,降低了运维难度。

 

很显然前端直接操作数据库的技术限制被解决了,那安全问题呢?F12、抓包等手段在小程序面前已然是败下阵来,毕竟它的底座是微信,不信你抓包看看?

 

回到我们开头提到的扩展\稳定性,对于简单场景来讲无伤大雅,真有扩展需求时再重构也不晚,毕竟简单,对于我朋友那种演示场景来讲快速看到成品才是最重要的,需要快速试错。

 

作为技术人来讲不要太追求“技术”,要适当的学会妥协,切记不能脱离场景。

 

 

 

点赞收藏
分类:标签:
踩刀诗人

聊聊技术,唠唠段子,偶尔做菜写诗,欢迎关注我的公众号 踩刀诗人

请先登录,查看2条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步
3
2