Java - Cassandra avec beaucoup de paramètres "IN"

voix
1

J'écris une application Java avec Cassandra DB. Je fais une demande avec des paramètres beaucoup (plus de 100.000) dans mon article « IN »:

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

Mais mettre des nombreux paramètres « IN » est mauvais je pense.

Je peux aussi faire beaucoup de demande comme celui-ci (encore une fois plus de 100 000 itérations):

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

Est-ce pas mieux non plus, trop longtemps.

Y at-il API, modèle à suivre dans mon cas?

Je vous remercie

Créé 19/12/2018 à 14:17
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
3

Si l' person_idest la clé de la partition (comme on le voit de la requête), puis en utilisant IN conduit à beaucoup de problèmes car il surchargerez noeud coordinateur qui devra recueillir les résultats des autres noeuds.

Dans ce cas , la façon la plus efficace consiste à tirer des demandes individuelles, mais les exécuter via executeAsync, ils seront envoyés à différents noeuds. Dans ce cas , vous aurez besoin de contrôler le nombre de demandes que vous avez envoyé, par exemple via le comptage sémaphores, plus vous devrez peut - être des paramètres de mise en commun de connexion en temps réel qui contrôlent nombre de demandes en vol: https://docs.datastax.com/ fr / développeur / java-pilote / 3.6 / manuel / mise en commun /

Créé 20/12/2018 à 13:05
source utilisateur

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