【问题标题】:Generating String ObjectId with GAE使用 GAE 生成字符串 ObjectId
【发布时间】:2015-03-29 16:15:57
【问题描述】:

在使用 Java 的 Google App Engine (GAE) 等分布式环境中不会发生冲突的 String 表示生成 ObjectId 的安全方法是什么?

【问题讨论】:

  • 自动生成的ID有什么问题吗?那些将是最安全的......如果你正在尝试实现一个 url 缩短器 - 也许你可以从这里得到一些想法 stackoverflow.com/questions/742013/how-to-code-a-url-shortener 或做一个 md5(url),可能使用更短的哈希算法,如 crc32 (但最终会发生碰撞)。

标签: java database google-app-engine google-cloud-datastore


【解决方案1】:

使用 java UUID 怎么样?您可以通过获取新生成的 ID 来快速检查碰撞。

【讨论】:

  • 从技术上讲,这可能会在分布式、最终一致的环境(如数据存储区)中出现竞争条件(概率很低,但是...)。
  • @AlexMartelli,它只是在全局查询中最终保持一致。查找保证是高度一致的,就像我们对“插入”之类的处理一样;也就是说,两个不同的进程永远不会遇到使用 INSERT 的竞争条件,这会导致使用相同的密钥成功。 UUID 本质上也应该防止您必须处理 INSERT 冲突,尽管无论如何都要处理诸如损坏的 PRNG 等事件。
【解决方案2】:

在某些情况下,您是否需要实际的键是一个字符串,还是只需要一个字符串表示?这个答案可能与后一种情况有关:How to convert an integer to the shortest url-safe string in Python?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 2022-10-21
    • 2021-07-08
    相关资源
    最近更新 更多