App Engine中实体组的唯一短标识符

时间:2011-06-24 11:59:08

标签: google-app-engine google-cloud-datastore entity-groups

我一直在寻找这个问题的答案,但没有找到任何相关的钱。我真的很想听听别人的想法。这是:

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

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

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

  1. 尝试使用我自己的唯一ID生成器并使用

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

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

  4. 我真的希望选择3。

    任何关于解决这个问题的最佳方法的想法或想法都会很棒。

    提前致谢。

    修改

    发布后,我想到将迷你URL缩短服务纳入应用程序。我只需要一个没有父模型和一个'Key'属性的模型,它会指向我想链接到的Photo。然后我可以Base64编码这个实体的Id,我已经完成了。你觉得怎么样?

2 个答案:

答案 0 :(得分:2)

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

这样的网址

答案 1 :(得分:0)

如果你可以逃脱2号创意 - 你就完成了。然后你得到了你的密钥 - “URL缩短服务”是3-4行的单个servlet,你就完成了。

但是!

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

由于AppEngine仅支持实体组内的事务。这实际上反映了你后来的“URL缩短服务”的想法,基于另一个带有密钥的模型......

问题是您无法在管理“用户照片”的同一笔交易中管理它,因此您最终可能会收到错误的网址。

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