关于实现类似知乎草稿箱的问题

2016-05-05 17:28:10 +08:00
 wqchen

最近在做一个草稿箱的小功能,类似于知乎的草稿箱。

但遇到了很严重的问题: 目前服务端用到的数据存储为: Mysql , memcache, CouchDb; Mysql 存索引数据, memcache 做缓存, CouchDB 存长文本数据。

我的实现思路是:发帖时,创建一条草稿数据,索引存 Mysql ,草稿的内容存在 CouchDB 。

但问题是 CouchDb 是 MVCC 类型的 NoSQL ,这就导致了天生不适合存储频繁更新的数据。所以草稿箱上线不到一个月, CouchDB 中才 1000 多条 Document ,但占用的空间是 35G !!

后来发现, CouchDB 有一个 Compact 功能,删除历史的版本记录数据, Compact 完成后才 85M 大小,这是合理的数据大小。 这就导致了,需要配置定期去 Compact 草稿数据库,同时也带来了 Compact 数据库的各种风险。

请问各位大牛: 在现有的数据存储结构下:怎么去实现草稿箱功能?或者怎么去解决这个问题?

9921 次点击
所在节点   NoSQL
10 条回复
menc
2016-05-05 17:45:47 +08:00
为什么不利用 html5 的 local storage 呢
oott123
2016-05-05 18:20:24 +08:00
那就存 MySQL 里嘛…
wqchen
2016-05-05 21:34:32 +08:00
@oott123 存 mysql 里,在写帖子的时候,会频繁写表,代价有点高。
我有想过,干脆用 memcache 实现,草稿数据就存在缓存里,但是假如 Memcache 服务宕机了,用户的草稿全没了。
tSQghkfhTtQt9mtd
2016-05-05 21:37:01 +08:00
REDIS 或者直接 local storage 喽
wqchen
2016-05-05 21:39:22 +08:00
@liwanglin12 redis 可以持久化倒是。
wqchen
2016-05-05 21:43:41 +08:00
@menc 不太了解 local storage ,是存在客户端本地的吗?
知乎的草稿是可以多端同步的,数据应该是存在线上服务器。
leofml
2016-05-05 22:00:23 +08:00
既然想节约储存容量, 那直接用 TokuDB 就可以了.
wqchen
2016-05-05 22:38:15 +08:00
@leofml 了解了一下 TokuDB,的确是好东西啊。
问题是现在现有的架构之下实现,用新的数据存储,还要新启动一个 service 。
ryanking8215
2016-05-06 08:49:18 +08:00
memcache/redis 缓存草稿, mysql 定时保存?
wqchen
2016-05-06 11:32:11 +08:00
@ryanking8215 也是一个办法。

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

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

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

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

© 2021 V2EX