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

2013-05-25 10:38:10 +08:00
 pyKun
1000W到5000W,value的值要保持一致性
如果要用数据库什么的,其实value的值是有存的地方了,所以要另找一个数据库来保证这个唯一性应该会有轻便的方法,所以求问
跪求推荐方案
4958 次点击
所在节点    程序员
16 条回复
xhat
2013-05-25 11:14:52 +08:00
我当时3kw采用的方法是对value进行hash,把hash值写入memcache。每次有新数据,hash后在memcache里面验证唯一性。
DaniloSam
2013-05-25 11:20:13 +08:00
第一反应是DOM属性,想着千万级的,妈的页面得多大

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

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

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

@mutoo bloom filter效率确实高,但牺牲了唯一性,有小概率重复,应该不适用楼主的场景
pyKun
2013-05-25 22:18:48 +08:00
@xhat
我的数据已经在数据库存了一份了
用redis岂不是要把需要唯一性的数据再存一份么?
pyKun
2013-05-25 22:24:59 +08:00
@xhat
@Mutoo
@likuku
@VYSE
我今天换了一个思路,牺牲很小的存储空间+一个合适的算法去搞定
比如每生成一个value,加到一个文件去,给这个文件求特征值
这样这个文件保证高可用是容易多了
nocturnal
2013-05-26 17:56:45 +08:00
lunny
2013-05-26 19:48:53 +08:00
leveldb
binge
2013-05-26 19:55:43 +08:00
很感兴趣通常会用在什么情况的?求指教:)
pyKun
2013-05-26 22:14:16 +08:00
@binge
swift兼容所有s3 api
在swift里container的名字已经存在数据库了
s3类似container的bucket是region内唯一的,也就是在swift里所有表里的container的value要唯一

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

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

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

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

© 2021 V2EX