Apache Cassandra:为小表建模

时间:2015-09-22 11:04:00

标签: cassandra cassandra-2.0

对具有有限行数的列族进行建模的最佳做法是什么?

例如,我有下表:

 CREATE TABLE product (
    productname text PRIMARY KEY,
    productdescription text,
    updatedts timestamp,
    updateduser text);

此表的生命周期最多可包含100行。如果我将 productname 作为分区键,那么这100行将位于不同的分区中,效率很低。我想让整个数据驻留在一个分区中。

通常设计有限行的表格的最佳做法是什么?

PS:假设将在此表上运行的唯一查询是:

select productname,productdescription,updatedts,updateduser from product;

1 个答案:

答案 0 :(得分:1)

基于"我知道这不是最佳做法,但我相信在这种特殊情况下,对小数据进行分区会适得其反。 "让我们走下去:

您可以将常量值添加为主键,例如将tablename alwayse as" product"。

CREATE TABLE product (
    tablename text,
    productname text,
    productdescription text,
    updatedts timestamp,
    updateduser text,
    PRIMARY KEY(tablename, productname));

更多的是,因为cassandra的列数不是问题,因为你可以"按"这样的"小"一个大表中的表(每个表中只需要一个主键,类型必须相同):

想象一下,你有3"小"表:

CREATE TABLE product (
    productname text PRIMARY KEY,
    productdescription text,
    updatedts timestamp,
    updateduser text);


CREATE TABLE hellokitty (
    kittyname text PRIMARY KEY,
    age int,
    owner text);


CREATE TABLE pandarianians (
    name text PRIMARY KEY,
    pandariantime timestamp,
    age int);

然后你可以把所有3个放在一个表中,每个表都在一个分区中:

CREATE TABLE lifeislife(
    tablename text, 
    tablekey text,
    updatedts timestamp,
    updateduser text,
    age int,
    owner text,
    pandariantime timestamp,
    PRIMARY KEY (tablename, tablekey)
)  

您的选择将是:

select tablekey,productdescription,updatedts,updateduser from lifeislife where tablename="product";