请问有没有一种 key-value 存储数据库,超时后不销毁而是持久化 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
oldcai
0.01D
V2EX    问与答

请问有没有一种 key-value 存储数据库,超时后不销毁而是持久化

  •  
  •   oldcai
    PRO
    2014-03-06 18:57:50 +08:00 4474 次点击
    这是一个创建于 4248 天前的主题,其中的信息可能已经有所发展或是发生改变。
    没超时的适合,保存在内存中,timeout后持久化,可以下次通过key查询到。

    redis持久化只是一定时间将整个内存dump一次(类似这种机制),不针对某个key;
    memcached好像就没有持久化机制。

    先谢过啦~
    19 条回复    1970-01-01 08:00:00 +08:00
    binux
        1
    binux  
       2014-03-06 19:07:23 +08:00   1
    为什么没有超时的时候不持久化?
    arbipher
        2
    arbipher  
       2014-03-06 19:09:41 +08:00 via iPhone   1
    你这个叫缓存
    oldcai
        3
    oldcai  
    OP
    PRO
       2014-03-06 19:09:52 +08:00
    @binux 那disk的io就会很大吧,不过一般来说没超时的话,只有写的时候会去持久化一下,也无妨吧,有的话求告诉呀。
    9hills
        4
    9hills  
       2014-03-06 19:10:33 +08:00 via Android   1
    mongodb
    binux
        5
    binux  
       2014-03-06 19:12:13 +08:00   1
    @oldcai 如果你不相信linux内核的文件缓存,那么即便是mysql也是有缓存的。。
    oldcai
        6
    oldcai  
    OP
    PRO
       2014-03-06 19:18:15 +08:00
    @9hills mongodb没法设置超时啊什么的吧,而且比键值对复杂很多呢,用来换sql数据库倒是可以,用开拓展下缓存,就太过了吧。

    @binux linux的内存swap去了,整个系统就卡爆,mysql/postgresql的缓存这些都是数据库里面的优化,可控性不大啊。
    9hills
        7
    9hills  
       2014-03-06 19:21:37 +08:00 via Android   1
    @oldcai 那就redis + mongodb

    两个同时写,先从redis读,读不到再去读mongodb
    oldcai
        8
    oldcai  
    OP
    PRO
       2014-03-06 19:30:12 +08:00
    @9hills 就是为了解决这种麻烦,才想问问有没有这种解决方案。

    是不是这种需求太少?
    也不少吧,像访问量啊,用户对象信息啊什么的这类信息还是很适合这样做的吧?
    mkeith
        9
    mkeith  
       2014-03-06 19:57:11 +08:00   1
    mongo 你存数据的存一个过期时间,取数据的时候判断下,过期就废弃。
    apir8181
        10
    apir8181  
       2014-03-06 20:08:03 +08:00   1
    cassandra,不过不太算是传统意义上的kv。
    oldcai
        11
    oldcai  
    OP
    PRO
       2014-03-06 20:18:23 +08:00
    @apir8181 cassandra没有用过,请问有些什么特性可以适合这么使用的呢?
    binux
        12
    binux  
       2014-03-06 20:39:19 +08:00   1
    @oldcai 大部分都有冷热数据区分,如果即使这样还是不断换入换出,说明你内存不够了,再超时持久化也没用。
    wb14123
        13
    wb14123  
       2014-03-06 20:57:13 +08:00   1
    @9hills 两个内存型数据库放一起,估计不太好。
    api
        14
    api  
       2014-03-06 21:47:32 +08:00 via iPhone   1
    ccdjh
        15
    ccdjh  
       2014-03-06 21:49:09 +08:00   1
    @wb14123 一台vps放mongodb 其它vps跑例子和redis,

    然后就是@binux 说的 先从redis读,读不到再去读mongodb。

    我就是这样的。不知道和他是否一样的意思。
    oldcai
        16
    oldcai  
    OP
    PRO
       2014-03-06 22:16:22 +08:00
    @binux 我们使用的一个一个的对象基本上都是很小的内存单元,而系统以linux为例,swap似乎是以一页一页的单位来的,这样的处理方式,对于某些不常活动的进程的内存swap掉是有作用的,而对于活跃的程序就不能指望它了吧。
    @wb14123 mongodb不能算是一个内存型数据库吧。
    @api 在提问前就找过这个,它说:It is NOT a cache solution,窃以为是只负责持久,不负责内存里面缓存着。
    @ccdjh 当然,你说的这种方法是可行的,或者自己写文件,或者用其他数据库,不一定是mongodb,我想问问有没有现成的一个有这种功能的数据库。现在看来似乎是没有的。

    @livid 发现个小bug,大概是js里面的:当输入框填满的时候,再点一下“回复”箭头,新增的 @someone 这一行会出现在输入框下方不可见区域内。当然,再输入回车后会自动拉伸输入框。
    wb14123
        17
    wb14123  
       2014-03-06 23:32:53 +08:00   1
    @oldcai 但是mongodb是自动将热数据存到内存的,有多少可用内存就会吃多少内存。所以和redis放在一台机器上估计会有问题。@ccdjh 所说的放到不同的机器上应该是可以接受的。
    bakac
        18
    bakac  
       2014-03-07 03:38:46 +08:00   1
    redis+MYSQL redis 上设置TTL作为缓存是用, 如果读不到再从MYSQL上拉出来
    oldcai
        19
    oldcai  
    OP
    PRO
       2014-03-07 10:52:00 +08:00
    @binux
    @9hills
    @bakac
    感谢几位支招,但是我觉得这只是现阶段没有办法的办法。
    如果是靠数据库的本身机制来完成这种功能,而不是联合一个持久的一个内存的来用,会有其他的红利,比如写的时候也只用和内存打交道,等超时了会自动持久化。
    这种机制适合存一些即使丢失了也不可惜,但是最好别丢失的东西。
    比如文章阅读次数,页面缓存,以及可以通过其他已持久化的数据推断出来的数据,比如用户上次活动的时间。

    @wb14123 感觉不像是有多少内存就吃多少的样子,我一般都是使用默认配置,只是VZS使用量大,RSS还是不多的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3624 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 00:47 PVG 08:47 LAX 17:47 JFK 20:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86