2010-12-30 3 views
8

Devo prendere una decisione sull'utilizzo di STM in un sistema Clojure con cui sono coinvolto per un sistema che necessita di diversi GB da archiviare in un unico riferimento STM.Esperienze con Clojure STM per dataset di grandi dimensioni?

Mi piacerebbe sapere chi ha qualche consiglio nell'utilizzo di Clojure STM con grandi set di dati indicizzati per ascoltare le loro esperienze.

risposta

4

Utilizzo Clojure per alcune attività di elaborazione dati su larga scala (sicuramente gigabyte di dati, in genere un sacco di array Java di grandi dimensioni memorizzati all'interno di vari costrutti Clojure/ref di STM).

Fintanto che tutto rientra nella memoria disponibile, non si dovrebbe avere un problema con quantità estremamente elevate di dati in un unico riferimento. Il ref stesso applica solo una piccola quantità fissa di overhead STM che è indipendente dalla dimensione di ciò che è contenuto al suo interno.

Un bel bonus extra deriva dalla condivisione strutturale che è costruito in strutture di dati standard di Clojure (mappe, vettori, ecc) - si può prendere una copia completa di una struttura di dati da 10 GB, modificare un elemento qualsiasi punto della struttura, e essere garantito che le strutture dati sia insieme richiedono solo una frazione superiore a 10 GB. Questo è molto utile, in particolare se si considera che a causa di STM/concorrenza si avranno potenzialmente diverse versioni dei dati creati in qualsiasi momento.

+1

Bella risposta. Qual è il modello di accesso in lettura/scrittura della tua applicazione e la velocità di retrocessione della transazione? Inoltre, usi un ref o più ref? – Zubair

+1

Ho molti lettori ma non molta contesa sulla scrittura, in genere solo uno scrittore. Non ho confrontato il tasso di ripetizione della transazione, ma sospetto che sia piuttosto basso. Io uso un riferimento per identità logica, ad es. "l'elenco di tutti i risultati di elaborazione fino ad ora" che viene aggiunto al completamento di varie attività – mikera

1

La prestazione non sarà peggiore o migliore rispetto a STM che coinvolge un singolo riferimento con un set di dati di piccole dimensioni. Le prestazioni sono più ostacolate dal numero di aggiornamenti di un set di dati rispetto alla dimensione effettiva del set di dati.

Se si dispone di un writer per il set di dati e molti lettori, le prestazioni saranno comunque abbastanza buone. Tuttavia, se hai un lettore e molti scrittori, le prestazioni ne risentiranno.

Forse più informazioni potrebbero aiutarci ad aiutarvi di più.

+0

Mi aspetterò diversi modelli di utilizzo e volevo solo conoscere le esperienze generali per avere un'idea di come si comportano in diverse situazioni. Ma le tue informazioni sono state utili, grazie – Zubair