ホームページ > バックエンド開発 > Golang > Google App Engine データストア クエリを効果的にフィルタリングし、一貫した結果を保証するにはどうすればよいですか?

Google App Engine データストア クエリを効果的にフィルタリングし、一貫した結果を保証するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-15 07:19:09
オリジナル
291 人が閲覧しました

How to Effectively Filter Google App Engine Datastore Queries and Ensure Consistent Results?

GAE クエリをフィルタリングする方法

datastore.NewQuery() を使用して GAE クエリをフィルタリングしようとする場合、結果の派生クエリを元の q に割り当てることが重要です。変数。これにより、指定されたフィルターがクエリに確実に適用されます。この手順を怠ると、不正確な結果や空のクエリ結果が発生する可能性があります。

// Incorrect approach:
q := datastore.NewQuery("employee")
q.Filter("Name =", "Andrew W") // Filter not applied

// Correct approach:
q := datastore.NewQuery("employee").Filter("Name =", "Andrew W")
ログイン後にコピー

さらに、提供されたコードでは、結果が欠落する問題は、高レプリケーション データストアの特性である結果整合性が原因である可能性があります。開発SDKでシミュレートします。これを解決するには、クエリの前に短い time.Sleep() を導入して、整合性が確立する時間を確保します。

time.Sleep(time.Second)

var e2 Employee
q := datastore.NewQuery("employee").Filter("Name =", "Andrew W")
// Rest of your code...
ログイン後にコピー

あるいは、aetest.NewContext() でコンテキストを作成し、設定することで強力な整合性を強制することもできます。 StronglyConsistentDatastore を true に設定します。ただし、これはテスト目的でのみ推奨されており、運用環境では使用できません。

結果整合性を持たない強力な整合性を得るには、祖先キーを使用できます。このキーは架空のものにすることができ、エンティティをエンティティ グループにグループ化するためのメカニズムとしてのみ機能します。このグループに対する祖先クエリでは、強い一貫性のある結果が得られます。

// Create a fictional ancestor key
ancestorKey := datastore.NameKey("EmployeeGroup", "", nil)

// Create a key with the ancestor key
key := datastore.NameKey("Employee", "Andrew W", ancestorKey)

// Create an employee entity with the key
employee := &Employee{
    Name: "Andrew W",
    // Other fields...
}

// Put the entity with the ancestor key
_, err := datastore.Put(c, key, employee)
if err != nil {
    // Handle error
}

// Query for entities with the ancestor key
q := datastore.NewQuery("Employee").Ancestor(ancestorKey)
results, err := q.GetAll(c, &[]Employee{})
if err != nil {
    // Handle error
}
ログイン後にコピー

以上がGoogle App Engine データストア クエリを効果的にフィルタリングし、一貫した結果を保証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート