2009-11-20 3 views
6

Quindi vedo che Cassandra non ha il bilanciamento automatico del carico, che viene visualizzato quando si utilizza il partizionatore ordinato (un certo intervallo comune di valori di un gruppo di righe verrebbe memorizzato su un numero relativamente ridotto di macchine che servirebbero la maggior parte di le domande).
What's The Best Practice In Designing A Cassandra Data Model?Cassandra bilanciamento del carico con un partizionatore ordinato?

Sono ancora nuovo a Cassandra e come funziona. come fare per evitare questo problema, in modo che le query di intervallo siano ancora possibili? Non ho avuto veramente l'idea di risposte precedenti (URL collegato) sull'applicare un hash alle chiavi.

+0

Ho trovato ulteriori dettagli sull'idea "l'aggiunta di hash alle chiavi" in questo blog http://blog.evanweaver.com/articles/2009/07/06/up-and-running-with-cassandra/ – deepblue

risposta

4

Penso che questo problema sia meglio ripreso nella mailing list di cassandra-user; quello è dove le persone sono.

Cassandra non ha il bilanciamento automatico del carico eppure ma potrebbe farlo in un futuro non troppo lontano. Il ramo 0.5 potrebbe essere capace di questo ora.

In sostanza, quando si esegue il bootstrap di un nodo su un sistema già in esecuzione, dovrebbe trovare un punto nell'anello che bilancia meglio il carico e si metta lì. Se si aggiungono nodi uno alla volta (ad esempio, se un nodo termina il bootstrap prima di aggiungerne un altro), questo dovrebbe funzionare piuttosto bene, a condizione che la distribuzione delle chiavi non cambi troppo nel tempo.

Tuttavia, le chiavi potrebbero cambiare nel tempo (soprattutto se sono basate sul tempo), quindi è consigliabile una soluzione alternativa.

Dipende da ciò che si desidera scansionare. Se è sufficiente selezionare la scansione PARTE della chiave, è possibile eseguire l'hash del bit su cui non si desidera eseguire la scansione dell'intervallo e utilizzarlo come prima parte della chiave.

userò il termine "partizione" qui per fare riferimento alla parte della chiave che non si vuole variare la scansione

function makeWholeKey(partition, key) { 
    return concat(make_hash(partition), partition, key); 
} 

Ora, se si vuole variare la scansione delle chiavi all'interno di una determinata partizione , è possibile impostare la scansione tra makeWholeKey (p, start) e makeWholeKey (p, end)

Ma se si desidera eseguire la scansione delle partizioni, si è fuori di sorte.

Ma è possibile rendere i nodi dotati di token distribuiti in modo uniforme attorno all'intervallo di output make_hash(), e si otterranno dati distribuiti in modo uniforme (presupponendo di avere ENOUGH partizioni che non si accumulano tutti su uno o due valori hash)

8

Come menzionato sull'altro post, Cassandra 0.5 supporta il bilanciamento del carico semiautomatico, dove tutto ciò che dovete fare è dire a un nodo di bilanciare il carico e si sposterà automaticamente su un posto più occupato sul token ring.

Questo è trattato nel http://wiki.apache.org/cassandra/Operations

+0

il collegamento non funziona più. Ci invia a una pagina che dice che la documentazione è stata spostata e che la destinazione ci porta alla radice della documentazione ... Inoltre, non capisco cosa intendi per * «dire a un nodo di loadbalance» *. Perché dovrei dire a qualcuno qualcosa ?! Inoltre, non è chiaro il motivo per cui si desidera spostare in un luogo più occupato, il bilanciamento del carico è generalmente il contrario. Forse potresti provare a chiarire? –

1

partizionamento dei dati tra cluster è controllata dal parametro partitioner in cassandra.yaml:

partitioner: org.apache.cassandra.dht.Murmur3Partitioner 

Utilizzando Murmur3Partitioner genererà codice hash casuale per Key Row ed eseguire il bilanciamento del carico.

Con Cassandra 2.0, è possibile memorizzare più token (256) in un singolo server, il che aiuterà anche nel bilanciamento del carico. Non è una buona pratica usare OrderPreservingPartitioner ed è deprecato.

+0

Si noti che la domanda si poneva nel 2009 intorno ai tempi di Cassandra 0.5 ... Detto questo, sono d'accordo sul fatto che il partizionatore è quello che è generalmente previsto per bilanciare il carico di un cluster Cassandra. –