【发布时间】:2018-07-27 10:09:45
【问题描述】:
我需要存储大约 1000 万个字符串,每个字符串大约 500 个字符。 我在 AWS 上,所以可以使用可用的结构。
我的用例如下:
- 从多个客户端读取/写入元素
- 存储独特的元素
- 检查它是否包含特定元素
或者:
- 获取随机元素
- 删除特定元素 (这样我会从第一个结构中删除它,并将其放入第二个相同类型的结构中)
或
- 维护一个布尔属性“已处理”
- 获取满足该属性的随机元素
起初,我想使用队列或类似的东西,因为新字符串不断出现,但队列不允许唯一性检查和随机访问。
我检查过的大多数数据库都不满足“获取随机元素”功能,而且对于我的用例来说似乎有点矫枉过正,因为我只需要一两列。
我也一直在考虑通过节点部署服务并使用 javascript 数组对其进行管理。但是我不确定“检查它是否包含特定元素”功能,数组中有这么多元素。
【问题讨论】:
-
"不满足"获取随机元素"" - 使用 Postgres 你可以做一个
select * from the_table tablesample (1) limit 1 -
谈到您的第一个用例,您的要求是否允许进行较小的近似?或者你能承受误报吗?您可以结帐HyperLogLog data structure of Redis over here
-
@a_horse_with_no_name 谢谢,我不知道 postgre 的这个功能!
-
@DhruvilsinhVaghela 根据我的阅读,HyperLogLog 是用来计算聚合的,对吧?我对检索特定元素(即特定字符串以了解它是否存在或知道它的状态)感兴趣,但不计算任何内容。
-
@DhruvilsinhVaghela 谢谢,我从来没有想过要使用 Redis,最后还是使用了 Redis 中的“set”数据结构。这完全符合我的需求!