我是 CQL 和复合键的新手(我以前使用过 CLI)我希望用复合键来实现我的旧超级列系列。简而言之,我的查找模型是:
blocks[file_id][position][block_id]=size
我有以下带有复合键的 CQL 表:
CREATE TABLE blocks (
file_id text,
start_position bigint,
block_id text,
size bigint,
PRIMARY KEY (file_id, start_position,block_id)
);
我插入这些样本值:
/*Example insertions*/
INSERT INTO blocks (file_id, start_position, block_id,size) VALUES ('test_schema_file', 0, 'testblock1', 500);
INSERT INTO blocks (file_id, start_position, block_id,size) VALUES ('test_schema_file', 500, '2testblock2', 501);
我使用这个 Astyanax 代码查询:
OperationResult result = m_keyspace.prepareQuery(m_BlocksTable).getKey(file).execute();
ColumnList<BlockKey> columns = (ColumnList<BlockKey>) result.getResult();
for (Column<BlockKey> column : columns) {
System.out.println(StaticUtils.fieldsToString(column.getName()));
try{
long value=column.getLongValue();
System.out.println(value);
}catch(Exception e){
System.out.println("Can't get size");
}
}
当我遍历结果时,每列得到 2 个结果。一个包含“大小”,一个不存在“大小”列。
recorder.data.models.BlockKey Object {
m_StartPosition: 0
m_BlockId: testblock1
m_Extra: null
}
Can't get size
recorder.data.models.BlockKey Object {
m_StartPosition: 0
m_BlockId: testblock1
m_Extra: size
}
500
recorder.data.models.BlockKey Object {
m_StartPosition: 500
m_BlockId: 2testblock2
m_Extra: null
}
Can't get size
recorder.data.models.BlockKey Object {
m_StartPosition: 500
m_BlockId: 2testblock2
m_Extra: size
}
501
所以我有两个问题:
- 理论上我不需要 size 列,它应该是复合键的值: blocks[file_id][position][block_id]=size 而不是 blocks[file_id][position][block_id]['size'] = size . . 如何在不创建冗余大小列的情况下在 CQL3 中正确插入此数据?
- 如果我从未插入过这样的行,为什么我会得到没有“大小”的额外列?