Perché sto leggendo molte lapidi a Cassandra Table anche se il mio modello di accesso dovrebbe evitarli

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

  •  21-12-2019
  •  | 
  •  

Domanda

So che questo non è il modo migliore per usare Cassandra, ma il tipo dei miei dati richiede di leggere tutti i dati dall'ultima settimana. Tuttavia, quando si utilizzano i tipi di raccolta in CQL3, ho corso a determinate limitazioni che mi impediscono di fare normali query della gamma di data.

Così ho impostato Cassandra (attualmente nodo singolo, probabilmente più in futuro) con la seguente tabella

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

Sto inserendo con un TTL di una settimana per rimuovere automaticamente gli elementi dalla cache.

Ho provato a seguire i suggerimenti menzionati in Questo articolo per evitare di leggere molte lapidi selezionando per" ID minimo ", che persistono altrove per evitare di leggere i vecchi dati:

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

L'ID è fondamentalmente una sorta di timestamp che è in costante aumento, cioè inserisco solo valori più alti nel tempo e rimuovono costantemente gli ID anziani dalla tabella.

Ma ho ancora avvertimenti sulle soglie raggiunte

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

E se non eseguo la compattazione / lavaggio manuale / strofinare regolarmente ottengo eccezioni e query falliscono.

tuttavia basato sulla mia comprensione degli articoli e della documentazione, dovrei evitare di più se non tutte le pietre tombe qui come query su uguaglianza per il tag, che consente a Cassandra di cercare solo quelle aree e uso un ID minimo che consente Cassandra per iniziare a leggere solo dopo la maggior parte delle lapidi, quindi perché ci sono ancora avvertimenti / eccezioni della tomba?

È stato utile?

Soluzione

Mappa K / V Coppia è in realtà una colonna (nome, valore e timestamp): Quindi, se stai emettendo molte eliminazioni di elementi di mappa (in scadenza da TTL è anche il caso) - questa è la fonte di questoavvertimento.Perché stai ancora leggendo le mappe complete (con un sacco di tombali in loro).Inoltre, l'impostazione TTL sulla mappa è applicata su base per elemento.

In secondo luogo, questo è moltiplicato per>= predicato nella tua query di selezione.

Se questo è il caso, è necessario ristrutturare il modello di accesso ai dati per utilizzare solo le relazioni EQ in Seleziona query e Bump id più spesso.Inoltre, questo modello di accesso ti consentirà di sbarazzarsi della parte clustering della chiave primaria.

Quindi, se non emetti molte delezioni su quella mappa, puoi provare a utilizzare il modello tag text, time timeuuid, name text, data text e tagliarlo con precisione dal tempo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top