尝试将您的CREATE TABLE 语句放在一个平面文件中(例如schema.cql),然后执行cqlsh -f schema.cql
按他们的说法,56k 列是HUGE,没有理智的开发人员会创建一个包含超过 1k 列的表...在这种情况下你想测试和断言什么?
---- 第一条评论的答案--
Schema 是关于元数据的,因为原始数据无论如何都会以byte[] 的形式写入磁盘上。表中的列越多,内存中的元数据就越大。
所以在检索时,我将在选择查询中传递特定的列名(牢记性能),因此它不会检索所有列
事情没那么简单。所有 56k 列都连续存储在磁盘上。在读取数据时,Cassandra 有索引结构来跳过分区键和集群列。对于普通列,就像您的情况一样,没有索引可以获取客户端请求的确切列,例如,如果您正在执行SELECT field1293 FROM usertable WHERE y_id = xxx,Cassandra 将需要从field1 扫描整个块直到@ 987654326@ 在选择正确的列之前进入内存,这是非常非常低效
--- 第 N 条评论的答案 --
我同意这会变得非常缓慢/效率低下,但我需要实现这个场景来模拟基因型数据。
我建议尝试测试此架构:
create table usertable (
y_id varchar,
field_index int,
field_value varchard,
PRIMARY KEY(y_id, field_index)
);
//INSERT/UPDATE data into field N
INSERT INTO usertable(y_id, field_index, field_value)
VALUES('xxx', N, 'fieldN value');
//DELETE field N
DELETE FROM usertable WHERE y_id='xxx' AND field_index=N;
// Read EXACTLY field N
SELECT field_value FROM usertable WHERE y_id='xxx' AND field_index=N;
// Read field N to M, N <= M
SELECT field_value FROM usertable WHERE y_id='xxx'
AND field_index >=N
AND field_index <= M;
你会发现它的效果更好