2016-06-22 9 views
1

Betrachten Sie dieses Szenario, wir sammeln Finanzmarktdaten (z. B. den Preis des Fonds) und speichern sie in einer SQL-Tabelle.Ist Cassandra eine gute Wahl für diese Art von Zeitreihendaten vs SQL-Server?

Normalerweise Fondspreise höchstens einmal am Tag, so kann der Tisch sein:

FundId Date  Price1  Price2 

Wenn wir einige Daten wollen, eine einfache Abfrage tun:

select Date, Price1, Price2 from FundPriceTable where Date between XX and XX 

Doch wie wir gesammelt mehr und mehr Daten, begann die obige Abfrage Leistung zu sinken. Wir haben versucht, die Statistiken neu zu indizieren und zu aktualisieren. Das Problem ist, dass wenn wir eine große Menge an Daten abrufen (z. B. 10 Jahre Geschichte für 1000 Fonds), kann es eine Weile dauern.

Ich frage mich für dieses Szenario (kein Beitritt überhaupt), wird System wie Cassandra irgendwelche Leistungsvorteile zeigen (gleiche Hardware vorausgesetzt)?

Ich habe versucht, einige Benchmark-Artikel zwischen Cassandra und SQL Server für Zeitreihen zu finden, leider nichts gefunden.

Antwort

1

Hängt von Ihrem Schema ab. Der Leistungsschub hängt von Ihrem Partitionsschlüssel ab. In Ihrem Beispiel: Sie können Ihre Daten nach Tag oder Monat aufteilen. Dieses Beispiel ist durch Monat aufgespießt:

fundPricesByDay (month int, timestamp timestamp, productId text, Price1 float, Price2, PRIMARY KEY(month, timestamp, productId)) 

Wenn Sie alle Daten zwischen dem ersten und dem dritten Monat benötigen, können Sie 3 Abfragen ausführen können:

select * from fundPricesByDay where month = 1 AND timestamp > 60000; 
select * from fundPricesByDay where month = 2; 
select * from fundPricesByDay where month = 3 AND timestamp < 99999; 

Mit diesen drei Fragen werden Sie alle Daten zwischen Zeitstempel erhalten 60000 und 99999. Sie führen jedoch alle Abfragen auf verschiedenen vNodes aus. Dies bedeutet, dass jeder Knoten weniger Zeilen als SQL verarbeiten muss. Es macht einen Leistungsschub. Lesen Sie ein bisschen mehr darüber, wie Cassandra funktioniert und Sie werden verstehen, wie Sie Ihre Tische verbessern können.

Sie fragen explizit nach der gleichen Hardware. Vielleicht gibt es keinen Leistungsschub. Benchmark einfach es. Aber Cassandra wird definitiv in der Kombination von Skalierbarkeit und Leistung gewinnen. SQL hat seine Grenzen (hängt von der Hardware ab, Clustering ist möglich, aber kompliziert in der Implementierung und hat auch seine Einschränkungen). Cassandra hat diese Einschränkungen hinsichtlich Skalierbarkeit und Leistung nicht. (oder besser: Es ist wirklich schwierig, ein Limit zu erreichen, wenn Sie ein gutes Schema haben.)

+0

Danke, ich mache ein paar erste Nachforschungen, so Setup wie Sie gesagt, wird einige Zeit dauern. Werden die drei Abfragen, die Sie erwähnt haben, gleichzeitig automatisch ausgeführt oder müssen Sie in meinem Code mehrere Threads erstellen? – daxu

+0

Hängt von Ihrer Sprache ab, aber Sie können den gesamten Code asynchron abfragen. Ich arbeitete mit dem scala, php und nodejs Treiber und in allen Treibern ist eine asynchrone Option. –

Verwandte Themen