2016-04-25 12 views
0

Ich verwende Google Guava Table, um strukturierte Tabellendaten in einer JAVA-Anwendung zu verarbeiten. Mein Data-Objekt besteht aus der Tabelle und einer Map, die die DataTypes für jede Spalte speichert (int, string, decimal ...).Caching-Tabelle - Google Guava-Tabelle

Dieses Objekt kann sehr groß und speicherintensiv werden (bis zu 10.000.000 Zeilen und 16 GB Arbeitsspeicher). Also war meine Idee, den Temp-Ordner alle 50.000 Zeilen oder so zu chachen und die Daten bei Bedarf zu lesen.

public void putRow(int row, String column, Object value){ 
    data.put(row, column, value); 
    rowSize = data.rowKeySet().size(); 

    if(rowSize == maxObjectSize){ 
     writeCache(); 
    } 
} 

Ich habe große Probleme der Daten chachen. Auf der einen Seite ist es sehr zeitaufwendig zu cachen, auf der anderen Seite ist es schwer sicherzustellen, dass keine Daten verloren gehen und ich habe keine gute Drittanbieter-API gefunden, um die Daten zu chachen.

Antwort

0

Zu den Daten können Sie entweder einzelne Werte zwischenspeichern oder Zeilen vervollständigen. Um einen einzelnen Wert zwischenzuspeichern, konstruieren Sie ein einzelnes zusammengesetztes Schlüsselobjekt von Zeile und Spalte.

Alternativ können Sie eine komplette Zeile zwischenspeichern, indem Sie eine Karte in den Cache stellen.

Sie verwenden einen Cache wie EHCache, der das Schreiben von Daten auf die Festplatte unterstützt, wenn es nicht in den Heap passt.

Welchen Ansatz Sie nehmen sollen, hängt von:

  • Wie teuer ist es eine Zeile oder einen Wert zu generieren? Hohe Kosten -> Cache die ganze Reihe
  • Nur wenige Spalten zugegriffen werden sehr häufig -> Cache nur der Spaltenwert

für einen Cache, nützlich zu sein, erfordert es, dass Sie (wieder) zu erzeugen, die fehlenden Daten für eine bestimmte Zeile und ein Zugriffsmuster, das bestimmte Zeilen oder Werte in einer Zeile häufiger anfordert. Wenn Sie nur die gesamten Daten generieren oder nur auf die vollständigen Daten zugreifen können, ist eine kleine Datenbank eine gute Alternative. Suchen Sie nach etwas wie mapdb oder leveldb.

Verwandte Themen