我正在构建一个使用OAuth从外部API获取用户数据的App Engine应用程序。用户由外部API分配一个数字ID。我正在考虑给我的用户模型一个ID字段,它将存储外部用户ID的副本。然后我想起DataStore记录可以通过手动指定的数字ID给出键。如果我已经有一个唯一的ID,我应该使用它作为DataStore键吗?
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?似乎我应该只需要执行一次,但是如果每执行一次我的应用程序实例启动会影响性能?如果我从来没有把用户实体没有手动构造的密钥,我还需要allocate_ids吗?
第二个问题是,我疯了吗?这样做的常规方式是不是更麻烦
user = User.all().filter('external_id =', external_id)
是否值得分配ID,以避免数据存储区查询的麻烦?
另外 - 正如Dave W. Smith所说的那样,请查看比数字ID更灵活的“关键名称”。 – dkamins 2012-02-08 02:38:41