首頁 >後端開發 >Golang >如何有效過濾 Google App Engine 資料儲存查詢並確保結果一致?

如何有效過濾 Google App Engine 資料儲存查詢並確保結果一致?

Barbara Streisand
Barbara Streisand原創
2024-12-15 07:19:09286瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn