quale sarebbe la strategia di compattazione per ottenere prestazioni migliori nelle query Range su colonne in cluster

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

  •  21-12-2019
  •  | 
  •  

Domanda

Ho il tavolo Cassandra

CREATE TABLE schema1 (
  key bigint,
  lowerbound bigint,
 upperbound bigint,
 data blob,
  PRIMARY KEY (key, lowerbound,upperbound)
) WITH COMPACT STORAGE ;

Voglio eseguire una query di intervallo utilizzando CQL

Select lowerbound, upperbound from schema1 where key=(some key) and  lowerbound<=123 order by lowerbound desc limit 1 allow filtering; 

Qualsiasi suggerimento per favore riguardo alla strategia di compattazione
Nota: la mia razione di lettura:scrittura è 1:1

È stato utile?

Soluzione

La compattazione livellata significherà meno SSTAFS sono coinvolti per le tue query su una chiave, ma richiede IO in più.Inoltre, durante la compattazione utilizza il 10% di disco in più rispetto ai dati, mentre per la compattazione a più livelli, è necessario il doppio.Quale è meglio dipendere dalla configurazione, dalle query, ecc. Stai vivendo problemi di prestazioni?In caso contrario, e se potessi affrontare l'Extra IO, potrei scegliere livellato come significa che non devo mantenere il 50% del headroom in termini di spazio su disco per la compattazione.Ma di nuovo, non c'è "un" modo giusto ".

Forse leggi questo: http://www.datasax.com/dev/blog/levelato-Compazione-in-Apache-Cassandra

Altri suggerimenti

La compattazione a livelli di dimensione è l'impostazione predefinita e dovrebbe essere appropriata per la maggior parte dei casi d'uso.Nel 2012 DataStax ha pubblicato un articolo intitolato Quando utilizzare la compattazione livellata, in cui specificava tre condizioni (principali) per le quali la compattazione livellata era una buona idea:

  1. Elevata sensibilità alla latenza di lettura (le tue query devono soddisfare uno SLA di latenza nel 99° percentile).
  2. Rapporto lettura/scrittura elevato
  3. Le righe vengono aggiornate frequentemente

Identifica inoltre tre scenari in cui la compattazione livellata non è una buona idea:

  1. I tuoi dischi non possono gestire l'I/O di compattazione
  2. Carichi di lavoro pesanti in scrittura
  3. Le righe sono scrivibili una volta

Nota come nessuno dei sei scenari menzionati sopra è specifico per le query di intervallo.

La mia domanda sarebbe "Quale problema stai cercando di risolvere?" Hai menzionato "esibendosi meglio", ma ho scoperto che i problemi di prestazione delle query tendono ad essere più legati alla progettazione del modello di dati.Cambiare la strategia di compattazione non sarà di grande aiuto se stai utilizzando una strategia di chiave primaria inefficiente.In virtù del fatto che la tua query richiede ALLOW FILTERING, direi che cambiare la strategia di compattazione non aiuterà molto.

I documenti DataStax contengono una sezione su Affettare su righe di partizione, che sembra essere in qualche modo simile alla tua query.Dategli un'occhiata e vedete se aiuta.

Quando le righe sono frequentemente aggiornate Dall'articolo Datasatx Sia che tu abbia a che fare con le righe skinny in cui le colonne vengono sovrascritte frequentemente (come un timestamp "Ultima accesso" nella famiglia di colonne utente) o su larghe righe in cui le nuove colonne vengono costantemente aggiunte, quando si aggiorna una riga con la compattazione stanca di dimensioni, lo faràessere diffuso su più SSTAFS.La compattazione livellata, d'altra parte, mantiene il numero di SSTAFS che la riga è distribuita attraverso molto bassa, anche con aggiornamenti di riga frequenti.

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