如果我已经有一个唯一的ID,我应该将它用作DataStore密钥吗?

时间:2012-02-08 02:04:33

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

我正在构建一个App Engine应用,它使用OAuth从外部API获取用户的数据。通过外部API为用户分配数字id。我正在考虑给我的用户模型一个id字段,该字段将存储外部用户ID的副本。然后我记得DataStore记录可以通过手动分配的数字ID给出密钥。

external_id = int(api_response['user']['id'])
handmade_key = db.Key.from_path('User', external_id)

通过在创建记录之前手动构建密钥,我可以单独使用此ID来检索记录。

user = User.get_by_id(external_id)

但是,据我所知,我需要分配API可能使用的整个ID范围。

allocate_ids(User, 10000)

我的第一个问题是;什么时候应该调用allocate_ids?好像我应该只执行一次,但如果每次我的应用程序的实例被启动时它会执行会影响性能吗?如果我从未在没有手动构造Key的情况下放置用户实体,我还需要allocate_ids吗?

第二个问题是;我生气了!?按常规方式做这件事并不会太麻烦

user = User.all().filter('external_id =', external_id)

分配id以避免DataStore查询是否值得?

2 个答案:

答案 0 :(得分:3)

是否存在阻止您将外部ID转换为字符串并将其用作键名的任何内容?

答案 1 :(得分:2)

如果您始终以您描述的方式构建密钥,则不需要allocate_ids。只有在您希望允许数据存储区创建自己的自动递增数字ID时才有必要。

是的,你几乎总是用更少的字段和索引来改善,所以使用外部唯一ID值创建Key,正如你所描述的那样。