我四处寻找这个问题的答案,但没有找到任何关于钱的东西。我真的很想听听人们的想法。如下:
在GoogleAppEngine中,假设我有许多User对象,每个对象都可以有许多Photo对象。用户对象需要是其各自照片对象的父对象。
但我也希望能够有漂亮的短网址为每一张照片。我打算通过Base64编码每个照片的自动生成的ID属性来生成这些照片,但我意识到我无法做到这一点,因为AppEngine生成的ID不能保证在实体组中是唯一的(即,对于具有不同父级的实体)。因此,作为一个用户的孩子的照片可能与作为另一个用户孩子的照片具有相同的ID。
这让我很为难。我可以:
-
试着想出我自己的唯一ID生成器并使用
-
失去父->子层次结构,因此ID将是唯一的(根本不热衷于此)
-
一些超级聪明的选择建议作为这个问题的答案
我真的很希望有第三种选择。
任何关于处理这一问题的最佳方法的想法或想法都将是美妙的。
提前谢谢。
编辑
刚发布后,我就有了在应用程序中加入一个迷你URL缩短服务的想法。我只需要一个没有父级的模型和一个指向我想要链接的照片的"Key"属性。然后我可以对这个实体的Id进行Base64编码,我就完成了。你觉得怎么样?
为什么不将父用户的ID与相关照片的ID一起编码?您可以将其编码为两个整数——/123/2
,也可以使用您希望的任何其他格式,例如您建议的base64。如果您让用户选择某种类型的唯一名称,并将其用作用户对象上的密钥名称,那么从UI的角度来看,这也更有用,因为它会为您提供类似/photos/nick/123
的URL
如果你能逃脱第二个想法的惩罚,你就完了。当您得到密钥时,"URL缩短服务"是一个由3-4行组成的servlet,您就完成了。
但是!
我你得付出代价——没有交易。
因为AppEngine只支持实体组内部的事务。这实际上是对您后来基于另一个带有密钥的模型的"URL缩短服务"的想法的回击。。。
问题是,你将无法在管理"用户照片"的同一事务中管理它,因此你可能会使用错误的URL。
如果您必须有事务,请使用父密钥构建一个url。如果不是-使用没有父层次结构的直接唯一键->子层次结构。