2010-01-29 29 views
5

Ho un problema in cui ho bisogno di assemblare una mappa la cui dimensione finale è in GB (passando oltre 64 GB) e non posso presumere che un utente del programma avrà questo tipo di macchina dei mostri in giro. Una buona soluzione sarebbe quella di distribuire questa mappa su un numero di macchine per creare un footprint di memoria molto più modesto per istanza.Sharding automatico di una mappa Java su più nodi

Qualcuno sa di una libreria/suite di strumenti che possono eseguire questo sharding? Non mi interessa la replica o le transazioni; semplicemente diffondendo questo requisito di memoria.

risposta

2

io suggerisco di iniziare con Hazelcast:

http://www.hazelcast.com/

E 'open-source, e, a mio parere è molto facile da lavorare, quindi è il quadro migliore per la prototipazione rapida .

Per quanto ne so, si comporta più velocemente delle alternative commerciali, quindi non mi preoccuperei nemmeno delle prestazioni.
(non ho formalmente benchmark io stesso)

+1

Questa è una affermazione in grassetto – Kevin

+0

hey kevin, hai ragione, è per questo che ho aggiunto rapidamente l'osservazione parentetica :) – Yoni

+0

darò un'occhiata al nocciolò allegria! – andeyatz

3

terracotta potrebbe essere utile dare un'occhiata qui

http://www.terracotta.org/

sua una JVM cluster dipenderà da quanto spesso si aggiorna la mappa immagino su quanto bene si svolge.

+0

Se stai creando un prodotto commerciale, la licenza open source per Terracotta può essere un problema soprattutto a causa della clausola di attribuzione – Kevin

+0

La concessione di licenze non è un problema in quanto il progetto è open source; La terracotta sembrava un po 'più forte, inoltre sono più preoccupato di quanto Terracotta possa condividere i dati. Anche se l'eHcache sembra essere in grado di farlo. – andeyatz

2

Deve essere open source? In caso contrario, lo può fare Oracle Coherence.

+0

D'accordo, è esattamente (e più) quello che sta cercando ... Potrebbe essere un po 'eccessivo però. –

1

Si può essere in grado di risolvere il problema utilizzando un database invece, qualcosa di simile a http://hsqldb.org/ può fornire le funzionalità necessarie con la possibilità di scrivere i dati su disco piuttosto che tenere tutto in memoria.

Vorrei fare un passo indietro e chiedersi se una mappa è la giusta struttura dati per GB di dati.

+0

HSQLDB è troppo lento purtroppo e i dati sono ordinatamente ordinati in coppie chiave-valore. Il problema deriva dalla necessità di avere una ricerca estremamente veloce senza poter prevedere l'ordine di ricerca. Ecco perché le soluzioni basate su hash sembrano essere migliori di quelle per un RDBMS – andeyatz