2017-02-04 5 views
2

Ich habe eine Tabelle, die etwa 500M Datensätze in Cassandra enthält. Ich muss alle diese Datensätze übergeben und einige Verarbeitung durchführen, dann die verarbeiteten in andere Tabellen einfügen. Aufgrund von Speicherproblemen muss ich diese Datensätze als Chunks abrufen. Gibt es eine Möglichkeit, das zu tun? Zum Beispiel, im ersten Chunk muss ich die ersten 2M bekommen, dann in der zweiten muss ich die zweite 2M und so weiter abrufen.Abrufen von Chunks von Daten aus Cassandra

+0

Ich persönlich nicht sicher, dass Cassandra ist gut DB für diese Zwecke .. – Andremoniy

+0

Danke für Sie beantworten, aber warum? –

+1

Es ist keine Antwort, nur ein Kommentar. IMHO Cassandra beabsichtigte, Operationen schnell einzufügen, Zähler zu aktualisieren und durch Tastenfolgen nach einer kleinen Anzahl von Zeilen zu suchen, nicht um Millionen von Zeilen zu durchlaufen. – Andremoniy

Antwort

2

Wenn Sie nur eine normale execute Methode ausführen, erhalten Sie eine ResultSet zurück. Wie in der Dokumentation festgestellt:

Der Abruf der Zeilen eines ResultSet allgemein ausgelagert wird (eine erste Seite des Ergebnisses geholt und das nächste ist nur geholt, wenn alle Ergebnisse der ersten verbraucht worden ist) . Die Größe der Seiten kann entweder global über QueryOptions.setFetchSize (int) oder per-Anweisung mit Statement.setFetchSize (int) konfiguriert werden. Obwohl neue Seiten bei Bedarf automatisch (und transparent) abgerufen werden, ist es möglich, den Abruf der nächsten Seite durch fetchMoreResults() vorzeitig zu erzwingen.

So können Sie nur eine Abfrage für alle Daten ausführen und legen Sie die Abrufgröße auf Ihre Chunk-Größe. Dann durchlaufen Sie Ihre ResultSet, bis Sie Ihren Klumpen von Datensätzen haben, verarbeiten, einfügen, und beginnen Sie erneut zu iterieren.