V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pyKun
V2EX  ›  程序员

千万级的value怎么保持value值的唯一性

  •  
  •   pyKun · 2013-05-25 10:38:10 +08:00 · 5107 次点击
    这是一个创建于 4206 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1000W到5000W,value的值要保持一致性
    如果要用数据库什么的,其实value的值是有存的地方了,所以要另找一个数据库来保证这个唯一性应该会有轻便的方法,所以求问
    跪求推荐方案
    16 条回复    1970-01-01 08:00:00 +08:00
    xhat
        1
    xhat  
       2013-05-25 11:14:52 +08:00   ❤️ 1
    我当时3kw采用的方法是对value进行hash,把hash值写入memcache。每次有新数据,hash后在memcache里面验证唯一性。
    DaniloSam
        2
    DaniloSam  
       2013-05-25 11:20:13 +08:00
    第一反应是DOM属性,想着千万级的,妈的页面得多大

    后来反应过来是我二逼了
    ipconfiger
        3
    ipconfiger  
       2013-05-25 11:24:28 +08:00
    数据库不是有唯一性索引的么?
    bitsmix
        4
    bitsmix  
       2013-05-25 11:25:32 +08:00 via iPhone
    @DaniloSam 你这个小朋友。。
    pyKun
        5
    pyKun  
    OP
       2013-05-25 12:08:16 +08:00   ❤️ 1
    @xhat
    我也想到过memcached,但是memcached不是高可用的,挂了一个node,那个node上的memchached对应的数据怎么被验证唯一性呢?
    @ipconfiger
    已经存了,但不在一个表里,如果直接读表,脚要遍历好几个表,或者再做一个数据库,二者都不是我想要的
    egen
        6
    egen  
       2013-05-25 12:30:59 +08:00   ❤️ 1
    @pyKun 可以看看 mongodb 的 object id 生成算法,感觉可以满足你的要求
    VYSE
        7
    VYSE  
       2013-05-25 13:39:03 +08:00   ❤️ 1
    把所有VALUE DUPLICATE到ISAM引擎中,千万级耗费空间很少,而且专门一个线程插入效率非常高
    likuku
        8
    likuku  
       2013-05-25 13:48:40 +08:00   ❤️ 1
    @pyKun memcached 有日本人作的双向同步补丁,可以弄多个机器跑memcached保持多个读写同步,挂掉一个,重开一个会自动同步。
    Mutoo
        9
    Mutoo  
       2013-05-25 14:51:35 +08:00   ❤️ 3
    Bloom Filter 可以非常快[O(1)]进行唯一性检查,但是由于hash的缺陷无法做到100%

    http://www.cnblogs.com/heaad/archive/2011/01/02/1924195.html
    Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法。通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合。
    xhat
        10
    xhat  
       2013-05-25 20:15:36 +08:00   ❤️ 1
    生产用的话直接用redis即可。若没条件可以用其他kv数据库替代

    @likuku 提到的方法简直对效率要求到了极致。。

    @mutoo bloom filter效率确实高,但牺牲了唯一性,有小概率重复,应该不适用楼主的场景
    pyKun
        11
    pyKun  
    OP
       2013-05-25 22:18:48 +08:00
    @xhat
    我的数据已经在数据库存了一份了
    用redis岂不是要把需要唯一性的数据再存一份么?
    pyKun
        12
    pyKun  
    OP
       2013-05-25 22:24:59 +08:00
    @xhat
    @Mutoo
    @likuku
    @VYSE
    我今天换了一个思路,牺牲很小的存储空间+一个合适的算法去搞定
    比如每生成一个value,加到一个文件去,给这个文件求特征值
    这样这个文件保证高可用是容易多了
    nocturnal
        13
    nocturnal  
       2013-05-26 17:56:45 +08:00 via Android
    lunny
        14
    lunny  
       2013-05-26 19:48:53 +08:00
    leveldb
    binge
        15
    binge  
       2013-05-26 19:55:43 +08:00
    很感兴趣通常会用在什么情况的?求指教:)
    pyKun
        16
    pyKun  
    OP
       2013-05-26 22:14:16 +08:00
    @binge
    swift兼容所有s3 api
    在swift里container的名字已经存在数据库了
    s3类似container的bucket是region内唯一的,也就是在swift里所有表里的container的value要唯一
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5456 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:53 · PVG 14:53 · LAX 22:53 · JFK 01:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.