чтение таблицы кассандры с астьянаксом с составным ключом

Добрый день

У меня есть эта таблица, созданная на моей cassandra 2.0, я пытаюсь читать и писать с ней, используя astyanax, но, к сожалению, я действительно новичок в cassandra и java

create table requestformatlist (
    usedbyid text,          // rowkey
    rfid text , //  rfid 
    keystoadd Set<text>,
    keystoremove Set<text>,
primary key (usedbyid, rfid) );

содержимое таблицы

gid  | rfid | keystoadd                        | keystoremove
------+------+----------------------------------+----------------------------
1111 | 1111 |             {'AddMe1', 'AddMe2'} | {'RemoveMe1', 'RemoveMe2'}
0003 | 0003 |     {'address', 'name', 'state'} |         {'z1', 'z2', 'z3'}

Я прочитал это, но, к сожалению, я запутался, зачем нам две записи, если мы хотим добавить только одну строку

http://brianoneill.blogspot.com/2012/09/composite-keys-connecting-dots-between.html http://brianoneill.blogspot.com/2012/10/cql-astyanax-and-compoundcomposite-keys.html

у меня есть astyanaxdao, и я могу подключиться к нему, но не могу читать и писать в него

у меня есть следующий код

public void testRead() throws Exception {
 RequestFormatDAO dao = new RequestFormatDAO("localhost:9160", "l2");
 log(dao.read("0003"));
}


public ColumnList<RequestFormatListEntry> read(String rowKey) throws ConnectionException {
    OperationResult<ColumnList<RequestFormatListEntry>> result = this.getKeyspace().prepareQuery(COLUMN_FAMILY).getKey(rowKey)
            .execute();
    ColumnList<RequestFormatListEntry> requestFormat = result.getResult();
    LOG.debug("Read list [" + rowKey + "]");
    return requestFormat;
}


public class RequestFormatListEntry {
  @Component(ordinal = 0)
  public String rfid;
  @Component(ordinal = 1)
  public String field1;

  public RequestFormatListEntry(){}
}

Результаты, которые у меня есть при чтении:

Read list [0003]
listEntry.rfid=>[0003]
listEntry.keystoremove=>[null]
listEntry.rfid=>[0003]
listEntry.keystoremove=>[keystoadd]
listEntry.rfid=>[0003]
listEntry.keystoremove=>[keystoadd]
listEntry.rfid=>[0003]
listEntry.keystoremove=>[keystoadd]
listEntry.rfid=>[0003]
listEntry.keystoremove=>[keystoremove]
listEntry.rfid=>[0003]
listEntry.keystoremove=>[keystoremove]
listEntry.rfid=>[0003]
listEntry.keystoremove=>[keystoremove]

person jayj    schedule 04.04.2014    source источник


Ответы (1)


Ваша проблема в том, что вы пытаетесь получить доступ к таблице CQL («высокоуровневый» API) с помощью Thrift («низкоуровневый» API).

Ваша блестящая таблица CQL (и вы даже используете коллекции CQL3) выглядит как пример ниже, если вы используете Thrift.

[default@test] list requestformatlist;
Using default limit of 100
Using default cell limit of 100
-------------------
RowKey: 1111
=> (name=1111:, value=, timestamp=1396662079753000)
=> (name=1111:keystoadd:4164646d6531, value=, timestamp=1396662079753000)
=> (name=1111:keystoadd:4164646d6532, value=, timestamp=1396662079753000)
=> (name=1111:keystoremove:52656d6f766531, value=, timestamp=1396662079753000)
=> (name=1111:keystoremove:52656d6f766532, value=, timestamp=1396662079753000)
-------------------
RowKey: 0003
=> (name=0003:, value=, timestamp=1396662495503000)
=> (name=0003:keystoadd:61646472657373, value=, timestamp=1396662495503000)
=> (name=0003:keystoadd:6e616d65, value=, timestamp=1396662495503000)
=> (name=0003:keystoadd:7374617465, value=, timestamp=1396662495503000)
=> (name=0003:keystoremove:7a31, value=, timestamp=1396662495503000)
=> (name=0003:keystoremove:7a32, value=, timestamp=1396662495503000)
=> (name=0003:keystoremove:7a33, value=, timestamp=1396662495503000)

2 Rows Returned.
Elapsed time: 26 msec(s).
[default@test]

И это объясняет результаты, которые вы получаете от своего DAO.

Я не эксперт Astyanax, но, вероятно, вам следует взглянуть на https://github.com/Netflix/astyanax/wiki/Cql-and-cql3 и не путайте CQL и Thrift.

Несколько ссылок для дальнейшего чтения: http://www.datastax.com/dev/blog/thrift-to-cql3 http://thelastpickle.com/blog/2013/01/11/primary-keys-in-cql.html

person Mikhail Stepura    schedule 05.04.2014
comment
Спасибо, Михаил, но не могли бы вы указать, где я смешиваю бережливость и cql? - person jayj; 05.04.2014
comment
Ваша таблица представляет собой таблицу CQL3, без компактного хранилища, и вы используете коллекции CQL. Но вы читаете данные из имен составных столбцов напрямую (@Component(ordinal = 0) и т. д.) - person Mikhail Stepura; 05.04.2014