Cassandra CQL3复合键返回重复的值
我不熟悉CQL和复合密钥(我以前使用CLI) 我希望用复合键实现我的旧超级列族。 简而言之,我的查找模型是:Cassandra CQL3复合键返回重复的值,cassandra,thrift,cql,astyanax,cql3,Cassandra,Thrift,Cql,Astyanax,Cql3,我不熟悉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
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");
}
}
所以我有两个问题:
“重复”是因为使用CQL时,会插入额外的节约列来存储额外的元数据。通过您的示例,您可以从cassandra cli中看到发生了什么:
[default@ks1] list blocks;
------------------- RowKey: test_schema_file
=> (column=0:testblock1:, value=, timestamp=1373966136246000)
=> (column=0:testblock1:size, value=00000000000001f4, timestamp=1373966136246000)
=> (column=500:2testblock2:, value=, timestamp=1373966136756000)
=> (column=500:2testblock2:size, value=00000000000001f5, timestamp=1373966136756000)
如果使用CQL插入数据,也应该使用CQL进行查询。使用Astyanax,可以使用
m_keyspace.prepareCqlStatement().withCql(“从块中选择*).execute()代码>谢谢你的回答。你知道元数据的本质是什么吗?
[default@ks1] list blocks;
------------------- RowKey: test_schema_file
=> (column=0:testblock1:, value=, timestamp=1373966136246000)
=> (column=0:testblock1:size, value=00000000000001f4, timestamp=1373966136246000)
=> (column=500:2testblock2:, value=, timestamp=1373966136756000)
=> (column=500:2testblock2:size, value=00000000000001f5, timestamp=1373966136756000)