OAuthを使用して外部APIからユーザーのデータを取得するApp Engineアプリケーションを構築しています。ユーザーには、外部APIによって数値IDが割り当てられます。 Userモデルに外部ユーザIDのコピーを格納するidフィールドを与えることを検討していました。次に、データストアレコードに手動で割り当てられた数値IDを持つキーを与えることができることを思い出しました。データストアのキーとして使用する必要がある場合は、すでに一意の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を使用せずにUserエンティティを置かない場合、私はまだallocate_idsを必要としますか?
2番目の質問は次のとおりです。私は怒っていますか?それを通常の方法
はるかに面倒ではありませんuser = User.all().filter('external_id =', external_id)
を行うと、そのデータストアクエリを避けるためにIDを割り当てる価値は面倒ですか?
また、Dave W. Smith氏によると、数値IDよりも柔軟性の高い「キー名」がチェックされています。 – dkamins