代码之家  ›  专栏  ›  技术社区  ›  DevMike

什么样的哈希算法可以安全地用于哈希非常长的字符串,以便为数据库表生成唯一的键?

  •  0
  • DevMike  · 技术社区  · 7 年前

    我需要强制数据库表中的条目包含唯一的关键字集,否则应该拒绝该条目。顺序并不重要,只是每一组关键字都必须是唯一的。例如:

    以数据库中现有的示例记录为例:
    记录
    --满足
    --关键词:[‘苹果’、‘梨’、‘橙’]

    一个关键字数组为[apple]、[pear]、[orange]的新记录 否认
    一个关键字数组为[apple]、[orange]、[pear]的新记录 否认
    一个关键字数组为[apple]、[pear]、[orange]、[grape]的新记录 认可的

    作为一种解决方案,有人建议我对关键字集(按词汇顺序)进行散列,并将该散列用作数据库条目的唯一键。

    很好的建议,但有两个问题: 在这种情况下,我如何处理区分大小写的问题? 如果我决定使用,比如说SHA-1,来散列,相信碰撞已经接近不可能了,这是现实的吗 大量关键字 (最多30个)并使用该散列作为数据库条目的唯一密钥,而无需检查副本?

    我们使用firebase作为后端,谷歌对每个文档的读取收取费用,因此,在插入之前必须检查重复项是不可接受的,也是不可扩展的解决方案,因为如果我们必须在每次插入记录之前进行检查(如果我的表包含数百万条记录),那么这样的查询将花费我们一大笔钱。

    1 回复  |  直到 7 年前
        1
  •  0
  •   user149341 user149341    7 年前

    在插入之前必须检查重复项是不可接受的,也是不可扩展的解决方案,因为如果我的表包含数百万条记录,这样的查询将花费大量资金。

    你的担心放错地方了。数据库擅长使用索引来查找数据——数百万条记录甚至不是一个特别大的数字。

    将关键字列表转换为标准格式(例如,按关键字的字母顺序排列),然后使用不会出现在关键字中的分隔符(如逗号)连接这些单词,并将结果用作数据库中的唯一关键字。你不需要使用散列。