Cassandra 按多列排序
Cassandra order by multiple columns
我在 cassandra
有一名 table 员工。
CREATE TABLE employee (
emp_id text,
joining_date TIMESTAMP,
salary double,
first_name text,
dept text,
last_name TIMESTAMP,
PRIMARY KEY (dept,emp_id));
我需要能够根据不同的列对 cql
查询结果进行排序。即,我需要支持下面提到的所有查询。
有没有办法在原生 cassandra
.
中实现这一点
select * from employee order by emp_id;
select * from employee order by joining_date;
select * from employee order by salary;
select * from employee order by first_name;
etc.,
不可能。
您唯一可以进行的排序是 聚类列 ,在您的示例中是 emp_id
。
您还没有在 select 语句中订购。您只能在创建语句中设置订单。原因很简单:排序是性能杀手。 Cassandras 的重点是数据写入。这意味着:Cassandra 在按您定义的顺序写入数据方面具有非常好的性能。
Cassandras 排序是基于主键的。主键的第一部分是分区键。正确的分区键真的很重要!具有相同分区键的所有行都在同一台机器上。这意味着:过滤具有相同分区键的行是一种性能良好的操作。过滤没有相同分区的行真的很慢。但是您不能只使用一个或两个分区键。如果你这样做,你就不会使用 cassandra 的好处。主键的其他部分是列键。 Cassandra 将按主键顺序对您的数据进行排序。在您的示例中,cassandra 将仅按 emp_id 排序。
如果您需要多个订单,请创建一个新的列族 (table)。在您的情况下,您可以创建此 tables:
员工按部门日期(主键(部门,joining_date))
employeeByDeptSalary(主键(部门,薪水))
employeeByDeptFirstName(主键(部门,first_name))
employeeByDeptEmp(主键(部门,emp_id))
现在你会说:什么.. 为什么我必须创建多个 table。 Cassandra 是一个非规范化数据库。多次保存数据不是问题。 HDD存储很便宜。 Cassandra 3.0 有一个新特性,称为物化视图。一个可以管理重复数据的地方。
我在 cassandra
有一名 table 员工。
CREATE TABLE employee (
emp_id text,
joining_date TIMESTAMP,
salary double,
first_name text,
dept text,
last_name TIMESTAMP,
PRIMARY KEY (dept,emp_id));
我需要能够根据不同的列对 cql
查询结果进行排序。即,我需要支持下面提到的所有查询。
有没有办法在原生 cassandra
.
select * from employee order by emp_id;
select * from employee order by joining_date;
select * from employee order by salary;
select * from employee order by first_name;
etc.,
不可能。
您唯一可以进行的排序是 聚类列 ,在您的示例中是 emp_id
。
您还没有在 select 语句中订购。您只能在创建语句中设置订单。原因很简单:排序是性能杀手。 Cassandras 的重点是数据写入。这意味着:Cassandra 在按您定义的顺序写入数据方面具有非常好的性能。 Cassandras 排序是基于主键的。主键的第一部分是分区键。正确的分区键真的很重要!具有相同分区键的所有行都在同一台机器上。这意味着:过滤具有相同分区键的行是一种性能良好的操作。过滤没有相同分区的行真的很慢。但是您不能只使用一个或两个分区键。如果你这样做,你就不会使用 cassandra 的好处。主键的其他部分是列键。 Cassandra 将按主键顺序对您的数据进行排序。在您的示例中,cassandra 将仅按 emp_id 排序。 如果您需要多个订单,请创建一个新的列族 (table)。在您的情况下,您可以创建此 tables:
员工按部门日期(主键(部门,joining_date))
employeeByDeptSalary(主键(部门,薪水))
employeeByDeptFirstName(主键(部门,first_name))
employeeByDeptEmp(主键(部门,emp_id))
现在你会说:什么.. 为什么我必须创建多个 table。 Cassandra 是一个非规范化数据库。多次保存数据不是问题。 HDD存储很便宜。 Cassandra 3.0 有一个新特性,称为物化视图。一个可以管理重复数据的地方。