29 votes

Combien de lectures de banque de données consomment chaque opération d'extraction, de comptage et de requête?

Je suis en train de lire sur Google App Engine groupes, de nombreux utilisateurs (Fig1, Fig2, Fig3) qui ne peuvent pas trouver où est le nombre élevé de la banque de données de lit dans leurs rapports sur la facturation viennent.
Comme vous le savez, la banque de données de lit sont plafonnées à 50 opérations/jour, au-dessus de ce budget que vous avez à payer.

50K opérations sonne comme beaucoup de ressources, mais malheureusement, il semble que chaque opération (Requête, d'une Entité d'extraction, le Comte..), se cache la banque de données de plusieurs lectures.

Est-il possible de savoir via l'API ou une autre approche, combien la banque de données de lit sont cachés derrière de la commune RPC.get , RPC.runquery des appels?

Appstats semble inutile dans ce cas, car il vous donne juste la RPC de détails et de ne pas le caché lit coût.

Avoir un Modèle simple comme ceci:

class Example(db.Model):
    foo = db.StringProperty()    
    bars= db.ListProperty(str)

et 1000 entités dans le magasin de données, je suis intéressé par le coût de ces types d'opérations:

items_count =  Example.all(keys_only = True).filter('bars=','spam').count()

items_count = Example.all().count(10000) 

items = Example.all().fetch(10000)

items = Example.all().filter('bars=','spam').filter('bars=','fu').fetch(10000)

items = Example.all().fetch(10000, offset=500)

items = Example.all().filter('foo>=', filtr).filter('foo<', filtr+ u'\ufffd')

10voto

ribrdb Points 126

Voir http://code.google.com/appengine/docs/billing.html#Billable_Resource_Unit_Cost. Une requête vous coûte 1 lire plus 1 en lecture pour chaque entité retournée. "Retourné" comprend des entités ignorés par les compenser ou de les compter. Donc, c'est 1001 lectures pour chacun de ces:

Example.all(keys_only = True).filter('bars=','spam').count() 
Example.all().count(1000)
Example.all().fetch(1000)
Example.all().fetch(1000, offset=500)

Pour ces derniers, le nombre de lectures appliqué est de 1, plus le nombre d'entités qui correspondent aux filtres:

Example.all().filter('bars=','spam').filter('bars=','fu').fetch()
Example.all().filter('foo>=', filtr).filter('foo<', filtr+ u'\ufffd').fetch()

Au lieu d'utiliser le comte, vous devriez envisager de stocker le nombre dans la banque de données, fragmenté si vous avez besoin de mettre à jour les compter plus d'une fois par seconde. http://code.google.com/appengine/articles/sharding_counters.html

Chaque fois que possible, vous devriez utiliser des curseurs au lieu d'un décalage.

3voto

Barak Points 334

Juste pour en être certain:

Je suis presque sûr:

Exemple.all (). Count (10000)

Celui-ci utilise de petites opérations de banque de données (pas besoin de récupérer les entités, seulement des clés), donc cela compterait comme 1 lecture + 10 000 (max) petites opérations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X