2

我已经四处寻找这个问题的答案,但没有找到任何关于钱的东西。我真的很想听听人们的想法。开始:

在 Google AppEngine 中,假设我有许多 User 对象,每个对象都可以有许多 Photo 对象。User 对象需要是其各自 Photo 对象的父对象。

但我也希望能够为每张照片提供漂亮的短网址。我打算通过对每张照片的自动生成的 ID 属性进行 Base64 编码来生成这些,但我意识到我不能这样做,因为 AppEngine 生成的 ID 不能保证在实体组之间是唯一的(即对于具有不同父级的实体)。因此,可以想象作为一个用户的孩子的照片与作为不同用户的孩子的照片具有相同的 ID。

这让我陷入困境。我可以:

  1. 尝试想出我自己独特的 ID 生成器并使用它

  2. 失去父->子层次结构,因此 ID 将是唯一的(根本不热衷于此)

  3. 建议一些超级聪明的选项作为这个问题的答案

我真的希望选择3。

任何有关处理此问题的最佳方法的想法或想法都会很棒。

提前致谢。

编辑

就在发布后,我有了将迷你 URL 缩短服务整合到应用程序中的想法。我只需要一个没有父级的模型和一个指向我想要链接的照片的“键”属性。然后我可以对这个实体的 ID 进行 Base64 编码,我就完成了。你怎么看?

4

2 回答 2

2

为什么不将父用户的 ID 与相关照片的 ID 一起编码呢?您可以将其编码为两个整数 -/123/2或您希望的任何其他格式,例如您建议的 base64。如果您让用户选择某种唯一名称并将其用作用户对象上的键名,那么从 UI 的角度来看,这也更有用,因为它为您提供了类似的 URL/photos/nick/123

于 2011-06-24T13:23:26.003 回答
0

如果你能摆脱第 2 个想法 - 你就完成了。然后你得到了你的密钥——“URL 缩短服务”是一个 3-4 行的 servlet,你就完成了。

但!

我你必须付出代价 - 没有交易给你。

因为 AppEngine 仅支持实体组内的事务。这实际上回击了您后来基于另一个带有密钥的模型的“URL缩短服务”的想法......

问题是您将无法在管理“用户照片”的同一事务中管理它,因此您最终可能会得到错误的 URL。

如果您必须进行交易 - 从父键构建一个 url。如果不是 - 使用没有父->子层次结构的直接唯一键。

于 2011-06-25T01:39:09.390 回答