Java - Cassandra z dużą ilością parametrów w "IN"

głosy
1

Piszę aplikacji Java z Cassandrą DB. Robię wniosek z dużą (ponad 100.000) parametry w moim „in” klauzuli:

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

Jednak wprowadzenie pewnych wiele parametrów w „W” wygląda źle myślę.

Mogę też zrobić mnóstwo zamówienie tak (po raz kolejny więcej niż 100000 iteracji):

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

Czy nie lepiej albo zbyt długo.

Czy istnieje API, wzór do naśladowania w moim przypadku?

Dziękuję Ci

Utwórz 19/12/2018 o 14:17
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
3

Jeśli person_idjest kluczem podziału (jak wynika z zapytania), a następnie za pomocą IN będzie prowadzić do wielu problemów, ponieważ będzie ona obciążać węzła koordynatora, który będzie musiał zbierać wyniki z innych węzłów.

W tym przypadku najbardziej skutecznym sposobem jest ogień indywidualnych żądań, ale wykonać je za pomocą executeAsync, więc zostaną one wysłane do różnych węzłów. W tym przypadku trzeba kontrolować, ile wnioski zostały wysłane, na przykład poprzez zliczanie semafor, plus być może trzeba czasowych parametrów puli połączeń, które kontrolują liczbę żądań w locie: https://docs.datastax.com/ pl / developer / java-kierowca / 3,6 / manual / łączenie /

Odpowiedział 20/12/2018 o 13:05
źródło użytkownik

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