i eine einfache FrageGAE-Caching-Abfragen objektivieren
in der objektivieren Dokumentation haben, sagt es, dass "nur get(),() gesetzt und löschen() mit dem Cache interagieren. Query() wird nicht im Cache gespeichert" http://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#Global_Cache.
Was ich mich wundere - wenn Sie eine root-Entität haben (ich habe @Parent wegen all der Skalierbarkeitsprobleme nicht verwendet, die es zu haben scheint), dass alle anderen Entitäten einen Schlüssel zu haben, und Sie eine Abfrage durchführen wie
ofy.query(ChildEntity.class).filter("rootEntity", rootEntity).list()
ist dies die vollständige Umgehung des Cache?
Wenn dies der Fall ist, ist es eine effiziente Caching Möglichkeit, eine Abfrage über die Bedingungen zu tun - oder was das betrifft können Sie eine Abfrage mit einem Elternteil Cache, in dem Sie eine tatsächliche Vorfahre Abfrage wie die folgenden
machen müssen würdenKey<Parent> rootKey = ObjectifyService.factory().getKey(root)
ofy.query(ChildEntity.class).ancestor(rootKey)
Danke
als einem der folgenden Erläuterungen ich eine Änderung hinzugefügt haben
Probe dao (die Validate-Methode ignorieren - es ist gerade tut einige null & Menge Prüfungen):
dies eine Probe alle Verfahren innerhalb eines Delegierten aus dem DAO, dass ich die Anfrage Fabrik Servicelocator verwendet
public List<EquipmentCheckin> findAll(Subject subject, Objectify ofy, Event event) {
final Business business = (Business) subject.getSession().getAttribute(BUSINESS_ATTRIBUTE);
final List<EquipmentCheckin> checkins = ofy.query(EquipmentCheckin.class).filter(BUSINESS_ATTRIBUTE, business)
.filter(EVENT_CONDITION, event).list();
return validate(ofy, checkins);
}
jetzt, wenn dieser ausgeführt genannt finden wird feststellen, dass folgende Methode wird tatsächlich in meinem AbstractDAO aufgerufen.
während des Debuggen bemerkte ich, dass, wenn ich eine Abfrage mache - die Find-Methode wird tatsächlich aufgerufen - meine Methode ist einfach ofy.begin(). Find (clazz, id) - da dies ist hinter den Kulissen ist dies Ziehen Sie eine zwischengespeicherte Entität oder gehen Sie direkt zum Datenspeicher, da dieser von einer Abfrage aufgerufen wurde? Dies war in der Dokumentation - "Eine Abfrage() wird zwischengespeicherte Entitätsinstanzen zurückgeben, der (möglicherweise teure) Aufruf an den Datenspeicher wird jedoch weiterhin ausgeführt." - Ich frage mich, was das eigentlich bedeutet? Vielen Dank für die Hilfe –
Objectify.find() ist eine get-by-key keine Abfrage. Der einzige Unterschied zwischen find() und get() besteht darin, dass find() null zurückgibt und get() eine Ausnahme auslöst, wenn die Entität nicht existiert. – stickfigure
Sorry - ich muss es falsch formuliert haben - wenn ich meine findAll-Methode, die 'ofy.query (Type.class) .filter (Filter.class)' verwendet, ich erwarte, dass dies den Cache umgehen - aber ich finde es dann geht zu meiner find-Methode (die in meinem lcoator - die einfach ofy.find ist (Type.class, id)) - das Dokument sagt, dass die Abfrage den Cache umgeht, aber die Abfrage, die ich rufe, scheint meine Methode find zu verwenden - und Ich denke, dass Find den Cache technisch treffen sollte, da es get() hinter den Kulissen verwendet. Klingt das richtig - ich könnte weit weg sein?Ich werde den Code in einer Bearbeitung wirklich schnell posten - danke nochmal –