2016-06-28 21 views
0

Ich bekomme CSV-Dateien, lesen Sie diese Dateien und schreibe sie an Cassandra. Ich mache das für viele Daten (ungefähr 10 Millionen Zeilen pro Tag) Die Dateien selbst sind ziemlich klein (von 100 bis 1000 Zeilen)Überprüfen Sie, ob Daten für viele Daten bereits vorhanden sind

Was ich tun möchte, ist zu überprüfen, bevor ich sie in die Datenbank schreibe, wenn die primäre Schlüssel, den ich einfügen möchte, existiert bereits.

Ich weiß, ich kann es mit Select count(*) from table where primary key1 = something and key2 is something else tun.

Aber das ist langsam, ich möchte für eine ganze Datei in 1 gehen, wenn es um Daten, die bereits in Cassandra ist, zu tun, und ich will (muss) es schnell sein. Gibt es eine Möglichkeit zu erreichen, was ich will? (oder etwas Ähnliches, wie die Überprüfung pro Batch, wenn es Zeilen betrifft)

+0

Könnten Sie schreiben Sie Tabellenschema? Insbesondere welcher Schlüssel ist eine Partition und welches Clustering (falls vorhanden)? – yurgis

Antwort

1

Sie können IF NOT EXIST in INSERT-Anweisungen und IF EXIST in UPDATE-Anweisungen verwenden. Die Leistung ist besser als das Zählen aller Zeilen, aber im Vergleich zum Einfügen, ohne zu prüfen, langsam. Cassandra muss alle Knoten auf vorhandene Primärschlüssel prüfen.

Dokumentation für INSERT: https://docs.datastax.com/en/cql/3.1/cql/cql_reference/insert_r.html

und für UPDATE: https://docs.datastax.com/en/cql/3.1/cql/cql_reference/update_r.html

+0

Das gibt mir keine Rückmeldung, welche Artikel nicht richtig eingefügt wurden? – Proliges

+0

Sie erhalten ein wahr oder falsch. Erstellen Sie ein leichtgewichtiges Skript. Sie erstellen für jede Zeile einen CQL-Befehl, und Sie können den False mit Zeilennummern protokollieren. –

+0

Es macht eigentlich Sinn, es funktioniert, aber ich denke, es ist langsam. Wenn die Zahlen in der Datenbank zunehmen, dauert die IF NOT EXISTS zu viel Zeit. Ich werde dies im Hinterkopf behalten, da es tut, was ich will, aber ein bisschen zu langsam. – Proliges

Verwandte Themen