Cassandra where子句用于特定列-最佳方法

时间:2018-10-11 10:22:41

标签: cassandra nosql datastax cql

在我的卡桑德拉数据库中搜索具有特定PID的记录时,我需要使用where子句

id = uuid
pid=  Property Id (text)
created_at = timestamp

我需要找到特定属性ID的前5条记录。所以我的创建表如下所示。

CREATE TABLE property_tax (
    id uuid,
    state text, 
    area text,       
    balance_type text,
    created_at timestamp,
    created_by text,
    last_paid_at timestamp,
    max_tax float,
    min_tax float,
    pid text,
    prev_balance float,
    prev_interest float,
    property_type text,
    tax_cess float,
    tax_year timestamp,
    total_paid float,
    total_paid_cess float,
    total_paid_tax float,
    PRIMARY KEY (pid,created_at,id)
    );

我的查询看起来像这样

select * from property_tax where pid = 'property1' ORDER BY created_at DESC LIMIT 5;

它按照我的要求工作,但是我的方法正确吗?还是需要改变。将来是否会出现任何性能问题。我正在查看5亿条记录,并且还在增长。

新编辑:

我添加了两列1.state 2.area 该州将有多个地区

属性ID(pid)将包含不超过100条记录的多条记录

So, I need to query TABLE property_tax for below
1. Find all the pid
2. find all the pid in the area
3. find all the pid in the state
4. find Limit 5 for pid (ORDER_BY created_at DESC)

非常感谢 沙什

1 个答案:

答案 0 :(得分:1)

如果您总是要以这种方式进行查询,请添加WITH CLUSTERING ORDER BY (created_at DESC);,这样您就不必颠倒顺序了(效率更高一点)。但这是对该表的一个很好的查询。

鉴于其5亿PID,您的意思是效果很好。如果它的5亿个ID位于单个pid中,则您可能会得到一个非常宽的分区,这会对性能产生影响。