2012-02-08 7 views
1

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を割り当てる価値は面倒ですか?

答えて

2

あなたが説明する方法で常にキーを構築する場合、allocate_idsは必要ありません。 にもが必要な場合にのみ、データストアで独自の自動インクリメントの数値IDを作成することができます。

はい、ほとんどの場合、フィールドとインデックスが少なくて済むので、外部ユニークID値を使用してキーを作成してください。

+0

また、Dave W. Smith氏によると、数値IDよりも柔軟性の高い「キー名」がチェックされています。 – dkamins

3

外部IDを文字列に変換してキー名として使用できないことはありますか?

+0

いいえ、利点はありますか? – arkanciscan

+0

はい。 'allocate_ids'にしなければならない余分な簿記(およびコードとデバッグ)からあなたを救い、あなたがそれらをどのように渡したかを追跡します。 –

関連する問題