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 ?

Comment filtrer efficacement les requêtes de la banque de données Google App Engine et garantir des résultats cohérents ?

Barbara Streisand
Libérer: 2024-12-15 07:19:09
original
292 Les gens l'ont consulté

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

Comment filtrer une requête GAE

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")
Copier après la connexion

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...
Copier après la connexion

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal