Cassandra 无法使用Astyanax客户端创建具有复合键的表
如何使用astyanax客户端创建具有复合键的表。现在,我已经用cqlsh-3创建了它,这是它在cli中的外观:Cassandra 无法使用Astyanax客户端创建具有复合键的表,cassandra,cql,astyanax,Cassandra,Cql,Astyanax,如何使用astyanax客户端创建具有复合键的表。现在,我已经用cqlsh-3创建了它,这是它在cli中的外观: [default@KS] describe my_cf; ColumnFamily: my_cf Key Validation Class: org.apache.cassandra.db.marshal.UTF8Type Default column value validator: org.apache.cassandra.db.marshal.U
[default@KS] describe my_cf;
ColumnFamily: my_cf
Key Validation Class: org.apache.cassandra.db.marshal.UTF8Type
Default column value validator: org.apache.cassandra.db.marshal.UTF8Type
Columns sorted by: org.apache.cassandra.db.marshal.CompositeType(org.apache.cassandra.db.marshal.TimeUUIDType,org.apache.cassandra.db.marshal.UTF8Type)
GC grace seconds: 864000
Compaction min/max thresholds: 4/32
Read repair chance: 0.1
DC Local Read repair chance: 0.0
Replicate on write: true
Caching: KEYS_ONLY
Bloom Filter FP chance: default
Built indexes: []
Compaction Strategy: org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy
Compression Options:
sstable_compression: org.apache.cassandra.io.compress.SnappyCompressor
这是我在cqlsh的预期情况:
CREATE TABLE my_cf (
... key text,
... timeid timeuuid,
... flag boolean,
... data text,
... PRIMARY KEY (key, timeid));
我让它与存储为blob的复合密钥一起工作,这是一个问题
我的代码
碳纤维
突变
MutationBatch m = ks.prepareMutationBatch();
for (char keyName = 'A'; keyName <= 'C'; keyName++) {
MyKey myKey = new MyKey("THEKEY_" + keyName, TimeUUIDUtils.getUniqueTimeUUIDinMillis());
ColumnListMutation<String> cfm = m.withRow(MY_CF, myKey);
cfm.putColumn("flag", true, null);
cfm.putColumn("data", "DATA_" + keyName, null);
}
m.execute();
cqlsh:KS>从my\u cf中选择*
key | flag | data
----------------------------------------------------------+--------+---------
00064953494e5f420000109f4513d0e3ac11e19c400022191ad62b00 | True | DATA_B
cqlsh:KS>从my_cf中选择*,其中key='THEKEY_B'按timeid desc排序
Bad Request: Order by on unknown column timeid
它在下面的卡桑德拉cli中看起来不是很对吗?为什么它在cqlsh中不起作用?
cassandra cli]列出我的\u cf
RowKey: THEKEY_B:09f29941-e3c2-11e1-a7ef-0022191ad62b
=> (column=active, value=true, timestamp=1344695832788000)
=> (column=data, value=DATA_B, timestamp=1344695832788000)
我做错了什么?
astyanax 1.0.6,cassandra 1.1.2
cqlsh>[cqlsh 2.2.0 | Cassandra 1.1.2 | CQL spec 3.0.0 |节俭协议19.32.0]根据我所了解的,复合主键 代表协议和接口的重大分歧 cassandra和您使用的协议控制您拥有的功能 访问 例如,astyanax和hector主要是节俭协议 客户机,而CQL,不仅仅是一种语言,现在还是将来?二进制协议 这两个协议是不等价的,CQL3具有复合主协议 钥匙使事情变得非常不同 关于具有复合主键的表,需要了解的是它们 基本上转换为具有复合列名的宽行。这个 主键的第一部分是行键,其余部分是行键 与作为中的列名的表列名一起用作前缀 宽阔的一排 在您的实例中,行键是键,列前缀是 timeid,所以您插入的标志字段实际上是一个 列名为:flag,数据为:data,依此类推 开 为了实现这一点,与cassandra的CQL协议接口是 将表转换为宽行并透明地处理所有 那个栏目的命名 thrift界面不处理这些东西,当你 做一个变异,它只写它习惯的列,没有 虚拟寻址 因此,事实上,结果在cassandra cli中看起来并不正确。如果您从cqlsh-3执行插入,那么从cassandra cli的角度来看,它应该是一个简单的文本日期:
CQL3和表看起来非常有吸引力,但需要做一些权衡,而且似乎还没有可靠的java客户端支持。根据我所了解的,复合主键 代表协议和接口的重大分歧 cassandra和您使用的协议控制您拥有的功能 访问 例如,astyanax和hector主要是节俭协议 客户机,而CQL,不仅仅是一种语言,现在还是将来?二进制协议 这两个协议是不等价的,CQL3具有复合主协议 钥匙使事情变得非常不同 关于具有复合主键的表,需要了解的是它们 基本上转换为具有复合列名的宽行。这个 主键的第一部分是行键,其余部分是行键 与作为中的列名的表列名一起用作前缀 宽阔的一排 在您的实例中,行键是键,列前缀是 timeid,所以您插入的标志字段实际上是一个 列名为:flag,数据为:data,依此类推 开 为了实现这一点,与cassandra的CQL协议接口是 将表转换为宽行并透明地处理所有 那个栏目的命名 thrift界面不处理这些东西,当你 做一个变异,它只写它习惯的列,没有 虚拟寻址 因此,事实上,结果在cassandra cli中看起来并不正确。如果您从cqlsh-3执行插入,那么从cassandra cli的角度来看,它应该是一个简单的文本日期:
CQL3和表看起来非常有吸引力,但是需要做一些权衡,而且似乎还没有可靠的java客户端支持。Dave,感谢您花时间解释这一点。在某种程度上,我使用astyanax中的CQL查询DDL和DML进行工作。这里可以找到一些细节:戴夫,谢谢你花时间解释。在某种程度上,我使用astyanax中的CQL查询DDL和DML进行工作。可在此处找到一些详细信息:
CREATE TABLE my_cf (
KEY blob PRIMARY KEY,
flag boolean,
data text
) WITH ...
key | flag | data
----------------------------------------------------------+--------+---------
00064953494e5f420000109f4513d0e3ac11e19c400022191ad62b00 | True | DATA_B
Bad Request: Order by on unknown column timeid
RowKey: THEKEY_B:09f29941-e3c2-11e1-a7ef-0022191ad62b
=> (column=active, value=true, timestamp=1344695832788000)
=> (column=data, value=DATA_B, timestamp=1344695832788000)
[default@testapp] list my_cf;
RowKey: mykey
=> (column=20120827:data, value=some data, timestamp=1346090889361000)
=> (column=20120827:flag, value=, timestamp=1346090889361001)