primary key
只有primary key中涉及的column,partition key或者clustering key才可以作为查询条件。如果where条件中使用了没有被索引的字段,Cassandra会报错并不执行该语句。因此在Cassandra中,将所有字段都包含在primary key中是很常见的做法。
table order
这里有一个有趣的例子:对于一个表,默认按照正序排序。也就是说,查询结构总是正序的。如果你需要的是倒序排序后的结果,那么就以倒序排序的方式创建这张表。
create table tableName(
stock_id int,
trade_date timestamp
primary key(stock_id, trade_date)
) with clustering order by (trade_date desc)
如果你既需要正序结构,也需要倒序结果,那么就建立两张表,一张正序一张倒序。
从这里我觉得Cassandra这类数据库的设计思想和传统的关系型数据库有很大的不同。Cassandra并不在乎数据量的多少。可能是因为水平扩展很容易,因此在设计数据库时更多考虑的是如何提高查询速度,而不在乎制造更多的数据冗余。
在设计Cassandra数据库时,要充分考虑的是:可能会发生哪些查询。在定义好数据库后,那些需要扫描所有数据才能得到的结果的查询都是被禁止的。