创建包含许多列Cassandra 2的表

时间:2016-04-04 23:47:45

标签: cassandra cqlsh cassandra-2.1

我需要一张Cassandra2上的表,其中56K列各1字节,用于基准测试。

我试图创建一个有用的"有这样的要求:

create table usertable (
    y_id varchar primary key,
    field0 varchar,
    field1 varchar,
    field2 varchar,
     ...
     ...
    field55999 varchar,
    field56000 varchar);

当我尝试使用CQLSH从文件执行此操作时,它会在没有响应的情况下永远运行并分配大量内存。

有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:2)

尝试将您的CREATE TABLE语句放在一个平面文件中(例如 schema.cql ),然后执行cqlsh -f schema.cql

按照他们的方式,56k列是 HUGE ,没有理智的开发人员会创建一个超过1k列的表...你想用这个场景测试和断言你在做什么?

----回答第1条评论 -

Schema完全是关于元数据的,因为无论如何原始数据都被写在磁盘上byte[]。表中的列越多,元数据在内存中的位置就越大。

  

因此,在检索时,我将在select查询中传递特定的列名(记住性能),以便它不会检索所有列

不是那么简单。所有56k列都连续存储在磁盘上。在读取数据时,Cassandra具有索引结构以跳过分区键和聚类列。对于普通列,如您的情况,没有索引来获取客户端请求的确切列,例如,如果您正在执行SELECT field1293 FROM usertable WHERE y_id = xxx,Cassandra将需要扫描整个块{ {1}}在选择正确的列之前,field1进入内存,这非常非常低效

---回答第N条评论 -

  

我同意它会变得非常慢/效率低,但我需要实现这种情况来模拟基因型数据。

我建议尝试测试此架构:

field56000

你会发现它的工作方式更好