2015-10-05 16 views
7

ich mit Cassanda Paginierung von großen Ergebnismengen zu tun 2.2 das Java-Client und PagingState mit wie hier beschrieben: https://datastax.github.io/java-driver/2.2.0-rc2/features/paging/Wie Cassandra Paginierung auf gleichzeitige Einsätzen verhält

, das ziemlich gut funktioniert, aber ich irgendwelche Informationen nicht finden kann, wie Cassandra, wenn verhält Beim Blättern durch die Ergebnisse werden neue Datensätze eingefügt (oder vorhandene werden aktualisiert). Sind solche neuen oder geänderten Datensätze im Ergebnis enthalten oder ist das Ergebnis unveränderlich?

Der Anwendungsfall ist ein zustandsloser Webdienst, bei dem ein Client große Ergebnismengen abfragen kann.

EDIT: Gleiche Frage für ResultSet Paging im Allgemeinen (Cassandra automatische faul nicht holen hier)

EDIT2: Mein Wissen Cassandra unterstützt keine Säuren aber AID-Transaktionen, so würde ich eine Art Isolation hier erwarten, wenn gehen durch die Ergebnismenge

Antwort

5

Es gibt keine solche Isolierung, da es zu teuer wäre, sie zu implementieren. Die gesamte Ergebnismenge wird nicht im Speicher gehalten, und die Zeilen, die auf der nächsten Seite zurückgegeben werden, sind nicht bekannt, wenn die aktuelle Zeile an den Client gesendet wird.

Eine interessante Folge davon ist, dass es die BATCH-Update-Garantie bricht, angegeben in der Dokumentation als:

Alle Updates in einem @ BATCH @ auf einer bestimmten Partition Schlüssel gehören, werden in Isolation ausgeführt.

Es gibt eine offene issue darüber.

Es gibt auch einige Auswirkungen auf die Leistung, da viel Arbeit zum Abrufen der Seite n erneut ausgeführt werden muss, um die Seite n + 1 abzurufen (z. B. Öffnen und Lesen von Indexdateien und Datendateien). Scylla, ein Drop-in-Ersatz für Cassandra, an dem ich mitarbeite, arbeitet an fixing this.