Frage

Nun, ich glaube, ich habe einen sehr grundlegenden Zweifel hier:

Ich entwickle eine App auf GAE (Java) und eine Abfrage an den Datenspeicher durchführen, die eine Menge zurückgibt von Einheiten, so muss ich es zwischenzuspeichern. Ich war mit memcache und es funktioniert großartig, aber wenn ich die Liste der Entitäten in einer statischen Variablen halte, geht die ganze Anfrage als doppelt so schnell als memcache verwenden. Ich denke, das ist, weil ich nicht die Entitäten die ganze Zeit Deserialisieren.

Was wäre der Nachteil eine statische Variable stattdessen auf memcache verwenden? Ich weiß nicht, ob es mehrere Instanzen von meiner Anwendung in der Cloud sein könnte und somit mehrere Instanzen meiner statischen Variablen?

Die Liste der Einheiten I-Cache bin versucht, sind die besten (mehr score) Beiträge der letzten Woche. Ich nehme diese Liste und wählen 5 zufällige Beiträge und zeigen ihnen in ein paar Seiten.

Danke für die Hilfe!

War es hilfreich?

Lösung

App Engine skaliert durch neue Instanzen Ihrer Anwendung, wenn die Anzahl an Nutzern schlagen erhöht. Wie drudru sagte, könnten verschiedene Benutzer durch verschiedene Instanzen bedient werden. Im Allgemeinen memcache ist die schnellste Stelle etwas, das man global konsistent sein will zu speichern. Aber in Ihrem Fall da sein, noch Raum für Verbesserungen kann.

Sie erwähnen Sie haben eine Liste von Posten und Sie zufällig 5 wählen, um Benutzer anzuzeigen. Spielt es eine Rolle, wenn zwei verschiedene Benutzer einen anderen Satz von 5 sehen? Wenn Sie zufällig diejenigen sowieso Wahl sind, vielleicht ist es egal. Dann könnten Sie die vollständige Liste der Beiträge in memcache speichern und ziehen 5 zufällig diejenigen aus memcache und speichern sie in einer statischen Variablen.

Zweitens, was genau memcaching Sie, und wie ziehen Sie es aus? Sind Speichern Sie eine ganze Reihe von vollen Beiträge in memcache, bekommen sie alle, dann 5 Wahl? Vielleicht könnten Sie nur die Liste der Beiträge herunterladen, wählen Sie 5, und erhalten nur die 5 Sie brauchen? Wenn Sie denken, dass es das Deserialisieren ist, dass Sie nach unten ist verlangsamt, könnte dies helfen. Machst du irgendeine Verarbeitung an den Pfosten, nachdem Sie sie bekommen? Wenn ja, könnten die Ergebnisse dieser Verarbeitung zwischengespeichert?

Andere Tipps

Sie können nicht auf statischen Variablen verlassen (oder irgendetwas anderes in JVM-Speicher) um zu sein, wenn die nächste Anforderung trifft, weil Google kostenlos zum Starten und Stoppen von virtuellen Maschinen, wenn sie Lust dazu hat. Von den Blicken von ihm, sie scheinen zusätzliche JVMs anstelle von zusätzlichen Threads in der gleichen JVM starten zu bevorzugen, die dieses Problem Verbindungen.

Aber Sie sollen in der Lage statische Variablen als Cache-Schicht zu verwenden, sofern Sie eine Möglichkeit haben, die Daten zu laden von woanders, wenn er weg geht.

Ich würde auch nicht versuchen, mit Speichernutzung dort über Bord zu gehen, muss es eine Quote sein, wie viel Speicher Sie verwenden können.

Ja, es gibt keine Garantie, dass Ihre Instanz das gleiche für verschiedene Benutzer im Internet sein wird. Sie könnten immer wieder zu lesen diese in einen statischen im schlimmsten Fall beenden. Die memcache hat eine höhere Garantie zur Verfügung stehen. Ich würde nur die memcache verwenden, und Ihre Anwendung sollte keine Skala Probleme in der Zukunft hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top