2013-08-19 6 views
9

Sto utilizzando MapDB in un progetto che riguarda miliardi di oggetti che devono essere mappati/accodati. Non ho bisogno di alcun tipo di persistenza al termine del programma (i database MapDB sono tutti temporanei). Voglio che il programma funzioni il più velocemente possibile, ma sono confuso riguardo alla funzione commit() di MapDB (che presumo sia rilevante per le prestazioni), anche dopo aver letto lo docs. Le mie domande:Utilizzo efficiente di MapDB (confuso circa i commit)

  1. Che cosa fa esattamente commit? La mia comprensione operativa è che serializza gli oggetti dall'heap al disco, liberando così lo spazio heap. È accurato?

  2. Cosa succede ai riferimenti agli oggetti che sono stati appena impegnati? Ottengono ripulito da GC, o se invece in qualche modo 'riferimento' un oggetto su disco (con MapDB rendendo questa trasparenza?)

In definitiva voglio sapere come utilizzare MapDB nel modo più efficiente possibile, ma Non posso farlo senza sapere a cosa serve commit(). Apprezzerei qualsiasi altro consiglio che potresti avere per l'utilizzo efficiente di MapDB.

risposta

2

L'operazione commit è un'operazione su transactions, proprio come si troverà in un sistema di database. MapDB implementa le transazioni, quindi commit è effettivamente "rendere le modifiche apportate a questo DB permanente e visibile agli altri utenti". L'operazione gratuita è rollback, che elimina tutte le modifiche apportate all'interno della transazione corrente. Commit non influisce (direttamente) su ciò che è in memoria e su ciò che non lo è. Potresti voler dare un'occhiata a compact(), invece, se stai cercando di recuperare spazio nell'heap.

Per la seconda domanda, se hai un forte riferimento a un oggetto, continui a mantenere quel riferimento forte. MapDB non lo cancellerà per te. Dovresti pensare a MapDB come una normale mappa Java, il più delle volte. Quando chiami get, MapDB nasconde se è in memoria o su disco da te e ti restituisce solo un riferimento utilizzabile per l'oggetto recuperato. Quell'oggetto recuperato rimarrà in memoria finché non diventerà spazzatura, proprio come qualsiasi altra cosa.