【问题标题】:AppEngine - Weird ID assignment in AppEngine HR DataStore [duplicate]AppEngine - AppEngine HR DataStore 中的奇怪 ID 分配 [重复]
【发布时间】:2011-09-21 08:53:25
【问题描述】:

可能重复:
How to implement “autoincrement” on Google AppEngine

我在 AppEngine 中有一个 Python 应用程序。我正在使用高复制数据存储。

这是我的问题:

我有一个在没有父母的情况下保存的实体(为简单起见,称为 Person),它是 AppEngine 术语中的根实体。

我在保存实体之前没有设置 key_name,因为我想要 DataStore 分配的数字 ID。一些代码:

p = Person(name='Juan Roman Riquelme')
p.put()
p.key().id() # the numeric ID

问题是 ID 不连续。每次我更新我的应用程序(appcfg.py update .)时,ids 都会在接下来的数千个中开始。我的意思是,我第一次更新我的应用程序时,ID 为 1、2、3 等。下一次是:1001,1002,1003等。第三次:2001,2002等。

发生了什么事?我应该怎么做才能让它们保持连续?

谢谢!

【问题讨论】:

  • 看看this的问题。
  • 谢谢凯文。真的很有用。
  • 这不是重复的!我讨厌这些家伙。我不是在问如何实现自动增量我不关心如何实现自动增量。我想知道如何在 AppEngine Administration 中解决这个问题。你喜欢关闭事物只是为了感觉自己很重要?
  • 您在询问如何创建始终递增的 ID。如果这与自动增量不同,您必须解释如何。
  • @Nick 我正在寻找某种方法来“修复”“数据存储间隔步骤”。实际上 AutoIncrement 对我很有用,但对于其他事情。也许我没有正确解释自己。我的英语不是那么好。经过一些研究,我发现不可能让 DataStore 不执行那 1000 个 id 步骤。感谢您的帮助尼克。

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


【解决方案1】:

为什么需要它们是连续的?

App Engine 数据存储区不会将 ID 分配为连续的。

如果您想要连续的 ID,您必须自己分配 ID。不要忘记使用 allocate_id_range (http://code.google.com/appengine/docs/python/datastore/functions.html),这样应用引擎就不会自动分配已经存在的 ID。

【讨论】:

  • 我需要它们连续。我会看看那个。谢谢!
  • @santiagobasulto 为什么需要它们连续?实际上很少有这种情况,尝试这样做本质上是不可扩展的——如果你尝试的话,你会让自己陷入一团糟的问题。
  • @尼克。是的,你是对的,尼克。我正在做一个 URLShortener,它可以将 id 映射到字母表(大约 59 个字符)。最好让 id 连续,以免浪费“字符组合”。我正在考虑其他方法来做到这一点。我只是以 MySQL 的方式思考。我现在在云端!感谢您的关注。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多