Astyanax поддерживает составные столбцы в Cassandra через файл AnnotatedCompositeSerializer
. У меня есть семейство столбцов с составными именами столбцов из 3 полей, аналогично этому примеру, адаптированному из Astyanax. документация (столбцы на самом деле не sessionId
и token
, притворитесь, что это так):
// Annotated composite class
public class SessionEvent {
@Component(ordinal=0) UUID sessionId;
@Component(ordinal=1) UUID token;
@Component(ordinal=2) UUID timestamp;
public SessionEvent() { }
}
static AnnotatedCompositeSerializer<SessionEvent> eventSerializer
= new AnnotatedCompositeSerializer<>(SessionEvent.class);
static ColumnFamily<String, SessionEvent> CF_SESSION_EVENTS
= new ColumnFamily<>("SessionEvents",
StringSerializer.get(), eventSerializer);
// Querying cassandra for a column slice on one prefix, but we want two!
OperationResult<ColumnList<SessionEvent>> result = keyspace.prepareQuery(CF_SESSION_EVENTS)
.getKey("UserId1")
.withColumnRange(eventSerializer.buildRange()
.withPrefix("SessionId1")
.build())
.execute();
Проблема в том, что я хочу запросить все столбцы с двумя составными столбцами (в данном случае и sessionId
, и token
) в префиксе, а не только один, и для всех временных меток, а не только в пределах диапазона. Это вполне возможно и легко сделать с помощью CQL3, но я застрял на Cassandra 1.0.x и не могу найти способ, который принял бы Astyanax (либо дважды вызвав withPrefix(UUID)
, либо передав ему составную структуру данных).
Есть ли способ сделать это с Astyanax? Могу ли я как-то использовать базовый RangeBuilder
и, возможно, сериализовать начало и конец вручную?