Dans ma banque de données App Engine, j'ai un type d'entité pouvant contenir un grand nombre d'entités, chacune ayant la propriété 'customer_id'. Par exemple, disons qu'un customer_id donné a 10 000 entités et qu'il y a 50 000 customer_ids.Filtre efficacement un grand nombre d'entités de banque de données avec un grand nombre de valeurs de propriété
J'essaye de filtrer ceci efficacement, de sorte qu'un utilisateur puisse obtenir l'information pour au moins 2000 customer_ids à la fois. C'est-à-dire, lisez-les à l'interface utilisateur dans la limite de 30 secondes (un filtrage supplémentaire sera effectué à l'extrémité avant, de sorte que l'utilisateur ne sera pas bombardé de tous les résultats à la fois). Ci-dessous j'ai énuméré une vue de mes modèles actuels de magasin de données. Les 'rapports' se réfèrent à des ensembles de customer_ids, donc en continuant l'exemple ci-dessus, je pourrais obtenir mes 2000 customer_ids de ReportCids.
class Users(db.Model):
user = db.StringProperty()
report_keys_list = db.ListProperty(db.Key)
class Reports(db.Model):
#report_key
report_name = db.StringProperty()
class ReportCids(db.Model):
report_key_reference = db.ReferenceProperty(Reports, collection_name="report_cid_set")
customer_id = db.IntegerProperty()
start_timestamp = db.IntegerProperty()
end_timestamp = db.IntegerProperty()
class CustomerEvent(db.Model):
customer_id = db.IntegerProperty()
timestamp = db.IntegerProperty()
event_type = db.IntegerProperty()
Les options je considérais:
-Effectuer une requête distincte pour chaque customer_in dans mon ensemble de 2000
listes -Utiliser des clés indiquant les événements clients, mais est limitée à 5000 entrées dans une liste (si J'ai lu)
-Get toutes les entrées et filtre dans mon code
J'apprécierais vraiment si quelqu'un avait des conseils sur la façon de le faire de la manière la plus efficace, ou si je me approche du problème complètement dans le mauvais sens. Je suis novice en termes d'utilisation efficace du magasin de données.
Bien sûr, heureux de fournir des éclaircissements ou des informations si cela aide.
Merci beaucoup!
Qu'est-ce que vous essayez de récupérer exactement?Tous les ID de client pour un seul rapport, ou pour plusieurs rapports, ou tous les rapports pour un ID client? –
Si je lis bien, chaque customer_id est lié à 10 000 entités, et vous voulez récupérer les entités associées à 2000 customer_ids. Récupérer 20 millions d'entités en 30 secondes ne fonctionnera pas. Si vous clarifiez ce que vous voulez vraiment présenter à l'utilisateur final, nous pouvons vous suggérer des moyens de le faire qui n'impliquent pas de récupérer autant d'entités. –