【问题标题】:Suitable checksum for uniquely identifying a series of numbers in Postgres 9 and Java适合在 Postgres 9 和 Java 中唯一标识一系列数字的校验和
【发布时间】:2023-03-31 13:20:02
【问题描述】:

给定一系列数字(通常少于 20 个数值在 100 和 1000 之间但不一定)

例如 100、343、234、123、456、345、80、99、100

什么是好的校验和,例如最小化不同系列的不同数字的风险,(不同的顺序很重要,因为不同的数字)给出相同的校验和。

寻找在 PostgreSQL 9 和 Java 中可用的校验和

【问题讨论】:

    标签: java postgresql checksum


    【解决方案1】:

    我建议转换为分隔字符串,然后在 Postgres 中使用 MD5(),在 Java 中使用 java.security.MessageDigest / getInstance("MD5")。

    【讨论】:

      【解决方案2】:

      我认为数组是这里最简单的解决方案:

      db=# select '{2,4,5}'::int[] = '{2,4,5}'::int[];
       ?column?
      ----------
       t
      (1 row)
      
      db=# select '{2,4,5}'::int[] = '{2,5,4}'::int[];
       ?column?
      ----------
       f
      (1 row)
      

      虽然我认为您在这里不需要校验和,因为您可以如上所示直接操作整数数组 - 数组是一个值。但如果您需要哈希,您当然可以将其转换为文本并使用 md5:

      db=# select md5('{2,4,5}'::int[]::text) = md5('{2,5,4}'::int[]::text);
       ?column?
      ----------
       f
      (1 row)
      

      但又一次。如果我理解正确,您需要哈希,以便您可以比较系列。 Postgres 允许您在没有散列的情况下执行此操作 - 使用本机数据类型 integer[] - 整数数组,显然数组中的顺序很重要......

      【讨论】:

      • 但是校验和在哪里,调用应用程序需要传递一个值,该值可用于查找该系列的行
      • 对不起,我的问题不完整,哈希的想法是用户将创建他们数据的哈希(不在数据库中),然后使用它调用一个 Web 服务来查找数据库中的匹配数据哈希作为键。即我需要一个可以通过网络服务轻松传输的值
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多