2012-04-03 8 views
10

Sto provando a caricare tutti i miei Neo4j DB nella RAM in modo che le query funzionino più velocemente. Quando si passa la mappa delle proprietà alla creazione del grafico, non vedo il processo occupare più spazio nella memoria come prima, e non è nemmeno proporzionale allo spazio dei file sul disco. Quale potrebbe essere il problema? e come può essere risolto .... GrazieCaricamento di tutti i Neo4J db in RAM

+0

È inoltre necessario assicurarsi di disporre di memoria sufficiente per il mapping della memoria dei file, si potrebbe desiderare di configurarlo manualmente (http://docs.neo4j.org/chunked/milestone/configuration-io-examples. html) –

risposta

5

Neo4j carica tutti i dati pigramente, il che significa che li carica in memoria al primo accesso. L'opzione di caching riguarda solo la strategia del GC, quindi quando (o se) i riferimenti saranno GCed. Per caricare l'intero grafico in memoria, il tipo di cache deve essere forte ed è necessario attraversare l'intero grafico una volta. Si può fare in questo modo:

// untested java code 

import org.neo4j.helpers.collection.IteratorUtil; 

// ... 

for(Node node : graph.getAllNodes()) { 
    IteratorUtil.count(node.getRelationships()); 
} 

In questo modo verranno utilizzati tutti i nodi e le relazioni una volta e quindi caricato nella cache.

+1

Grazie, trovato questo anche nei documenti. Vorrei davvero che ci fosse solo una semplice bandiera da accendere invece di tutto questo. – user971956

+1

il vantaggio qui è che puoi sintonizzarti sul tuo caso d'uso e dopotutto sono solo 2 linee di codice :) –

+1

Michael, vero, ma da una prospettiva dell'usabilità newbie (che è il settore di maggioranza di un nuovo prodotto avere cose così semplici è più importante dell'opzione di mettere a punto. – user971956

Problemi correlati