2017-08-22 1 views
0

Ich muss zwei Tabellen in Cassandra vergleichen, um die Unterschiede zu erhalten. Hier ist die Anforderung. Wir müssen Inventurzählung durchführen, wo wir alle Artikel auf Lager eingeben und scannen, und nach dem Ende werden wir alle mit der Hauptbestandstabelle vergleichen, um die Abweichung zu erhalten. Ich habe eine temporäre Tabelle in Cassandra erstellt, in die ich einen Datensatz für jeden Scan einfügen werde.Wie zwei Tabellen in Cassandra zu vergleichen

**TempInventory** 

userId 
storeId 
skuId 
PK(storeId, skuId) 

Ich habe Master-Tabelle mit anderen Details -

**Inventory** 

storeId 
skuId 
skuDesc 
.. 
.. 
PK(storeId) 

Sobald dann anschließend auf abgeschlossen Scan I tempInventory mit Inventar Tabelle vergleichen muß, um die Unterschiede zu bekommen. Was ist also der beste Weg, dies in Kassandra zu tun, da wir nicht verwenden können Joins -

  1. Holen Sie sich alles in Java-Klasse in Sammlung von Objekten und dann vergleichen (Verwenden Sie Java 8-Funktionen für eine bessere Leistung) [in diesem Fall Inventar Tisch Größe kann mehr als 3000 sein. So wird es gut sein, alles in JVM zu bekommen)
  2. Verwenden Sie Spark SQL mit Cassandra, die Joins verwenden können (Spark ist neu für mich, so hat keine bessere Idee. Einige Links von Beispielen wäre hilfreich)
  3. Gibt es noch ein anderes Programm (zB von Apache)
  4. Ich benutze Gemfire auch. Aber ich denke, wir können keine Region in Gemfire mit Composite-Key erstellen. Bitte korrigieren Sie mich.

Bitte schlagen Sie vor, welcher Ansatz am besten geeignet ist.

Antwort

0

Richtig, Cassandra bietet keinen eingebauten Mechanismus zum Vergleichen mit Tabellen, Sie müssen es selbst tun.

Ein erster Vorschlag wäre, den gleichen Primärschlüssel in beiden Tabellen zu verwenden. Müssen Sie skuId in der PK Ihrer temporären Tabelle hinzufügen? Dies würde das Abrufen der zu vergleichenden Daten erschweren.

Ich würde sagen, die Antwort hängt von der Menge der Daten ab, die Sie verarbeiten müssen. Wenn Sie eine große Menge (Hunderte von GB oder mehr) haben, wäre es sinnvoll, Spark oder Storm zu verwenden, um die Stream-Verarbeitung durchzuführen. Wenn Sie nicht so viel haben, können Sie ein einfaches Java-Programm verwenden. Es könnte eine Weile dauern, um abzuschließen, aber Sie müssen nicht Spark oder Storm einfügen.

+0

Danke. Mehrere Benutzer können scannen und sie können denselben sku scannen. Wir brauchen also keine doppelten Zeilen für denselben SKU. Deshalb ist sku ein Teil von PK. – Saurabh

Verwandte Themen