Pourquoi suis-je à la lecture de plusieurs pierres tombales dans Cassandra table bien que mon modèle d'accès doivent les éviter

StackOverflow https://stackoverflow.com//questions/24053860

  •  21-12-2019
  •  | 
  •  

Question

Je sais que ce n'est pas la meilleure façon d'utiliser de Cassandra, mais le type de données nécessite la lecture de toutes les données de la dernière semaine.Cependant lors de l'utilisation de la Collection de types dans CQL3, j'ai couru dans certaines limites qui m'empêche de faire de la date normale de gamme requêtes.

Donc, j'ai mis en place Cassandra (actuellement seul nœud, sans doute plus à l'avenir) avec le tableau suivant

CREATE TABLE cache (tag text, id int, tags map<text,text>, 
  PRIMARY KEY (tag, id) );
ALTER TABLE cache WITH GC_GRACE_SECONDS = 0;

Je suis d'insertion avec une durée de vie d'une semaine de supprimer automatiquement les éléments à partir du Cache.

J'ai essayé de suivre les suggestions mentionnées dans cet article pour éviter de lire beaucoup de pierres tombales en sélectionnant par "minimum id", dont je persiste d'ailleurs à éviter la lecture des données anciennes:

SELECT * FROM cache WHERE tag = ? AND id >= ?

L'id est fondamentalement une sorte de timestamp qui est en constante augmentation, c'est à direJ'ai seulement insérer des valeurs plus élevées au fil du temps et constamment supprimer les id de la table.

Mais j'ai toujours des avertissements sur les seuils d'être atteint

WARN 08:59:06,286 Read 5001 live and 5702 tombstoned cells in cache (see tombstone_warn_threshold)

Et si je n'exécutez pas de compactage manuel/frotter régulièrement je reçois des exceptions et d'échec des requêtes.

Toutefois, d'après ma compréhension de l'article et de la documentation, je devrais être en évitant la plupart, si pas toutes les pierres tombales ici car j'ai une requête sur l'égalité pour le tag, qui permet de Cassandra pour seulement regarder pour ces domaines, et que j'utilise un code minimal qui permet de Cassandra pour démarrer la lecture seulement après que la plupart des pierres tombales, alors pourquoi il y a encore de désactivation des avertissements/exceptions signalées?

Était-ce utile?

La solution

Carte k/v de la paire est en fait une colonne (nom, la valeur et la date):donc, si vous êtes à la délivrance d'un lot de suppressions d'éléments de la carte (expirant par la durée de vie est également le cas) - ce qui est la source de cet avertissement.Parce que vous êtes toujours la lecture complète de cartes (avec beaucoup de pierres tombales en eux).Aussi, le paramètre de durée de vie sur la carte est appliquée sur chaque élément de base.

La seconde, c'est multipliée par >= prédicat dans votre requête select.

Si c'est le cas, vous devez rénover votre schéma d'accès aux données à utiliser uniquement EQ relations dans la requête de sélection et à la bosse id le plus souvent.Aussi, ce modèle d'accès permettra de vous débarrasser de clustering partie de votre CLÉ PRIMAIRE.

Donc, si vous n'avez pas de problème de beaucoup de suppressions sur cette carte, vous pouvez essayer d'utiliser tag text, time timeuuid, name text, data text modèle et coupez-le en tranches précisément par le temps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top