为什么……不拿另一个 HTTP 服务器来当作数据库来给一个 Web App 使用?

2014-07-02 22:09:10 +08:00
 raincious
// 首先,我知道这个想法挺怪异且折腾的(所以出现在了奇思妙想里啊,啊哈哈哈哈)。

貌似现在大多数常见的Web架构布局都一个用各种语言写的Web App+ 一个(或多个)数据库,然后Web App直接连接这个数据库存取数据。

而很多手机App的布局都是一个Native的客户端,然后连接到一个Web App,然后Web App连接到数据库取回数据交给手机App。

那为什么不可以用另一个HTTP服务器来当数据库用,然后其他Web App通过各种方式取得这个HTTP数据库服务器返回的内容(以比如Json的形式),貌似这样可以更加容易的管理缓存和实现分布式啊?

然后Web App就可以也像移动端App一样,仅仅负责显示和交互之类的了。(对吧?)



是不是因为HTTP协议的性能不好?刚拿Go自带的HTTP模块做了个测试,大多数请求在1ms左右完成(虽然还是比数据库的查询时间长了很多),但比整个网站的运行时间要短。如果复用链接的话,可能能以相对不是延迟很久的时间完成多次请求。



代码:
https://gist.github.com/06dda39721dccda06348.git

// 好吧,怪异的想法,请勿喷。
6080 次点击
所在节点    奇思妙想
31 条回复
isy
2014-07-02 22:23:24 +08:00
你说的是不是这个网站做的东西。

https://www.firebase.com/
jsonline
2014-07-02 22:25:00 +08:00
什么叫另一个HTTP服务器
Livid
2014-07-02 22:26:01 +08:00
2code
2014-07-02 22:36:12 +08:00
Apache CouchDB™ is a database
that uses JSON for documents,
JavaScript for MapReduce indexes,
and regular HTTP for its API
xingxiucun
2014-07-02 22:43:31 +08:00
你这个HTTP数据库的另外一个名字叫API服务器?
WildCat
2014-07-02 23:02:11 +08:00
Hybrid App不就是这么做的?
izoab
2014-07-02 23:12:47 +08:00
呃···,原谅我没太看明白。
是不是想说新浪微博那样的。

但不管怎样,数据库的存在是必要的,因为他解决检索、统计和持久化的问题,如果直接通过http直接去获取元数据,给json,那是不是有权限管理和数据组织的问题?所以不能直接去获取元数据,而是需要一个应用去管理和维系数据与应用关系,让你获取到你应该获取的内容,而不应该获取的就不给你了,要也不给。

这样的话,把上面这些压力就给服务器了,而手机App这样的东西就可以傻瓜化,减轻手机的负载了。。。

哎呀,反正也没看懂。。。
XadillaX
2014-07-03 00:24:16 +08:00
你自己不知道罢了。很多地方都是这么做的,就我目前刚上手的项目构架也是这样的。
lincanbin
2014-07-03 00:25:03 +08:00
Web App现在基本都是Ajax了,所以不是直连数据库,而是有一套JOSN格式交换数据的API。
客户端和Web App也是可以共用的,但是没什么必要,一般都会另外开发一套,因为业务逻辑上会有一定差别。
caomu
2014-07-03 01:44:04 +08:00
我想到的是RESTful API。。。
ming
2014-07-03 01:45:15 +08:00
当然可以 现在很多应用其实就是这么做的
yakczh
2014-07-03 08:21:50 +08:00
sql 写到页面里吗?
rrfeng
2014-07-03 08:55:16 +08:00
插播一句……
ttserver 支持 http 方式
raincious
2014-07-03 09:40:34 +08:00
@XadillaX 貌似是的。我觉得我越想越像是MongoDB,但是这主意主要是解决数据库依赖的问题,让应用程序依赖一个中间层协议,而不是直接依赖数据库。这样就可以在不更改一行代码的情况下使用各种(从SQL到Redis)数据库。
isno
2014-07-03 09:48:47 +08:00
http://www.isno.cn/2014/06/golang-thrift-google-protobuf/ 之前写的一个文章,设计一个跨语言高性能的数据中心(还没写完)
qwe542398
2014-07-03 10:22:52 +08:00
ajax?
semicircle21
2014-07-03 10:34:48 +08:00
用HTTP协议做数据库的API接口并不少见, MongoDB 等等.
但数据库(DBMS)和HTTP服务器面向的问题是不一样的:
就拿最简单的key-value式的需求而言, 如果用HTTP服务器, 假设用静态文件来实现, 当海量的几十字节的小key-value对存成硬盘上时, 文件系统经不起这么造, 这时就需要数据库来组织管理了.
如果你用go的map来实现, 那实际上也是map解决的数据库的问题(且不谈持久化), 而不是HTTP服务器能做到的..
...不知我表达清楚没, 楼主感受下哈~
semicircle21
2014-07-03 10:39:55 +08:00
@isno 文章不错, 已读, 期待下文, 你后来真的用thrift了吗? 效果如何?
我大概10个月之前看thrift, 那时项目的状态不太好, 所以没敢用.
qiongqi
2014-07-03 11:29:03 +08:00
lz的思路扩展下,就是把数据读取和存储作为一层,同时为web,APP,wap等提供数据,然后web,APP,wap自己把数据拼入模版?我理解是这样的,是吗?
一般业务量大的都有类似的做法的,下面的层里不仅仅有数据库,还有其它东西,通信的协议也不仅仅是http的,有很多tcp的,甚至有udp的。。
iam36
2014-07-03 12:24:18 +08:00
性能考虑
jason对于大量数据是很没有效率的协议标准

换个说法,有天网络带宽达到某种程度的时候,数据库(目前的性能级别的)就会广泛存在于互联网间了.

这个问题基于你的理解层面很有价值,加油.

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

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

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

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

© 2021 V2EX