在cassandra中动态添加列

时间:2014-12-23 01:52:34

标签: java cassandra thrift hector cassandra-cli

我在CQL3中有一个这样的表

create table product_info
(
 key text,
 value text,
 Primary key (key)
);

这是一张垂直表。因为我可以使用(键,值)对插入新行。

样本数据将是:

产品的详细信息

  key                |     value       
  -------------------------------------------
  product_name       |   sample_product   
  quantity           |   2
  manufacture        |   sample_manufacturer   
  ....                   ....

但我需要的是一个水平表,我可以在不改变表格的情况下动态添加列。

产品的详细信息

    product_name     |   quantity   |  manufacture           |  ....
   ------------------------------------------------------------------------------    
    sample_product   |    2         |  sample_manufacturer   |  ....

我需要像上表那样的结构,需要不断添加列。

CQL3提供了一个动态添加列的选项,但在此之前我们需要更改表。

我需要知道是否有其他方法允许这样做。

我发现通过使用thrift api是可能的,但由于不再支持thrift,所以不能使用它。

是否有其他API如hector或其他任何支持此功能的API?

我确实经历了类似的堆栈溢出帖子,但我没有得到更好的解决方案。

2 个答案:

答案 0 :(得分:3)

CREATE TABLE product_info(
    product_name text,
    key text,
    value text,
    PRIMARY KEY (product_name, key)
);

现在您可以插入最多2B k / v对,因为该键现在是聚类列。

INSERT INTO product_info (product_name, key, value) 
    VALUES ('iPhone 6', 'quantity', '2');

INSERT INTO product_info (product_name, key, value) 
    VALUES ('iPhone 6', 'manufacturer', 'Apple');

INSERT INTO product_info (product_name, key, value) 
    VALUES ('iPhone 6', 'quantity', '2');

INSERT INTO product_info (product_name, key, value) 
    VALUES ('iPhone 6', 'another column name', 'another column value');

但是,您没有指定查询访问模式,因此对于您的应用程序,此数据模型可能完全错误(或确定)。

答案 1 :(得分:1)

您是否考虑过使用地图?

create table products(
 id text primary key,
 something text,
 attributes map<text, text>
);

请参阅http://www.datastax.com/documentation/cql/3.1/cql/cql_using/use_collections_c.html

的结尾