有没有一种专门的 Nosql,只用来查询是否存在某个特定值的?

2019-09-18 15:46:50 +08:00
 kisshere

这种 Nosql 应该不叫“kv 库”了吧,应该叫做“v 库”了,因为不需要键值,只需要在千万级数据中查询某个特定值的存在,返回 bool 值即可,查询时间毫秒级

求推荐

2394 次点击
所在节点    程序员
23 条回复
ClarkAbe
2019-09-18 15:53:17 +08:00
这叫 k 库吧.....直接用一个 map 替代就行有这个键就 true 没有就.....
OakScript
2019-09-18 16:11:26 +08:00
布隆过滤器?
sadfQED2
2019-09-18 16:12:32 +08:00
Redis 装布隆过滤器扩展应该就是你想要的了
nicon
2019-09-18 16:13:27 +08:00
布隆过滤器
lihongjie0209
2019-09-18 17:31:53 +08:00
首先排除布隆过滤器, 布隆过滤器是一个概率型数据结构, 无法简单的使用 bool 作为返回值, 除非你只用它来确认数据不存在。
maemual
2019-09-18 17:33:47 +08:00
redis 存 kv,value 随意。。。。千万数量级不算多大,毫秒级不是问题
YUyu101
2019-09-18 19:48:43 +08:00
kv 本来就无所谓 v,v 又不直接存在结构里,只是个指针嘛。
luob
2019-09-18 20:01:28 +08:00
这应该叫 k 库不是 v 库……
直接存 k,v 全都为空就行了。
0x000007b
2019-09-18 21:59:29 +08:00
@lihongjie0209 为啥,虽然 bloom 有误判率但功能上不是正好能完美实现嘛
lihongjie0209
2019-09-18 22:01:54 +08:00
@0x000007b #9 `只需要在千万级数据中查询某个特定值的存在` > 无法做到, 只能查询某个特定的值不存在
ztcaoll222
2019-09-18 22:04:41 +08:00
@lihongjie0209 #10 能接受少量的误判率不就能证明存在吗
lihongjie0209
2019-09-18 22:07:53 +08:00
@ztcaoll222 #11 只能证明“可能”存在
ztcaoll222
2019-09-18 22:08:32 +08:00
@lihongjie0209 #12 对啊, 我不是说了接受误判率吗
lihongjie0209
2019-09-18 22:14:50 +08:00
@ztcaoll222 #13 存在是一个绝对的概念, 就是 100%, 没有一种 “存在” 的定义是“在一定概率下 100%”。
ztcaoll222
2019-09-18 22:21:01 +08:00
@lihongjie0209 #14 ? 你在说什么, "可能存在"这个词是错的啰 ?
这么纠结于存在这个定义, 不如问问楼主能否接受使用布隆过滤器这个方案
dusu
2019-09-18 22:41:49 +08:00
能接受误差 Redis 的 HyperLogLog 可以解惑。存 2^64 个元素仅需 12K。

不能接受误差 Redis 的 bitmap 也是不错的选择。

前提是你输入的数据是整型
fluorinedog
2019-09-19 00:09:36 +08:00
@dusu 什么鬼,hll 是用来计算 distinct value 的估计数量的,跟这需求不沾边。

bloom filter 平均一个元素占用几个 bit,不过确实是概率算法。
如果数据有范围,比如 N 个数据,出现在[0, 10N]区间里,其实 bitmap 就不错。
要保证精确的话,还是得 bloom filter 初筛,然后 kv 表查询。
dusu
2019-09-19 00:15:44 +08:00
@fluorinedog hll 要统计的时候直接把整型往里丢 数据涨了就代表集合里没有 没涨不就代表集合里没有么?

当然这不是原子操作,高并发下肯定有问题,主要是楼主也没有说要多大并发,只是要求毫秒级。
aguesuka
2019-09-19 09:23:41 +08:00
千万级的数据用 rbtree 也是毫秒级的吧。只要内存够大
realpg
2019-09-19 18:20:02 +08:00
直接 kv 库去 get 那个 key 不就好了

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

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

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

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

© 2021 V2EX