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 有一个新特性,称为物化视图。一个可以管理重复数据的地方。