Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Welche NoSQL-Datenbank für extrem hohe Datenmengen

Ich habe Erfahrung mit Redis und MongoDB, würde aber beides nicht für Ihren Anwendungsfall empfehlen. Redis ist in jeder Hinsicht großartig, aber da es nur RAM ist und keine Clustering-Funktionen hat (sie befinden sich jedoch in der Entwicklung), lässt es sich nicht sehr gut skalieren. MongoDB würde ich nie wieder für etwas verwenden, das etwas anderes als einen kleinen Replikatsatz benötigt.

Im Grunde ist MongoDB unausgereift und völlig ungeeignet für jegliche Art von hohen Volumen- und Hochleistungsanforderungen. Es verfügt über eine globale Schreibsperre, die während der Festplattenspülung aufrechterhalten wird, was bedeutet, dass die Leistung stark variieren kann, je nachdem, was Sie tun. In der Praxis macht es Updates unmöglich, die Dokumente wachsen lassen, und Sie müssen auch mit Löschungen sehr vorsichtig sein. Apropos Löschvorgänge, sie fragmentieren die Datenbank stark, wenn Sie also viele Löschvorgänge durchführen, wird Ihre Leistung darunter leiden.

Sharding in 1.8.0 bis 1.8.1 war eine Katastrophe. Es gab komplette Show-Stopper-Bugs, die es niemals in eine stabile Version hätten schaffen dürfen. Die Konfiguration wurde nicht ordnungsgemäß geleert und es war sehr einfach, Ihre Datenbank in einen schlechten Zustand zu versetzen, sodass Chunks nie vom primären Shard entfernt wurden. 1.8.2 löst die meisten von ihnen und scheint stabiler zu sein, aber ich traue der Sharding-Implementierung kein bisschen. Hinzu kommt, dass Sharding schwierig ist, selbst wenn alles funktioniert, es nicht immer einfach ist, einen natürlichen Shard-Schlüssel auszuwählen, und wenn Sie Sharding nicht tun, wird es Ihnen viel Kummer bereiten.

MongoDB ist wirklich einfach zu handhaben und das Feature-Set ist wirklich nett. Die Dokumentation, die Treiber und die Community sind alle großartig. MongoDB funktioniert hervorragend als Ersatz für MySQL, aber verwenden Sie es nicht für etwas, das skaliert werden muss.

Wir überlegen derzeit, nach Cassandra zu ziehen. Ich finde das Dynamo-Modell (z. B. keine Masternodes; überall schreiben und lesen; einfach Nodes hinzufügen, um den Cluster zu vergrößern) überzeugend und die Funktionen sind mehr oder weniger richtig für uns. Das Datenmodell ist weniger Schema wie MongoDB, wenn auch etwas eingeschränkter (Sie können im Grunde zwischen Hashes mit einer oder zwei Ebenen wählen). Ich bin mir sicher, dass die Community gut ist, wenn man sich erst einmal damit beschäftigt, aber bisher finde ich es schwierig, gute Informationen darüber zu finden, wie man häufige Probleme löst, und die Dokumentation fehlt. Die meisten Informationen, die Sie in Blogs finden, sind ein Jahr alt, und seitdem ist viel passiert (0.7 und 0.8 scheinen beide wirklich wichtige Updates zu sein, aber die meisten Dinge, die Sie finden, sind ungefähr 0.6). Die Treiber sind nach allem, was ich bisher gesehen habe, auch nicht sehr ausgereift oder gut dokumentiert, und alle scheinen sich darüber zu streiten, ob Thrift, Avro oder CQL verwendet werden sollten (und das hat sich von 0,6 auf 0,7 auf 0,8 geändert). .

Riak ist interessant, aus den gleichen Gründen wie Cassandra, aber für uns reicht ein reiner Key-Value-Store nicht aus, wir müssen in der Lage sein, zu aktualisieren, ohne zuerst einen Lesevorgang durchzuführen. Bei Riak ist dies nicht möglich, da die Werte nur Blobs sind. Das hört sich aber so an, als wäre es kein Problem für Sie.

HBase ist ein weiterer Anwärter. Das Einrichten und Ausführen scheint aufgrund der vielen verschiedenen Teile, ZooKeeper, HDFS usw., mühsam zu sein. Aber das Datenmodell ähnelt Cassandra (spaltenweise, dh einstufige Hashes), was für uns gut funktioniert, aber möglicherweise nicht ist wichtig für dich. Es scheint erprobt und wahr zu sein, aber wie bei MongoDB müssen Sie auf Sharding-Probleme achten, Sie müssen sich Gedanken über Ihre Schlüssel machen oder Sie bekommen Probleme.

Es gibt auch CouchDB, Project Voldemort und unzählige andere Möglichkeiten. Ich denke, wenn Sie es mit "extrem hohen Datenmengen" ernst meinen, dann liegt es zwischen Cassandra, Riak und HBase. Streik Riak an, wenn die reine Key-Value-Speicherung nicht ausreicht. Je nachdem, was Sie unter "vollständig konsistenter Replikation" verstehen, sind Cassandra und Riak draußen, da es eine Möglichkeit (nicht unbedingt groß und einstellbar) gibt, einen veralteten Wert zu lesen.

Am Ende müssen Sie es natürlich an Ihrem speziellen Anwendungsfall ausprobieren, also sollten Sie aus dieser Antwort wirklich nur mit nach Hause nehmen:Machen Sie sich keine Sorgen um MongoDB.