2016-08-25 55 views
0

我有一个卡桑德拉表,检查Cassandra中是否存在已过滤行的最佳方法?通过用户定义的聚合?

CREATE TABLE read_locks (
    parent_path text, 
    filename text, 
    instance text, 
    PRIMARY KEY ((parent_path, filename), instance) 
); 

按道理我想通过下面的语句来检查任何锁的存在上的文件:

select count(*)>0 as result from read_locks where parent_path='...' and filename='...'; 

当然,我至少有2个实现。

select count(*) as result from read_locks where parent_path='...' and filename='...'; 

然后使用其他代码,即C++来检查结果的值。

或者

select * from read_locks where parent_path='...' and filename='...'; 

,然后使用其他代码,即C++,检查下面的语句的布尔值:

cass_iterator_next(rows) 

我不知道哪个更好。

我想有一个用户定义的聚合函数来这样做,但我无法弄清楚。

请分享您的意见。

谢谢你在前进, 英

+0

如果可以有多个实例(> 1000),并且您关心的是所有实例是否存在锁定,则应避免计数。 Count会导致所有的数据一次被读入,这对于大量的行会产生问题。至少使用*可以利用分页来控制每页读取多少数据。 – Kurt

+0

好的建议。谢谢 –

回答

0

如果你只,如果有任何锁关心,现在多少个锁存在,那么它可能更有效地增加一个限制条款是这样的:

SELECT * FROM read_locks WHERE parent_path='...' and filename='...' LIMIT 1; 

如果返回一行,那么你知道文件上至少有一个锁,如果它没有返回任何内容,那么文件上没有锁。

+0

好的建议。谢谢。 –

相关问题