Domanda

Così ho utilizzato ETS - grandi opere. Tuttavia, lo uso come una cache di dati del percorso - che ho caricare quando i carichi di moduli e salvare quando si effettua un cambiamento (si legge molto più di quanto scritto).

I stava pensando che DETS renderebbe le cose molto più pulito - non devono preoccuparsi di gestire la persistenza del tavolo. Questo sarebbe un buon uso del DETS? (Dimensione non è un problema, per lo più preoccupati notevole aumento delle prestazioni in lettura - tutti i dati possono facilmente adattarsi in memoria).

È stato utile?

Soluzione

DETS è molto molto più lento di ETS nella maggior parte dei casi, ma credo che se la dimensione dei dati è piccolo allora la maggior parte se sarà memorizzata nella cache dalla cache del disco e sarà più veloce per recuperare la seconda volta che lo si legge, quindi la cosa migliore cosa è il provare con il tipo di utilizzo

Ma hai considerato utilizzando mnesia invece di ETS direttamente? Con il tipo di tabella disc_copies mnesia si otterrà la velocità di ETS e ancora persistenza

Altri suggerimenti

dets pagina man :

"Poiché tutte le operazioni eseguite da dets sono operazioni del disco, è importante rendersi conto che una singola operazione di look-up comporta una serie di accesso al disco e le operazioni di lettura. Per questo motivo, le funzioni dets sono molto più lento rispetto alla corrispondente Ets funzioni, anche se dets esporta un'interfaccia simile. "

Cioè, per una memorizzazione lettura soprattutto, dets non è una scelta ottimale.

(devo ammettere che trovo questa decisione di progettazione strano -. Una migliore attuazione dovrebbe memorizzare nella cache le ricerche più recenti, tuttavia, dal momento che Ets e dets sono strutture di base in Erlang, immagino che le implementatori hanno lasciato che l'ottimizzazione per gli utenti.)

For write rarely, read many data that you're okay keeping in memory, check out a 'Mochiglobal'. Mochiweb has a neat module that abuses Erlang's shared heap for module constants via the code management system to provide super-fast access to terms by generating modules with given values as constants on the fly.

Riak uses a Mochiglobal for the ring state, IIRC.

Hers's the source:

https://github.com/mochi/mochiweb/blob/master/src/mochiglobal.erl

There's absolutely no persistence here, of course, but if you're looking to heavily optimize reads, you can't get much better than this.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top