Java - Cassandra mit vielen Parametern in "IN"

stimmen
1

Ich bin eine Java-Anwendung mit Cassandra DB zu schreiben. Ich mache eine Anfrage mit vielen (mehr als 100.000) Parameter in meinem ‚IN‘ -Klausel:

SELECT country, gender FROM persons WHERE person_id IN (1,7,18, 34,...,)

Aber einige viele Parameter setzen in „IN“ sieht schlecht aus, denke ich.

Ich kann auch viel Anfrage wie diese (wieder einmal mehr als 100.000 Iterationen) machen:

for (Integer id : ids) {
    ResultSet res = session.execute(preparedStatement(id));
    //processing with data from Cassandra
}

Ist es nicht besser, entweder zu lang.

Gibt es eine API, Muster in meinem Fall zu folgen?

Vielen Dank

Veröffentlicht am 19/12/2018 um 14:17
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
3

Wenn die person_idPartition Schlüssel ist (wie von Abfrage zu sehen ist ), dann wird unter Verwendung von IN zu vielen Problemen führen , wie es Koordinatorknoten überlastet wird , die Ergebnisse von anderen Knoten sammeln müssen.

In diesem Fall ist der effektivste Weg, um individuelle Anforderungen zu feuern, sondern führen sie über executeAsync, so werden sie an verschiedenen Knoten gesendet werden. In diesem Fall werden Sie steuern müssen, wie viele Anfragen Sie gesendet haben, zum Beispiel über das Zählen Semaphore, plus Sie können Zeit Verbindungspooling Parameter müssen , die im Fluge Anzahl der Anfragen zu steuern: https://docs.datastax.com/ en / Entwickler / java-Treiber / 3.6 / manual / Pooling /

Beantwortet am 20/12/2018 um 13:05
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more