关于 APP 的后端的疑惑

2016-03-30 09:26:08 +08:00
 xiqingongzi

进来 BAAS 很火. LeanCloud ,Bmob,WildDog 都在搞 不过迷惑的是,为什么要用 NoSQL? 仅仅是因为数据的结构不固定么? 按理来说产品在设计时肯定会预留一定的位置给未来的产品的更新提供准备的. 有没有熟悉的人前来解答一下我的疑惑?

2697 次点击
所在节点    问与答
10 条回复
matsuijurina
2016-03-30 10:33:41 +08:00
比如说你要给一个新的客户提供服务,像 Parse 这样,让他能够创建属于自己的 RESTful API ,能定义新的字段等等。如果用 MySQL 来做的话,你肯定不能设计成在已经成型的表里动态增减 Column ,那样用户多了维护起来简直是个灾难。那就只能把用户自定义的字段信息写成 JSON 格式,统一存储在某个条目里。但这样一来,新的问题又出现了,检索啊,性能啊。你这时候回头一看,发现 MongoDB 这样的 NoSQL 正好能解决这些问题。
thinkif
2016-03-30 10:51:38 +08:00
一般来说使用 BAAS 的 App 对后端的业务需求都不是特别复杂,但数据量又可能增长的很快,所以 NoSQL 是比较合适的,如果是后端业务特别复杂,一般都自建后端服务了,那样的情况下可能需要用关系型数据库
xiqingongzi
2016-03-30 11:04:14 +08:00
@thinkif 在使用 Bmob ,和 LeanCloud 中,发现他们都有云引擎可以对数据和业务进行处理。您觉得,如果作为一个 app 的后端够么?我目前在选型,想自己开发后端,但是也确实遇到了 @matsuijurina 说的问题,因为产品未正式成型,所以字段可能变化的频繁。如果把 APP 作为创业项目,有必要自己写后端么?
kslr
2016-03-30 11:18:21 +08:00
@xiqingongzi 没必要,以后可以慢慢改。
thinkif
2016-03-30 11:32:49 +08:00
这得具体看涉及到业务的复杂度。
个人感觉字段的变化不是最大的障碍。

使用 LeanCloud 这种的确比较方便,有很多基础的代码都不用写了。

所以在这种技术的选择上,建议你考虑下面的问题:
1. 在可以预测的范围内,你是不是可以用它一直来支撑你的业务,也就是说要预计你使用这种 BAAS 服务对于要开发的 App 是一个临时性的行为还是说会一直依赖它去开发后续的工作。
2. 如果说未来仍然要开发自己的后端程序,那么迁移的成本有多大。
3. 你目前是否有时间来开发好自己的后端程序。

思考完这几个问题你就应该有答案了。
matsuijurina
2016-03-30 11:36:56 +08:00
@xiqingongzi 你可以直接用 Facebook 开源的 Parse-Server, 非常简单的,在本机试用的具体步骤如下:

先去 Nodejs 官网下载安装 Nodejs
再去 MongoDB 官网下载安装 MongoDB ,装好后启动 mongo 服务
mongod --dbpath your_db_directory

建一个工作目录,比如 parse-test ,在目录下运行
https://github.com/ParsePlatform/parse-server.git
cd parse-server
npm install
以上是安装 parse server

git clone https://github.com/ParsePlatform/parse-dashboard.git
cd parse-dashboard
npm install
以上是安装 parse dashboard ,这是 parse 的后台 web 版管理界面

然后在 parse-server 目录里启动 server
npm start -- --appId myAppId --masterKey myMasterKey --serverURL http://localhost:1337/parse

接着在 parse-dashboard 目录里修改一下 config.json, 填入刚才你设定的 AppId, MasterKey 等信息
{
"apps": [
{
"serverURL": "http://localhost:1337/parse",
"appId": "myAppId",
"masterKey": "myMasterKey",
"appName": "MyApp"
}
]
}

运行 dashboard
npm run dashboard

现在所有的服务都启动了,可以 curl 测试一下是否能够成功创建数据对象(用 postman 这些工具也可以):
curl -X POST \
-H "X-Parse-Application-Id: myAppId" \
-H "Content-Type: application/json" \
-d '{"score":1337,"playerName":"Sean Plott","cheatMode":false}' \
http://localhost:1337/parse/classes/GameScore

返回成功。
打开浏览器访问 http://localhost:4040 ,可以在 parse 的 web 管理界面看到刚刚创建的条目,当然也可以自己添加删除条目了。

现在你已经在本机上运行起来了一个简化版的 Parse 后端。接下来你可以把 Parse 提供的 iOS 或 Android SDK 嵌入你的 app 里,专注于 app 的开发。

剩下的事情都可以参考官方文档解决: https://parse.com/docs
macliu
2016-04-17 11:46:21 +08:00
野狗的存储是为了保证实时通信中数据存储,我很建议使用 WildDog + Server 方式的工作模式。

NoSQL 和关系型数据库的设计理念不同就不多说了。 NoSQL 数据会带来数据冗余。


目前野狗对用户呈现的是类 NoSQL 数据库的结构。

野狗的 NoSQL 的设计有一个原因是因为 JSON 结构在很多产品中,可以很方便的被解析和使用。野狗的设计是“弱中心化”设计,也就是说在每个客户端会保持一个数据库副本集,你在查询的时候使用的只要本地有 Cache ,其他的都是本地处理。这样效率很高,在移动互联网的弱网架构时会非常有帮助。这也是微信 VS QQ 的重大技术不同。

在 Web 端,我很看好 HTML5 , JSON 是天然的数据表示方式,不需要复杂的序列化和反序列化的过程。
macliu
2016-04-17 11:47:01 +08:00
@xiqingongzi 不太建议使用 BaaS 作为唯一的后端。无后端是不太现实的。
xiqingongzi
2016-04-17 12:41:21 +08:00
@macliu 确实,感受到了。现在还是自己开发。野狗拿去搞在线聊天部分了。
macliu
2016-04-20 00:48:42 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/267256

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX