Ich muss Cassandra oder MongoDB (oder eine andere nosql-Datenbank, ich akzeptiere Vorschläge) für ein Projekt mit vielen Einfügungen (1M / Tag) wählen. Also erstelle ich einen kleinen Test, um die Schreibleistung zu messen. Hier ist der Code zum Einfügen in Cassandra:
%Vor%Und der Code, der in Mongo eingefügt werden soll, ändert sich auch die Verbindungsfunktion:
%Vor%Die Ergebnisse sind ~ 1046 Sekunden zum Einfügen in Kassandra und ~ 437 zum Beenden in Mongo. Es wird angenommen, dass Cassandra viel schneller ist, als Mongo Daten einfügt. Also, Was mache ich falsch?
Es gibt kein Äquivalent zu Mongos unsicheren Modus in Cassandra. (Wir hatten einen, aber wir haben ihn rausgenommen, weil es nur eine schlechte Idee ist.)
Das andere Hauptproblem ist, dass Sie Singlethread-Inserts machen. Cassandra ist für hohe Parallelität ausgelegt; Sie müssen einen Multithread-Test verwenden. Sehen Sie das Diagramm unten in Ссылка (die tatsächlichen Zahlen sind seit einem Jahr veraltet, aber die Prinzip ist immer noch wahr).
In der Cassandra-Quellenverteilung ist ein solcher Test in contrib / stress enthalten.
Wenn ich mich nicht irre, können Sie in Cassandra angeben, ob Sie eine MongoDB-äquivalente "Safe Mode" -Einfügung durchführen. (Ich erinnere mich nicht den Namen dieses Features in Cassandra)
Mit anderen Worten, Cassandra kann so konfiguriert werden, dass sie auf die Festplatte schreibt und dann im Gegensatz zur MongoDB-Standardkonfiguration zurückkehrt, die sofort nach der Ausführung einer Einfügung ohne zu wissen zurückkehrt, wenn die Einfügung erfolgreich war oder nicht. Es bedeutet nur, dass Ihre Anwendung niemals auf einen Pass / Fail vom Server wartet.
Sie können dieses Verhalten ändern, indem Sie den abgesicherten Modus in MongoDB verwenden, aber dies hat bekanntermaßen einen großen Einfluss auf die Leistung. Aktivieren Sie den abgesicherten Modus und Sie sehen möglicherweise andere Ergebnisse.
Sie werden die wahre Macht von Cassandra nutzen, sobald Sie mehrere Knoten laufen haben. Jeder Knoten kann eine Schreibanforderung annehmen. Das Multithreading eines Clients überflutet nur mehr Anfragen an dieselbe Instanz, was nach einem Punkt nicht hilft.
Darf ich vorschlagen, einen Blick auf Membase zu werfen? Es wird genau wie Memcached verwendet und ist vollständig verteilt, so dass Sie Ihre Schreibeingangsrate kontinuierlich skalieren können, indem Sie einfach weitere Server und / oder mehr RAM hinzufügen.
In diesem Fall werden Sie auf jeden Fall mit einem Client-Moxi arbeiten wollen, um die beste Leistung zu erzielen. Werfen Sie einen Blick auf unser Wiki: wiki.membase.org für Beispiele und lassen Sie mich wissen, wenn Sie weitere Anweisungen benötigen ... Ich bin glücklich, Sie durch es zu führen, und ich bin sicher, dass Membase diese Belastung leicht bewältigen kann / p>