Java - Cassandra com abundância de parâmetros em "IN"

votos
1

Eu estou escrevendo um aplicativo Java com Cassandra DB. Eu estou fazendo um pedido com abundância (mais de 100.000) parâmetros no meu cláusula 'IN':

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

Mas colocar algumas muitos parâmetros em IN parece ruim eu acho.

Eu também pode fazer muita pedido como este (mais uma vez, mais de 100.000 iterações):

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

Será que não é melhor, quer, muito longo.

Existe alguma API, padrão a seguir no meu caso?

Obrigado

Publicado 19/12/2018 em 14:17
fonte usuário
Em outras línguas...                            


1 respostas

votos
3

Se o person_idé chave de partição (como visto de consulta), em seguida, usando IN vai levar a uma série de problemas como ele vai sobrecarregar nó coordenador que terá de recolher os resultados de outros nós.

Neste caso, a maneira mais eficaz é a disparar pedidos individuais, mas realizá-las via executeAsync, então eles vão ser enviados para diferentes nós. Neste caso, você vai precisar para controlar quantas solicitações que você enviou, por exemplo, através de contagem do semáforo, e você pode precisar de parâmetros de conexão pooling de tempo que controlam número de pedidos em voo: https://docs.datastax.com/ en / programador / java-condutor / 3,6 / manual / pooling /

Respondeu 20/12/2018 em 13:05
fonte usuário

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