• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

在卡桑德拉聚集的时间 – CQL3

cassandra 来源:user3184527 8次浏览

我有一个宽行,集群,手动索引等问题…我希望有人可以在这里协助。 CQL版本是3,Cassandra是2.0.1;在卡桑德拉聚集的时间 – CQL3

比方说,我有CF“产品”

id timeuuid 

    location varchar 

    shopname varchar 

    expiry timestamp 

    count int 

    PRIMARY KEY (id) 

我希望能够选择在产品到期被下令具体位置。因此,请创建如下注册表:

CF 'id_register_by_loc_expy' 

    location varchar 

    expiry timestamp 

    id timeuuid 

    PRIMARY KEY (location,expiry,id) 

并且希望选择按到期订购的特定商店名称的商品。然后创建:

CF 'id_register_by_shopname_expy' 

    shopname vachar 

    expiry timestamp 

    id timeuuid 

    PRIMARY KEY (shopname,expiry,id) 

这是所以我可以做高效的查询/切片如下:从id_reg_by_loc_expy其中location = ‘X’

1.select ID; // [自然按有效期排序]

2.select id from id_reg_by_loc_expy where location =’x’and expiry>’t1’and expiry <‘t2’;

3.从产品中选择* id =’id’;

和;

4.select id from id_reg_by_shop_exp where shopname =’y’; // [自然按期满]

and;

5.select id from id_reg_by_shop_count where shopname =’y’; //

等[自然地计数责令] ..

如果什么聚集键需要改变,我需要重新排序寄存器(S)对这些特定行的条目。

问题我有是:

  1. 一个新的到期重新插入(或计数)在新的主键结果,因此不更新我的旧条目。

  2. 我不能“update .. set expiry =’x2’where …”,因为expiry是主键的一部分。

  3. 由于逻辑上的限制,插入新的主键然后删除旧的键是一个不好的选择。

事情我已经试过有:

  1. CF ‘id_reg_by_loc_expy’

    location varchar 
    
    expiry timestamp 
    
    id timeuuid 
    
    otherSecondaryIndex varchar 
    
    PRIMARY KEY (location,id) 
    

但是,

a。这没有利用Cassandra存储的排序功能。我希望每行都有许多产品,并且希望避免需要搜索整行;和

b。事实证明,我不能实际做像查询的以下反正:

(i)从id_reg _…选择id其中位置=“X”由DTG递增顺序;不支持ORDER BY与2ndary指标:

错误的请求。

Or 

(ii)从id_reg _…其中location = ‘x’ 和到期> ‘T1’ 和到期< ‘T2’ 选择ID;

请求无效:无索引列在目前分列条款与平等运营商

虽然我“可以”做到这一点:

从id_reg _…

(iii)选择id其中位置=’X ‘和其他的SecurityIndex =’y’和终止>’t1’并且终止<‘t2’;

**注意,这需要我给力“允许过滤”,似乎差设计,包括另一个次级索引仅仅是为了让这个查询..即查询其中的我比“按订单”不甚感兴趣的反正查询。

2.使用timeuuid代替到期时间戳。即使这是我无法找到办法的工作,但并不能帮助我“按次数排序”的意图。

我在这里错过了什么?我需要继续使用所有的墓碑缓解技术吗?或者在我的应用程序中做一些排序?

干杯, 添

===========解决方案如下:

没有一种方式来获得,而无需排序列是主键的一部分排序。 Cassandra不会在查询时进行排序。

您是否期望每个product_id多次更改过期邮票?如果不是,那么墓碑不应该是一个巨大的问题,特别是如果你的行真的像你描述的那么小。您可以调整相关设置,例如gc_grace_seconds(逻辑删除多久)以确保它们符合您的操作要求和容量。

如果您打算更新过期时间很频繁,那么我的第一直觉是,它是一个不能没有一些测量好办,handtuning在一个稳定的配置到达一个模式。如果你开始被墓碑淹没,你可能不得不采取一个重要的压实时间表来有效地清除积累的墓碑。

底线是任何具有队列式语义的存储模式在Cassandra中以可伸缩的方式实现都是非常重要的。至少这是我的直觉。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)