【问题标题】:Find the correct data structure找到正确的数据结构
【发布时间】: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”数据结构。这完全符合我的需求!

标签: database data-structures


【解决方案1】:

我最终选择了使用 Redis 的 Set 数据结构。它不能保证同一属性不会被 2 个不同的客户端同时读取。但它允许随机查询,同时维护我的值的属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多