我正在构建一个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查询是否值得?
答案 0 :(得分:3)
是否存在阻止您将外部ID转换为字符串并将其用作键名的任何内容?
答案 1 :(得分:2)
如果您始终以您描述的方式构建密钥,则不需要allocate_ids
。只有在您希望还允许数据存储区创建自己的自动递增数字ID时才有必要。
是的,你几乎总是用更少的字段和索引来改善,所以使用外部唯一ID值创建Key,正如你所描述的那样。