在App Engine中避免不必要的大型ID

时间:2011-10-06 05:00:02

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

最近我们决定,如果我们的数据存储区实体的ID不是太大,它将使我们受益。最大的原因是,我们在URL中使用这些ID,我们希望保持良好和简短。

目前,作为一个例子,我们实体的ID增长如下:

id=2
id=2003
id=2004
id=2027
id=2028
id=5002
id=5204
id=6001
id=7534
id=8001
id=10192
id=11306
id=14306
id=16330
id=18306
id=20321
id=41312
id=79306
id=113308
id=113311
etc.

如您所见,有时增加数万。

现在,我们可以通过创建一个大到足以计算我们实体数量的分片计数器然后自己分配ID来应对所有这些麻烦,但如果数据存储区为我们分配密钥,我仍然会更喜欢它

有没有办法告诉数据存储区重新计算可用的ID,以便下次我存储一个实体时,它会得到最低的可用ID?在我们的例子中,它们不需要是顺序的。

更新

正如@ Amber建议的那样,我们可以将数字编码为base62以使它们更短(64位无符号int s最多11位)。

虽然这种方法并不太糟糕,但它有一些缺点。首先,我不确定它的用户体验有多好。其次,一些数字会与我们目前在URL中使用的其他字符串冲突。

举个例子:

/books/(\d+)(/book-name)?
/books/selection

ID为26086738530的图书会有网址'/ books / selection / book-name'和'/ books / selection',与我们的其他页面发生冲突。

1 个答案:

答案 0 :(得分:1)

我担心数据存储区中没有允许您控制自动ID创建的机制。

您估计在项目生命周期中有多少个物体?因为长ids现在似乎很麻烦,但无论如何当你在商店里有数以万计的物品时可能是必要的。

与base62一样,您可以通过不同的URL路由base62 ID。