2015-09-11 40 views
19

Qualcuno ha un buon suggerimento su quale database dovrei usare, per ottenere la replica su un numero variabile di target? Ho una rete mesh di server Raspberry Pi, ognuno dei quali può contenere un database. Voglio che il contenuto di ciascun database sia replicato attraverso la rete, ma non posso garantire quali nodi sono disponibili in qualsiasi momento.Replica di database su rete mesh Raspberry Pi

La maggior parte dei database nosql (CouchDB, Cassandra ad esempio) sembra supportare solo i target definiti nella configurazione.

Quindi (supponendo che nosql sia la migliore opzione di database); c'è un database nosql in grado di replicare a un numero variabile di target?

+1

Sarebbe bello avere alcune informazioni sul quantità di dati, frequenza di aggiornamenti aggiornamenti ed eliminazioni e la latenza di propagazione accettabile. Anche la velocità con cui i nodi si uniscono o lasciano permanentemente la rete. – cliffordheath

risposta

4

Per questo scenario, consigliamo lo Hadoop Distributed File System (HDFS).

Caratteristiche che fanno HDFS interessante per lo scenario:

  • Si tratta di un file system distribuito con fattore di replica variabile (il valore predefinito è 3, che è quasi impossibile perdere i dati con).
  • in grado di scalare fino a migliaia di diverse macchine
  • non dipende da elevata disponibilità dei singoli nodi - gestisce automaticamente errore del nodo e replica tutti i dati dai nodi abbattuto

Per quanto riguarda il database effettivo ... HBase, Mongo o Cassandra sono tutte buone opzioni qui, scegli quello che ti è più comodo: HDFS si prenderà cura di tutte le repliche per te.

3

In base alla mia esperienza Elasticsearch ha una gestione dei cluster semplice e intuitiva, supporta funzionalità intuitive come l'individuazione automatica dei nodi, la replica dei dati, il ribilanciamento automatico ecc., Dai un'occhiata allo docs. Di solito è usato per replicare i dati da un altro database per renderlo ricercabile ma non vedo perché non possa essere usato anche in questo contesto.

Fondamentalmente quando si crea una "tabella" (chiamata "indice" in ES) si arriva a decidere che in quante "partizioni" (chiamate "schegge") i dati devono essere partizionati e impostare ad-hoc come molte repliche di quella tabella che si desidera avere (questo non corrisponde al 100% alla terminologia corretta poiché un "indice" può consistere di più "tipi" ma penso che questa sia la migliore analogia).

Un progetto di esempio con tre Pis è here.

Ho letto un po 'anche su Cassandra e immagino che avrebbe caratteristiche simili, ad esempio partizioni e repliche sono menzionate here.

+1

Altri database potrebbero avere requisiti di RAM e CPU inferiori poiché Elasticsearch è ottimizzato per 10-100 ms di query su milioni di documenti. Non è solo un semplice negozio di valore-chiave. – NikoNyrh

2

Mi consiglia di dare un'occhiata a Hazelcast. Fanno abbastanza bene nella replicazione della memoria attraverso un cluster che potrebbe cambiare. Dovresti scrivere un client personalizzato per archiviare i dati in un database locale di tua scelta se desideri la persistenza del disco, ma Hazelcast può occuparsi della replica su un cluster in memoria e ha molta flessibilità.

+1

Alcuni anni fa, abbiamo avuto Hazelcast in esecuzione su un cluster di macchine Raspberry Pi: http://i0.wp.com/venturebeat.com/wp-content/uploads/2013/09/img_20130920_113757.jpg?fit= 800% 2C600 – pveentjer