Cassandra odel您可以使用“in”查询,例如选择*from user_day_minute,其中usr='user1'和day in('1','2','3',…);而不必运行单独的查询。另外,我支持数字类型的建议。@Richard您能帮助我理解为什么我不能对行键(

Cassandra odel您可以使用“in”查询,例如选择*from user_day_minute,其中usr='user1'和day in('1','2','3',…);而不必运行单独的查询。另外,我支持数字类型的建议。@Richard您能帮助我理解为什么我不能对行键(,cassandra,data-modeling,cql3,Cassandra,Data Modeling,Cql3,odel您可以使用“in”查询,例如选择*from user_day_minute,其中usr='user1'和day in('1','2','3',…);而不必运行单独的查询。另外,我支持数字类型的建议。@Richard您能帮助我理解为什么我不能对行键(如分钟:用户名)执行范围查询,我想从1369448160:testuser和1369448220:testuser之间的范围返回字节列吗?Cassandra的数据模型还没有完全被我所理解。分区键(也称为行键)是Cassandra用来在集群周围对


odel您可以使用“in”查询,例如选择*from user_day_minute,其中usr='user1'和day in('1','2','3',…);而不必运行单独的查询。另外,我支持数字类型的建议。@Richard您能帮助我理解为什么我不能对行键(如分钟:用户名)执行范围查询,我想从1369448160:testuser和1369448220:testuser之间的范围返回字节列吗?Cassandra的数据模型还没有完全被我所理解。分区键(也称为行键)是Cassandra用来在集群周围对数据进行分区的键。使用RandomPartitioner(默认和推荐的分区器),密钥根据其散列分布。因此,密钥是以散列顺序而不是密钥顺序存储的,因此范围查询效率极低,因此被禁用。但是,跨列(主键的非分区部分)的范围查询是有效的,建议使用。@Richard感谢您的解释,您提供的示例对理解数据模型非常有帮助。我想知道是否有工作正在做,以便使用有序分区器更好地分布行,或者使用随机分区器按键顺序排序的相反方式。在这个模型中,您可以使用“in”查询,例如选择*from user_day_minute,其中usr='user1'和day in('1','2','3',…);而不必运行单独的查询。另外,我支持数字类型的建议。@Richard您能帮助我理解为什么我不能对行键(如分钟:用户名)执行范围查询,我想从1369448160:testuser和1369448220:testuser之间的范围返回字节列吗?Cassandra的数据模型还没有完全被我所理解。分区键(也称为行键)是Cassandra用来在集群周围对数据进行分区的键。使用RandomPartitioner(默认和推荐的分区器),密钥根据其散列分布。因此,密钥是以散列顺序而不是密钥顺序存储的,因此范围查询效率极低,因此被禁用。但是,跨列(主键的非分区部分)的范围查询是有效的,建议使用。@Richard感谢您的解释,您提供的示例对理解数据模型非常有帮助。我想知道是否有使用有序分区器更好地分布行的工作正在进行,或者使用随机分区器按键顺序排序的相反工作正在进行。
CREATE TABLE minute_usr (
min varchar,
usr varchar,
bytes counter,
PRIMARY KEY (min, usr)
)
UPDATE minute_usr SET bytes = bytes + 200 WHERE usr = 'testuser' AND min = '1369448220';
select min, bytes from minute_usr WHERE usr = 'testuser' AND min >= '1369448160' and min <= '1369448220';
[default@data_use] list minute_usr; 
Using default limit of 100 
Using default column limit of 100  
RowKey: 1369448220
=> (column=testuser:, value=, timestamp=1371066133370000)
=> (counter=testuser:bytes, value=1400)

 RowKey: 1369448160
=> (column=testuser:, value=, timestamp=1371066138506000)
=> (counter=testuser:bytes, value=1600)
CREATE TABLE usr_minute (
min varchar,
usr varchar,
bytes counter,
PRIMARY KEY (usr, min)
)
`select bytes from usr_minute WHERE usr = 'testuser' AND min >= '1369448160' and min <= '1369448220';`
CREATE TABLE minute_usr (
  min varchar,
  usr varchar,
  bytes counter,
  PRIMARY KEY ((min, usr))
);
CREATE TABLE usr_day_minute (
  day varchar,
  min varchar,
  usr varchar,
  bytes counter,
  PRIMARY KEY ((usr, day), min)
);
create table network_usage (
    usr varchar,
    bucket_enum int,
    when timestamp,
    bytes counter,
    PRIMARY KEY ((usr, bucket), when)
);
#now in CQL
consistency any;
update network_usage set bytes = bytes + 200
    where usr = 'testuser' and bucket_enum = :bucket and when = now();
#you may want a different consistency level, but since this is mostly historical data,
#one should really be enough.
consistency one;
select count from network_usage
where usr = 'testuser' AND
    bucket_enum in (0, 1, 2, 3, 4, 5) AND
    when >= :start_time and
    when < :end_time;