Cassandra 无法使用Astyanax客户端创建具有复合键的表

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

如何使用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.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)