Cassandra-CQL3中的时间聚类
我有一个关于宽行、集群、手动索引等的问题。。。我希望有人能在这里帮忙。CQL版本为3,Cassandra版本为2.0.1 比如说,我有CF‘产品’Cassandra-CQL3中的时间聚类,cassandra,timestamp,cluster-analysis,cql3,Cassandra,Timestamp,Cluster Analysis,Cql3,我有一个关于宽行、集群、手动索引等的问题。。。我希望有人能在这里帮忙。CQL版本为3,Cassandra版本为2.0.1 比如说,我有CF‘产品’ id timeuuid location varchar shopname varchar expiry timestamp count int PRIMARY KEY (id) 我想能够选择产品在特定的地点订购到期。因此,创建类似以下内容的寄存器: CF 'id_register_by_l
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)
这样我就可以按如下方式进行高效查询/切片:
1.从id_reg_中通过_loc_expy选择id,其中位置='x';//[到期自然订购]
2.通过位置='x'和到期时间>'t1'和到期时间<'t2'从id_reg_中选择id
3.从id为'id'的产品中选择*
及
4.从id_reg_by_shop_exp中选择id,其中shopname='y';//[到期自然订购]
及
5.按店铺计数从id_reg_中选择id,其中店铺名称='y';
//[按伯爵自然排序]
等等
如果集群键需要更改,并且我需要对寄存器中这些特定行上的条目重新排序,该怎么办 我的问题是:
我尝试过的是:
location varchar
expiry timestamp
id timeuuid
otherSecondaryIndex varchar
PRIMARY KEY (location,id)
Or
(ii)从id_reg_中选择id。。。其中位置='x'和到期日>'t1'和到期日<'t2'
错误的请求:使用Equal运算符的by columns子句中不存在索引列
尽管我“能”做到这一点:
(iii)从id\u reg\u中选择id。。。其中location='x'和otherSecIndex='y'和expire>'t1'和expire<'t2'
**请注意,这需要我强制“允许筛选”,并且似乎设计得很糟糕,仅仅为了允许此查询而包含另一个辅助索引。。i、 e.不管怎样,我对“订单依据”查询不太感兴趣
2.使用timeuuid代替到期时间戳。即使这起到了我找不到办法的作用,也无助于我的“按计数排序”意图 我是不是错过了一些基本的东西?答案是我需要继续使用所有墓碑缓解技术吗?或者在我的应用程序中进行一些排序 干杯,
Tim如果排序列不是主键的一部分,则无法获得排序。Cassandra在查询时不进行排序 您是否希望每个产品id多次更改过期戳记?如果不是,那么墓碑不应该是一个大问题,特别是如果你的行真的像你描述的那样小。您可以调整相关设置,如
gc\u grace\u seconds
(墓碑的悬挂时间)以确保它们符合您的操作需求和容量
如果您计划非常频繁地更新过期时间,那么我的第一直觉是,如果不进行一些测量和手动调整以获得稳定的配置,这是一种很难处理的模式。如果你开始被墓碑淹没,你可能不得不求助于一个主要的压实计划来有效地移除堆积的墓碑
底线是,任何具有类似队列语义的存储模式在Cassandra中以可伸缩的方式实现都是非常重要的。至少这是我的直觉