我需要一张Cassandra2上的表,其中56K列各1字节,用于基准测试。
我试图创建一个有用的"有这样的要求:
create table usertable (
y_id varchar primary key,
field0 varchar,
field1 varchar,
field2 varchar,
...
...
field55999 varchar,
field56000 varchar);
当我尝试使用CQLSH从文件执行此操作时,它会在没有响应的情况下永远运行并分配大量内存。
有没有更好的方法来实现这一目标?
答案 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
你会发现它的工作方式更好