2013-03-29 5 views
15

Gibt es irgendwelche eindeutigen Vorteile für die Verwendung von cql über Sparsamkeit oder ist es einfach ein Fall von Entwicklern zu SQL gewohnt? Ich will von Sparsamkeit Abfrage zu CQL wechseln, das einzige Problem ist, ich bin mir nicht sicher über die Nachteile davon. Was sind Sie?Vorteile der Verwendung von cql über Sparsamkeit

Antwort

17

Abfrage
In CQL Sie cassandra abfragen und erhalten Daten in ein paar Zeilen (mit JDBC-Treiber):

String query = "SELECT * FROM message;"; 
PreparedStatement statement = con.prepareStatement(query); 

Während in Secondhand-basierte API ist es etwas komplizierter (Beispiel mit Astyanax):

OperationResult<ColumnList<String>> result = 
    keyspace.prepareQuery(mail/*specify columnfamily structure*/) 
      .getKey("[email protected]").execute(); 
ColumnList<String> columns = result.getResult(); 

Leistung
Basierend auf den benchmarks von Acunu ausgeführt wird, ist Thrift (RPC) in Bezug auf die Abfrageleistung etwas vor CQL, aber Sie müssen in einer Situation sein, in der ein hoher Durchsatz der Schlüssel zu diesem Leistungsvorteil ist, um einen signifikanten Vorteil zu haben.


Einige ausgezeichnete Artikel zum Nachschlagen sind:

EDIT

Die oben genannten Benchmarks sind veraltet, die Paul newer benchmarks on prepared statements zur Verfügung gestellt.

+4

CQL erlaubt Ihnen immer noch variable Spalten in der zugrunde liegenden Datenstruktur, es stellt sie nur durch Muster aus. Zum Beispiel die Möglichkeit, Karten, Sets und Listen zu erstellen. Welche unter der Haube sind alle als variable Spaltennamen implementiert. CQL3 versucht, die Dinge, für die die Leute variable Spalten verwendet haben, zu übernehmen und diese Konzepte auf höherer Ebene zu exportieren. Der folgende Artikel geht über einige davon: http://www.datastax.com/dev/blog/thrift-to-cql3 – Zanson

+0

@Zanson Hast du meine Antwort gelesen? Beachten Sie, dass dieser Artikel ein Link darin ist. –

+1

Ja, ich habe es gelesen, du hast den Artikel verlinkt, aber keinen der Punkte erwähnt, die er macht. Und Sie riefen "keine variablen Spaltennamen" als Nachteil von CQL aus, wenn CQL Funktionalität bietet, um die meisten Dinge zu tun, für die variable Spaltennamen nützlich sind, ohne sie zu benötigen. – Zanson

22

Lyubens Antwort ist eine gute, aber ich glaube, er kann in einigen Punkten falsch informiert werden. Zunächst sollten Sie beachten, dass die Thrift-API keine neuen Funktionen erhält. Es ist da für Rückwärtskompatibilität und nicht für neue Projekte empfohlen. Es gibt bereits einige Funktionen, die nicht über die Thrift-Schnittstelle verwendet werden können.

Ein weiterer Faktor ist, dass die zitierten Benchmarks von Acunu irreführend sind; Sie messen nicht die Leistung von CQL mit vorbereiteten Anweisungen. Siehe zum Beispiel die Graphen unter https://issues.apache.org/jira/browse/CASSANDRA-3634 (wahrscheinlich derselbe Datensatz, auf dem der Acunu-Post basiert, da Eric Evans beides geschrieben hat). Es gab auch einige Verbesserungen bei der CQL-Analyse und der Ausführungsgeschwindigkeit im letzten Jahr. Es ist nicht wahrscheinlich, dass Sie einen echten Geschwindigkeitsunterschied zwischen CQL 3 und Thrift beobachten werden.

Schließlich glaube ich nicht einmal, dass Thrift flexibler ist. Das CQL 3-Datenmodell erlaubt die Verwendung der gleichen Datenstrukturen, die Thrift für fast alle Verwendungen, die keine Antipattern sind, verwendet; Es erlaubt Ihnen, über das Modell in einer organisierten Weise nachzudenken. Zum Beispiel erwähnt Lyuben Zeilen mit unterschiedlicher Anzahl von Spalten. Eine CQL 3-Tabelle kann diese Fähigkeit noch nutzen: Es gibt einen Unterschied zwischen "Speicher-Engine-Zeilen" (was Cassandras niedriger Speicher ist und was Thrift direkt verwendet) und "CQL-Zeilen" (was Sie über die Thrift-Schnittstelle sehen). CQL macht nur die zusätzliche Arbeit, die erforderlich ist, um breite Speichermodulzeilen als strukturierte Tabellen zu visualisieren.

Es ist ein wenig schwierig, in einer schnellen SO-Antwort zu erklären, aber siehe this post für eine etwas sanfte Erklärung.