Maison >développement back-end >Golang >Comment filtrer efficacement les requêtes de la banque de données Google App Engine et garantir des résultats cohérents ?
Lorsque vous tentez de filtrer une requête GAE à l'aide de datastore.NewQuery(), il est essentiel d'attribuer la requête dérivée résultante au q d'origine variable. Cela garantit que le filtre spécifié est appliqué à la requête. La négligence dans cette étape peut conduire à des résultats incorrects ou à des résultats de requête vides.
// Incorrect approach: q := datastore.NewQuery("employee") q.Filter("Name =", "Andrew W") // Filter not applied // Correct approach: q := datastore.NewQuery("employee").Filter("Name =", "Andrew W")
De plus, dans le code fourni, le problème des résultats manquants pourrait être attribué à une éventuelle cohérence, une caractéristique de la banque de données à réplication élevée qui simule dans le SDK de développement. Pour surmonter ce problème, introduisez un bref time.Sleep() avant d'interroger, ce qui laisse le temps à la cohérence de s'installer.
time.Sleep(time.Second) var e2 Employee q := datastore.NewQuery("employee").Filter("Name =", "Andrew W") // Rest of your code...
Alternativement, on peut imposer une forte cohérence en créant un contexte avec aetest.NewContext() et en définissant StronglyConsistentDatastore sur true. Cependant, cela est recommandé à des fins de test uniquement et n'est pas disponible en production.
Pour une forte cohérence sans cohérence éventuelle, une clé ancêtre peut être utilisée. Cette clé peut être fictive, servant uniquement de mécanisme pour regrouper des entités dans un groupe d'entités. Les requêtes d'ancêtres sur ce groupe donneront des résultats fortement cohérents.
// 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 }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!