【问题标题】:Keep order in a key-value use case with additions and deletions通过添加和删除保持键值用例的顺序
【发布时间】:2019-04-25 21:47:50
【问题描述】:

我从需要存储的 API 接收到大的 4 位哈希列表。 该列表必须始终按字母数字顺序排列。

事情是这样发展的:

  • 我从 API 获得了完整的哈希列表(大约 1,000,000)。我存储了这个列表。
  • 我会定期请求 API 以获取列表中添加和删除的列表。

现在我将哈希列表与“订单”行存储在表中:

  • 0 - 6717
  • 1 - 7fcd
  • 2 - 88c6
  • 3 - 9e63
  • 4 - dcb0
  • 5 - fb44

现在假设我收到了删除:

  • 1
  • 4

还有补充:

  • 7bd7
  • 0e33

我需要删除 14 行:

  • 0 - 6717

  • 2 - 88c6

  • 3 - 9e63

  • 5 - fb44

我需要将添加添加到列表 AND 以重建roder 行以保持字母数字顺序,以便能够再次这样做:

  • 0 - 0e33
  • 1 - 6717
  • 2 - 7bd7
  • 3 - 88c6
  • 4 - 9e63
  • 5 - fb44

我需要这个用于 PHP Symfony 应用程序,我已经用 MySQL 实现了这个,但是创建完整列表和重建 id 行非常慢...

由于我有一个 key->value 数据集,Redis 似乎是一个不错的选择,但没有针对这些键的批量重命名功能。

我也在考虑 MongoDB 并为每个哈希创建一个文档,但我不太确定。

你会怎么做?谢谢

【问题讨论】:

    标签: database database-design key-value


    【解决方案1】:

    在关系数据模型(YesSQL 世界)中,表是一组无序行。因此,在一般情况下,存储值的顺序是“按设计”不可预测的(我不会在这里说聚集索引)。 只有在使用ORDER BY 子句时才能保证有序列表

    SELECT key, value FROM my_store WHERE ... ORDER BY key
    

    出于性能目的,您需要在受影响的列上设置索引/主键/唯一约束(取决于 DMBS 和数据库设计)。 1M 的行是一个相对较小的数量,不应该产生一些性能问题。当删除和插入频繁时,还要注意数据/索引碎片。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多