最近在做一个草稿箱的小功能,类似于知乎的草稿箱。
但遇到了很严重的问题: 目前服务端用到的数据存储为: Mysql , memcache, CouchDb; Mysql 存索引数据, memcache 做缓存, CouchDB 存长文本数据。
我的实现思路是:发帖时,创建一条草稿数据,索引存 Mysql ,草稿的内容存在 CouchDB 。
但问题是 CouchDb 是 MVCC 类型的 NoSQL ,这就导致了天生不适合存储频繁更新的数据。所以草稿箱上线不到一个月, CouchDB 中才 1000 多条 Document ,但占用的空间是 35G !!
后来发现, CouchDB 有一个 Compact 功能,删除历史的版本记录数据, Compact 完成后才 85M 大小,这是合理的数据大小。 这就导致了,需要配置定期去 Compact 草稿数据库,同时也带来了 Compact 数据库的各种风险。
请问各位大牛: 在现有的数据存储结构下:怎么去实现草稿箱功能?或者怎么去解决这个问题?
1
menc 2016-05-05 17:45:47 +08:00
为什么不利用 html5 的 local storage 呢
|
2
oott123 2016-05-05 18:20:24 +08:00 via Android
那就存 MySQL 里嘛…
|
3
wqchen OP @oott123 存 mysql 里,在写帖子的时候,会频繁写表,代价有点高。
我有想过,干脆用 memcache 实现,草稿数据就存在缓存里,但是假如 Memcache 服务宕机了,用户的草稿全没了。 |
4
tSQghkfhTtQt9mtd 2016-05-05 21:37:01 +08:00 via Android
REDIS 或者直接 local storage 喽
|
5
wqchen OP @liwanglin12 redis 可以持久化倒是。
|
6
wqchen OP @menc 不太了解 local storage ,是存在客户端本地的吗?
知乎的草稿是可以多端同步的,数据应该是存在线上服务器。 |
7
leofml 2016-05-05 22:00:23 +08:00
既然想节约储存容量, 那直接用 TokuDB 就可以了.
|
8
wqchen OP @leofml 了解了一下 TokuDB,的确是好东西啊。
问题是现在现有的架构之下实现,用新的数据存储,还要新启动一个 service 。 |
9
ryanking8215 2016-05-06 08:49:18 +08:00
memcache/redis 缓存草稿, mysql 定时保存?
|
10
wqchen OP @ryanking8215 也是一个办法。
|