cassandra中多列的范围

cassandra中多列的范围,cassandra,cql,Cassandra,Cql,我的桌子: CREATE TABLE user_position ( geopart text, // first 3 characters of geohash geohash text, datetime timestamp, userId bigint, PRIMARY KEY ((geopart), geohash, datetime, user_id) ); 我的虚拟查询: select * from user_position where geopart = '

我的桌子:

CREATE TABLE user_position (
  geopart text, // first 3 characters of geohash
  geohash text,
  datetime timestamp,
  userId bigint,
  PRIMARY KEY ((geopart), geohash, datetime, user_id)
);
我的虚拟查询:

select * from user_position where geopart = 'abc' and geohash > 'a' and geohash < 'z' and datetime >= '2015-08-08 15:08:58+0530';
问题:


我做错了什么?如果在Cassandra中不可能在多个列上设置范围,那么如何实现这一点呢?

Cassandra在查询时有很大的限制,因为它不像RDBMS那样具有通用性。不能对Cassandra中的多个列执行范围查询。下列规则也适用:

  • 如果不执行全选,则需要提供分区键,以便Cassandra可以找到包含您要查找的数据的节点
  • 只能筛选主键中的列(分区键和群集列)
  • 主键定义中列的顺序很重要——这就是Cassandra在磁盘上存储数据的方式
  • 如果“previous”列也已筛选(按主键定义的顺序),则只能对群集列进行筛选
  • 执行范围查询后,将无法对后续的群集列进行进一步筛选
所有这些规则都是为了避免人们在Cassandra内部运行反模式


您必须对多个列执行范围查询,并且要有一种更健壮的数据检索方法,一个选项是与搜索平台(如Solr)集成

我可以在范围查询之后在查询中放置一个
吗?不,一旦在Cassandra中的某个列上使用范围进行筛选,您甚至不能在后续的集群列上使用=筛选。
Bad Request: PRIMARY KEY column "datetime" cannot be restricted (preceding column "geohash" is restricted by a non-EQ relation)