2013-03-16 7 views
5

Con focus su leggere prestazioni, voglio creare un Termine come un Orddict o Proplist che contenga un numero elevato (100.000) voci, ciascuna contenente un ID e un valore Term. Questo Termine incapsulante dovrebbe essere in grado di restituire il valore memorizzato sotto la sua chiave, proprio come un Orddict è in grado di fare.Qual è il modulo Erlang più performante per archiviare un ampio elenco di valori chiave/termine in un periodo

example: 

K001 - Term001 
K002 - Term002 
K003 - Term003 

Il termine risultante contenente l'insieme deve essere passati da una funzione all'altra, per diversi scopi di calcolo senza memorizzare su una di persistenza per evitare disco I/O. Ho anche scelto di non utilizzare il caching della memoria in questa fase per evitare la complessità architettonica in questo momento, quindi il mio obiettivo è quello di avere tutto ciò che è semplicemente ricerca-chiave.

Gli ordinamenti sono suddivisi in chiavi, che migliorano la ricerca di una chiave, rispetto a un normale dettato. Non sono a conoscenza di nessun altro modulo Erlang che possa incorporare un meccanismo di indicizzazione più efficiente entro il suo termine.

Qualche suggerimento per un approccio migliore di un Orddict?

risposta

8

In realtà, orddict è implementato come elenco ordinato (source), quindi si comporta male sia per l'inserimento che per la ricerca, soprattutto quando le chiavi vengono inserite in ordine crescente. Stai lontano da esso; non funzionerà per il tuo caso d'uso. dict è una struttura dati basata su hash e offre prestazioni di inserimento/ricerca solide. Se l'ordine delle chiavi è importante per te, considera l'utilizzo di una mappa ad albero (come ad esempio gb_trees) in quanto puoi estrarre una sequenza di chiavi ordinata prendendo la passeggiata dell'albero in ordine.

3

Se si desidera condividere un set di dati di grandi dimensioni tra i processi di Erlang, è possibile provare a utilizzare ETS. È l'archivio valori-chiave in memoria fast, che supporta solo aggiornamenti distruttivi.

Problemi correlati