2017-07-01 2 views
0

Je travaille sur la conception de la famille de colonnes Cassandra.Comment Cassandra Gérer une requête de sélection?

J'ai rencontré une situation de GC plus élevé lors de la sélection, après le chargement d'une densité de données plus élevée. C'est-à-dire, la quantité de données dans une partition a augmenté. Aussi pour les données de faible densité, cela fonctionne bien.

Je veux savoir comment Cassandra fait la requête SELECT (avec la partition et la clé de cluster spécifiées)?

L'ensemble des données d'une partition est-il chargé en mémoire pendant l'exécution de SELECT?

Un grand nombre de clés de partition affectera-t-il les performances?

+0

S'il vous plaît ajouter les exemples de requête et aussi élaborer sur ce que vous entendez par haute densité et faible destinée. Interroge-t-il avec ou sans clé de cluster et chaque partition est haute ou basse sur les colonnes de clustering associées? – dilsingi

+0

La structure de la table est comme ceci - PRIMARY KEY (A, B, C). La table a peu de champs (p, q, r, s, t) aussi. Exemple de requête - SELECT p, q, r, s, t FROM table où A =? ET B = ?; – kjk

+0

La densité de données augmente à mesure que plus d'entrées B et C sont insérées. – kjk

Répondre

0

Cassandra ne charge pas toute la partition en mémoire, mais charge les objets IndexInfo qui aident Cassandra à trouver les lignes CQL pertinentes dans la partition. Ce sont des objets java de courte durée qui peuvent créer beaucoup de pression de tas (pauses GC) - c'est un problème de conception qui sera abordé dans CASSANDRA-9754 (appelé Birch, une implémentation b-tree de la structure de données d'index). Jusqu'à ce que cassandra-4.0 soit libéré, vous devez cibler 100 Mo pour votre taille de partition maximale et fractionner les plus grandes partitions en plus petites parties.

+0

Merci Jeff. Si j'augmente le nombre de partitions (nombre de partitions <2^63), comment cela va-t-il affecter les performances de Cassandra? Lire particulièrement les performances? – kjk

+1

Beaucoup de partitions est très bien. Vous pouvez même aller au-dessus de 2^63, si vous avez autant de données (cassandra peut gérer plusieurs clés de partition avec le même jeton). Vous ne voulez vraiment que des données dans une partition si vous l'interrogez ensemble, où Cassandra peut regrouper les données (triées) sur le disque et les récupérer dans les groupes. Si vous ne saisissez pas beaucoup de lignes d'une partition, brisez-le. En outre, si vous avez plusieurs partitions, vous pouvez lancer plusieurs appels SELECT asynchrones à la fois et paralléliser plus efficacement les requêtes. –