ScyllaDB ist besser als Cassandra, und hier ist der Grund dafür.

ScyllaDB ist eine der neuesten NoSQL-Datenbanken, die einen wirklich hohen Durchsatz bei Latenzen von weniger als einer Millisekunde bietet. Der wichtige Punkt ist, dass dies zu einem Bruchteil der Kosten einer modernen NoSQL-Datenbank erreicht wird.

ScyllaDB implementiert fast alle Funktionen von Cassandra in C ++. Aber zu sagen, es sei nur ein C ++ - Port, wäre eine Untertreibung. Die Entwickler von Scylla haben unter der Haube viele Änderungen vorgenommen, die für den Benutzer nicht sichtbar sind, aber zu einer enormen Leistungsverbesserung führen.

Du machst Witze, oder?

Nein, bin ich nicht.

Wie Sie sehen können (wenn Sie zu diesem Link gegangen sind), ist die Latenz von Scylla mit 99,9 Perzentilen in den meisten Fällen 5–10-mal besser als die von Cassandra.

Auch in den hier genannten Benchmarks bietet ein Standard-Scylla-Cluster mit 3 Knoten fast die gleiche Leistung wie ein Cassandra-Cluster mit 30 Knoten (was zu einer 10-fachen Kostenreduzierung führt).

Wie ist das möglich?

Der wichtigste Punkt ist, dass Scylla in C ++ 14 geschrieben ist. Es wird also erwartet, dass es schneller ist als Cassandra, die ausschließlich auf JVM läuft.

In Scylla gab es jedoch viele signifikante Optimierungen auf niedriger Ebene, wodurch es besser als seine Konkurrenz ist.

Shared-Nothing-Ansatz

Cassandra verlässt sich für die Parallelität auf Threads. Das Problem ist, dass Threads einen Kontextwechsel erfordern, der langsam ist.

Für die Kommunikation zwischen Threads müssen Sie außerdem den gemeinsam genutzten Speicher sperren, was wiederum zu einer Verschwendung von Verarbeitungszeit führt.

ScyllaDB verwendet das Seastar-Framework, um Anforderungen auf jedem Kern zu speichern. Die Anwendung hat nur einen Thread pro Kern. Auf diese Weise wird eine Sitzung, die von Kern 1 verarbeitet wird und eine Abfrageanforderung für diese Sitzung an Kern 2 gesendet wird, zur Verarbeitung an Kern 1 weitergeleitet. Jeder der Kerne kann die Antwort danach verarbeiten.

Der Vorteil des Shared-Nothing-Ansatzes besteht darin, dass jeder Thread über eigene Speicher-, CPU- und NIC-Pufferwarteschlangen verfügt.

In Fällen, in denen die Kommunikation zwischen Kernen nicht vermieden werden kann, bietet Seastar eine asynchrone, sperrenlose Kommunikation zwischen den Kernen, die hoch skalierbar ist. Zu diesen sperrenlosen Grundelementen gehören Futures und Promises, die in der Programmierung häufig verwendet werden und daher entwicklerfreundlich sind.

Kernel vermeiden

Wenn eine Zeile in einer SSTable gefunden wird, muss sie über das Netzwerk an den Client gesendet werden. Dies beinhaltet das Kopieren von Daten aus dem Benutzerbereich in den Kernelbereich.

Der Linux-Kernel führt jedoch normalerweise Multithread-Sperrvorgänge aus, die nicht skalierbar sind.

ScyllaDB erledigt dies mithilfe des Netzwerkstapels von Seastar.

Der Netzwerkstapel von Seastar wird im Benutzerbereich ausgeführt und verwendet DPDK für eine schnellere Paketverarbeitung. DPDK umgeht den Kernel, um die Daten direkt in den NIC-Puffer zu kopieren, und verarbeitet ein Paket innerhalb von 80 CPU-Zyklen. (Quelle: DPDK-Website)

Verlassen Sie sich nicht auf den Seiten-Cache

Der Seiten-Cache eignet sich hervorragend, wenn Sie über sequentielle E / A verfügen und Daten im Drahtformat auf der Festplatte gespeichert sind.

In Scylla / Cassandra haben wir jedoch Daten in Form von SSTables. Der Seiten-Cache speichert Daten im selben Format, das einen großen Speicherplatz für kleine Daten beansprucht und eine Serialisierung / Deserialisierung erfordert, wenn Sie sie übertragen möchten.

Anstatt sich auf den Seitencache zu verlassen, weist ScyllaDB den größten Teil seines Speichers dem Zeilencache zu.

Row-Cache verfügt über die Daten in einem optimierten Speicherformat, das weniger Speicherplatz beansprucht und keine Serialisierung / Deserialisierung erfordert

Ein weiterer Vorteil der Verwendung des Zeilencaches besteht darin, dass er nicht entfernt wird, wenn die Komprimierung erfolgt, während der Seitencache überlastet ist.

Dies sind die wichtigsten Optimierungen in ScyllaDB, die es viel schneller, zuverlässiger und billiger als Cassandra machen. Scylla hat viele andere Optimierungen unter der Haube, die hier zu finden sind.

Wenn Sie neugierig auf weitere Designs wie die oben genannten sind oder Kontakt aufnehmen möchten, setzen Sie sich mit mir auf LinkedIn oder Facebook in Verbindung oder senden Sie eine E-Mail an [email protected]