ИЗТРИВАНЕ на редове, съхранени в определен възел

Как мога да напиша CQL 3 DELETE спецификация на ред (WHERE клауза), която ще избере само редове, които се съхраняват в даден възел? Ако това не е възможно, има ли SELECT релация (WHERE клауза), която ще посочи кои редове се съхраняват в определен възел?

Искам да направя това, за да мога да имам демон за поддръжка (в Java), работещ на всеки възел за съхранение на данни, който изтрива стари записи от този възел, така че да може да гарантира, че неговият възел няма да изчерпи дисковото пространство. Тъй като пиша демон, вместо да извършвам еднократно почистване, не е подходящо да използвам програмата nodetool за запитване за диапазоните на токени, съхранени на възел.


person Raedwald    schedule 27.10.2014    source източник


Отговори (2)


Ето един начин, който може да работи (но вижте по-долу за по-добра идея). Ако не сте активирали vnodes, можете да идентифицирате диапазоните на токени (от тогава командата nodetool ring), след което да ги използвате като част от вашата команда за изтриване. Например:

delete from MyTable where 
    token(MyPK) >= Token1 and 
    token(MyPK) < Token2 and
    (your delete logic here)
;

Въпреки това, много по-прост и по-безопасен метод би бил просто да оставите Касандра да разбере къде са данните и просто да направите това от всеки възел:

delete from MyTable where 
    (your delete logic here)
;
person BrianC    schedule 28.10.2014

nodetool getendpoints ви казва кой възел притежава ключ за дял: http://www.datastax.com/documentation/cassandra/2.1/cassandra/tools/toolsGetEndPoints.html?scroll=toolsGetEndPoints__toolsGetEndPtEx

person catpaws    schedule 27.10.2014
comment
nodetool би било добре, ако изтривам записи като еднократно, използвайки cqlsh, но искам да напиша клиентска програма, която да извършва домакинството. - person Raedwald; 27.10.2014