MapDB effizient verwenden (über Commits verwirrt)

9

Ich verwende MapDB in einem Projekt, das sich mit Milliarden von Objekten beschäftigt, die zugeordnet / in eine Warteschlange gestellt werden müssen. Ich brauche keine Persistenz nach dem Programmende (die MapDB-Datenbanken sind alle temporär). Ich möchte, dass das Programm so schnell wie möglich läuft, aber ich bin verwirrt über die commit () - Funktion von MapDB (von der ich annehme, dass sie für die Performance relevant ist), selbst nach dem Lesen von Docs . Meine Fragen:

  1. Was genau macht Commit? Mein Arbeitsverständnis ist, dass es Objekte von dem Heap auf die Festplatte serialisiert und dadurch Speicherplatz freigibt. Ist das genau?

  2. Was passiert mit den Verweisen auf Objekte, die gerade übergeben wurden? Werden sie von GC bereinigt oder "referenzieren" sie irgendwie ein Objekt auf der Festplatte (mit MapDB wird dies transparent?)

Letztendlich möchte ich wissen, wie ich MapDB so effizient wie möglich nutzen kann, aber ich kann das nicht ohne zu wissen, wofür commit () ist. Ich würde mich über jeden anderen Rat freuen, den Sie für die effiziente Nutzung von MapDB haben könnten.

    
chris 19.08.2013, 19:58
quelle

1 Antwort

2

Die Operation commit ist eine Operation in Transaktionen , genau wie Sie es in einem Datenbanksystem finden würden. MapDB implementiert Transaktionen, so dass commit die Änderungen, die ich an dieser Datenbank vorgenommen habe, dauerhaft und für andere Benutzer sichtbar machen würde. Die komplementäre Operation ist rollback , die alle Änderungen zurückweist, die Sie innerhalb der aktuellen Transaktion vorgenommen haben. Commit beeinflusst nicht (direkt), was in der Erinnerung ist und was nicht. Möglicherweise möchten Sie stattdessen compact() anzeigen, wenn Sie versuchen, den Heap-Speicher freizugeben.

Wenn Sie bei Ihrer zweiten Frage eine starke Referenz auf ein Objekt haben, dann behalten Sie diese starke Referenz bei. MapDB wird es nicht für dich löschen. Sie sollten MapDB die meiste Zeit als normale Java-Map betrachten. Wenn Sie get aufrufen, blendet MapDB aus, ob es sich im Speicher oder auf der Festplatte befindet, und gibt Ihnen nur einen verwendbaren Verweis auf das abgerufene Objekt zurück. Das abgerufene Objekt bleibt im Speicher hängen, bis es zu einem Müll wird, genau wie alles andere.

    
Gian 18.09.2014, 23:10
quelle

Tags und Links