postgresql 中存 json 还是存传统的结构?以及是否有必要用 Redis 做缓存?

2017-04-27 04:12:33 +08:00
 cnnblike

前情提要: https://www.v2ex.com/t/355150#reply6

仔细考虑后,最后决定用 Node.JS+koa+Sequelize.JS+Postgresql 这一套搞后端,纯 API,渲染统一放在前端,后端渲染还要浪费 VPS 的 CPU 时间,不能忍。

多说的 api 的 request 和 response 都是 json 结构的,我查了一下,Javascript 的 JSON.Encode 会比 Python 的快不少: http://szborows.blogspot.com/2016/03/mini-restjson-benchmark-python-351-vs.html, 所以选的 NodeJS

仔细分析博客评论系统的时间消耗

————考虑到大部分用户都是只读评论,并不写评论,即使是最优秀的博客,留言率也不超过 1%,也就是说,这是一个读远远多于写的服务。 除了不能消除的数据库查询时间(这一部分可以通过把这一整套东西放在 SSD-VPS 上尽量加快),剩下的从多到少应该是用“ ORM 映射到对象”,第二应该是“对象转换为 json ”。也就是说,JSON-对象-数据库中的数据的互转应该是最耗费时间的部分了。

+--------+
|        |    +-----------+   +------------+
| Nodejs |    |           |   |            |
| Koa    +----+ sequelize +---+ Postgresql |
|        |    |           |   |            |
+---+----+    +-----------+   +------------+
    |
    |
+---+----+
|        |
| Redis  |
|        |
+--------+

那么如果要考虑性能的话,那么加上一个 Redis 做服务器的缓冲————事实上只要缓冲最频繁读取的那一部分,就可以大大减少“ ORM 映射到对象”和“对象转换为 json ”这个两个操作了,也就是说,问题完美解决。

问题是,我这样的设计是否有问题呢? Redis 是否有必要?

接着就是 Postgresql 里面设计的时候是否有必要预先计算好各种请求的结果做存储呢?比方说

  1. 不存储评论的数据,存储评论的 json 形式的回答数据,在修改的时候先当字符串读取,读取完了修改之后再用 json 接着再回写? 或者
  2. 以传统数据库形式存储评论的数据,只在 redis 中存储 json 形式的缓冲?

因为之前没想过类似的问题,所以也不知道这么想对不对。请各位大佬帮忙指点

2545 次点击
所在节点    问与答
4 条回复
ericls
2017-04-27 08:20:10 +08:00
用 redis 怎么 invalidate? Redis 里面存什么数据 这些数据拿到 node 怎么拼接成最后的数据?
cnnblike
2017-04-27 08:46:44 +08:00
@ericls LRU 吧主要还是,想不出啥高明的做法。duoshuo 的服务器端应该回应的都是 json 结构的东西,比方说吧,看这个接口“ http://dev.duoshuo.com/docs/50398b4b8551ece011000023 ”,这里的返回的整个 json 内容就保存在字符串中,等又收到请求说要某个博客的热评榜的时候就直接读取这个字符串,发出去就行,这样开销应该是最小的。
ericls
2017-04-27 09:01:18 +08:00
@cnnblike 比如有一个小部分更新了 你要同步那个大的缓存
cnnblike
2017-04-27 09:18:44 +08:00
@ericls redis 说到底就是缓存吧,反正每次有写入操作的时候(不到总请求的 1%)直接对 postgresql 里面的数据修改,ORM 出来的对象再 json 化后送到 redis 里面,想不出啥更好的办法了

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

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

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

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

© 2021 V2EX