2016-07-19 46 views
0

Ich verwende den folgenden Code, um einen dauerhaften Cache mit Ehcache3 einzurichten.Wie verwende ich Ehcache 3 mit persistent Speicher, um Write-Behind-Caching zu tun?

Ich möchte einen Write-Behind-Algorithmus verwenden, um meine Schreibvorgänge zu beschleunigen. Ich habe jedoch kein Codebeispiel oder Handbuch gefunden, um dies zu tun. Die offizielle EHC-Dokumentation fehlt - und als ich Hilfe in ihrem Forum suchte, erhielt ich nur: "Wir müssen dieses Dokument reparieren!" Ich habe viele Beispiele gefunden, wie man es mit Caches macht, die nicht vom Typ PersistentCacheManager sind, die nicht mit dem neuen Klassentyp arbeiten.

Es gibt einige Code-Beispiele gibt, vor allem ehcache write-behind behaviour Aber ich bin nicht sicher, welche Version von Ehcache diese Verwendung ist.

Ich bin hier ein bisschen fest und es scheint mir, dass ich nicht die erste Person sein kann, die in einen hartnäckigen Speicher mit Write-Behind-Verhalten schreiben möchte. Ich habe die Bedeutung von "Write-behind" als etwas nebulös empfunden. Was ich tun möchte, ist, auf die Festplatte in einem Chunking-Muster statt einzeln zu schreiben. Meine Hoffnung ist, dass dies die Schreibgeschwindigkeit beim Ersetzen vorhandener Daten beschleunigen würde.

Ich kann mir vorstellen, dass die Optimierung der Schreibgeschwindigkeit zu einer Fragmentierung der Datei auf einer HD führen kann - möglicherweise befinden sich noch nicht verwendete Lücken in der Datei. Ich hoffe, dass es vorgefertigten Code gibt, um diese Art von Dingen anzugehen. Vielleicht gibt es dafür Optionen, die ich noch weiter optimieren könnte.

  PersistentCacheManager myCacheManager; 
      myCacheManager = CacheManagerBuilder.newCacheManagerBuilder() 
      .with(CacheManagerBuilder.persistence(this.filename)) 
      .withCache("myCache", 
        CacheConfigurationBuilder.newCacheConfigurationBuilder(
          Long.class, long[].class, 
          ResourcePoolsBuilder.newResourcePoolsBuilder() 
            .heap(100000, EntryUnit.ENTRIES) 
            .offheap(1, MemoryUnit.GB) 
            .disk(2000, MemoryUnit.GB, true) 
        ) 
      ).build(true); 

Antwort

0

Da antwortete auf die mailing list - umfangreicher als Sie hier angeben - es gibt absolut keinen Zusammenhang zwischen Schreib hinter und PersistentCacheManager.

  • write-behind ist ein asynchrones Erweiterung des Durchschreibmuster in Caching. Beschreibungen können an verschiedenen Stellen im Internet gefunden werden, einschließlich auf Wikipedia. Sie können Write-Behind auf einem Heap nur Caches aktivieren. Es nicht erfordert eine Festplattenebene und wird in keiner Weise stören, wie die Daten auf der Festplatte im Cache selbst geschrieben werden.
  • Um Schreib hinter müssen Sie zuerst zu implementieren Write-Through- durch einen CacheLoaderWriter Konfiguration, die mit dem, was wirkt als Referenzdatenspeicher (ein DB, ein REST-Service, ...) Interaktionen implementieren unterstützen

Und ja, wie zugegeben, kann die Dokumentation zu diesem Thema verbessert werden. Beachten Sie, dass abgesehen von der Konfiguration und der exakten Schnittstelle zu implementieren, die Leser und Autoren von Ehcache 2.x verbindet, hohe dokumentierte Prinzipien gültig bleiben.

Um zu Ihrer Verwirrung über die Art und Weise zu kommen, wie Festplattenschreibvorgänge von Ehcache ausgegeben werden - dies ist ein Implementierungsdetail und passiert in keiner Weise pro Mutation. Beachten Sie, dass der Ehcache-Plattenspeicher nicht crashsicher ist und wenn Sie die CacheManager Daten nicht ordnungsgemäß schließen, werden die Daten beim Neustart gelöscht. Dies ist kein Feature, das einen Cache in einem Schlüssel/Wert-Speicher transformiert! Und ist definitiv keine Haltbarkeitsgarantie.

+0

Es scheint also, die Wurzel dieses Missverständnisses war ein einziger Begriff. Jetzt verstehe ich, dass in der Ehcache-Dokumentation SoR immer ein externes System ist, ich verstehe die Beispiele. – BAMF4bacon