2015-09-11 7 views
19

Hat jemand einen guten Vorschlag, welche Datenbank ich verwenden sollte, um die Replikation über eine variable Anzahl von Zielen zu erreichen? Ich habe ein Mesh-Netzwerk von Raspberry Pi Servern, von denen jeder eine Datenbank enthalten kann. Ich möchte, dass der Inhalt jeder Datenbank über das Netzwerk repliziert wird, aber ich kann nicht garantieren, welche Knoten zu irgendeinem Zeitpunkt verfügbar sind.Datenbankreplikation auf Raspberry Pi Mesh-Netzwerk

Die meisten Nosql-Datenbanken (CouchDB, Cassandra zum Beispiel) scheinen nur definierte Ziele in der Konfiguration zu unterstützen.

Also (vorausgesetzt, Nosql ist die beste Datenbankoption); Gibt es eine Nosql-Datenbank, die auf eine variable Anzahl von Zielen repliziert werden kann?

+1

Es wäre gut, einige Informationen über das haben, in Betracht ziehen sollten Datenmenge, Häufigkeit der Aktualisierungen und Löschungen von Additionen und die akzeptable Ausbreitungslatenz. Auch die Rate, mit der Knoten dem Netzwerk dauerhaft beitreten oder das Netzwerk verlassen. – cliffordheath

Antwort

4

Für dieses Szenario würde ich die Hadoop Distributed File System (HDFS) empfehlen.

Features, die HDFS attraktiv für Ihr Szenario machen:

  • Es ist ein verteiltes Dateisystem mit variabler Replikationsfaktor (der Standard ist 3, die fast unmöglich zu verlieren Daten mit).
  • Kann bis zu Tausenden von verschiedenen Maschinen
  • nicht davon ab, auf eine hohe Verfügbarkeit der einzelnen Knoten skalieren - automatisch Knotenausfall und repliziert verarbeitet alle Daten von abgestürzten Knoten

Was die eigentliche Datenbank ... HBase, Mongo oder Cassandra sind hier alle gute Optionen, wählen Sie, was Ihnen am besten gefällt - HDFS kümmert sich um die gesamte Replikation für Sie.

3

Nach meiner Erfahrung Elasticsearch hat große und einfach zu bedienende Cluster-Management, unterstützt es aus der Box nette Funktionen wie Autodiscovery, Datenreplikation, automatische Rebalancing etc., sehen Sie sich docs. Normalerweise wird es verwendet, um Daten aus einer anderen Datenbank zu replizieren, um es durchsuchbar zu machen, aber ich sehe nicht, warum es auch in diesem Kontext nicht verwendet werden könnte.

Grundsätzlich, wenn Sie eine "Tabelle" (genannt "Index" in ES) erstellen, müssen Sie entscheiden, in wie viele "Partitionen" ("Shards" genannt) sollten die Daten partitioniert werden, und ad-hoc, wie viele Replikate dieser Tabelle, die Sie haben möchten (das entspricht nicht 100% der korrekten Terminologie, da ein "Index" aus mehreren "Typen" bestehen kann, aber ich denke, das ist die beste Analogie).

Ein Beispielprojekt mit drei Pis ist here.

Ich habe ein wenig über Cassandra gelesen und ich stelle mir vor, dass es ähnliche Funktionen haben würde, zum Beispiel werden Partitionen und Replikate erwähnt here.

+1

Andere Datenbanken haben möglicherweise geringere RAM- und CPU-Anforderungen, da Elasticsearch für Abfragezeiten von 10 bis 100 ms auf Millionen von Dokumenten optimiert ist. Es ist nicht nur ein einfacher Schlüssel-Wert-Speicher. – NikoNyrh

2

Ich würde empfehlen, einen Blick auf Hazelcast. Sie sind ziemlich gut in der Speicherreplikation über einen Cluster, der sich ändern könnte. Sie müssten einen benutzerdefinierten Client schreiben, um die Daten in einer lokalen Datenbank Ihrer Wahl zu speichern, wenn Sie Festplatten-unterstützte Persistenz wünschen, aber Hazelcast kann sich um die Replikation über einen Cluster im Speicher kümmern und hat viel Flexibilität.

+1

Vor ein paar Jahren hatten wir Hazelcast auf einem Cluster von Raspberry Pi Maschinen laufen: http://i0.wp.com/venturebeat.com/wp-content/uploads/2013/09/img_20130920_113757.jpg?fit= 800% 2C600 – pveentjer