删除存储在特定节点上的行

时间:2014-10-27 11:50:12

标签: cassandra delete-row

如何编写只选择存储在给定节点上的行的CQL 3 DELETE 行规范WHERE子句)?如果不可能,是否有SELECT 关系WHERE子句)指示哪些行存储在特定节点上?

我想这样做,所以我可以在每个数据存储节点上运行一个管家守护进程(在Java中),该节点从该节点删除旧记录,因此它可以确保其节点不会耗尽磁盘空间。在编写守护程序时,不是执行一次性清理,而是使用nodetool程序查询存储在节点上的令牌范围是不合适的。

2 个答案:

答案 0 :(得分:1)

这是可行的一种方式(但请参阅下面的更好主意)。如果您没有启用vnode,则可以识别令牌范围(从nodetool ring命令),然后将其用作删除命令的一部分。例如:

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

然而,更简单,更安全的方法是让Cassandra弄清楚数据的位置,并从任何节点执行此操作:

delete from MyTable where 
    (your delete logic here)
;

答案 1 :(得分:0)