【问题标题】:Composite key with EmbeddedId vs calculated hash id with sha256 on hibernate spring boot and postgresql在休眠 Spring Boot 和 postgresql 上具有 EmbeddedId 的复合键与使用 sha256 计算的哈希 id
【发布时间】:2021-09-04 22:04:22
【问题描述】:

我在 postgresql 中使用 java spring boot 和 hibernate。我需要一个复合键(embeddedId),因为一个 id 是由 3 个其他 ID 组成的。通过 sha-256 计算单个 id 还是为此实体使用复合键更好?我需要最好的性能,我认为在单个键上的查找比在 3 id 上的 id 上查找要快。 sha-256计算的结果是否可重复(spring hashcode取决于执行实例)?

谢谢

【问题讨论】:

    标签: spring-boot hibernate hash sha256 composite-key


    【解决方案1】:

    我不知道这 3 列有哪些数据类型,但如果它们是整数或长整数,那么您将只有 32 * 3 = 96 或 64 * 3 = 192 位来存储和比较查找,这通常比256 位。除此之外,理论上您可以对不同的值进行哈希冲突,因此哈希不一定是唯一的。有文章和帖子表明 SHA-256 非常独特,但如果这真的很关键,我不会打赌。

    【讨论】:

    • 复合键的3个ID是3个UUID或String(来自UUID)。数据库的表应该存储大约 2000 万行。所以我认为碰撞概率应该很低。重点是尽快找到实体。
    • 在这种情况下,存储 SHA-256 会更小,但就像我写的那样,理论上存在冲突的可能性。如果您的查询涉及通过这 3 个 UUID 查找条目,则使用 SHA-256 而不是 3 个 UUID 可能更快。但也许在 256 位和 384 位这些尺寸上并没有太大区别,所以如果你想确定的话,我会对此进行基准测试。
    猜你喜欢
    • 2014-01-14
    • 2014-02-04
    • 2014-03-27
    • 1970-01-01
    • 2021-11-25
    • 2012-03-28
    • 2016-08-03
    • 2013-05-12
    • 2019-03-11
    相关资源
    最近更新 更多