Astyanax通過其AnnotatedCompositeSerializer
支持Cassandra中的複合柱。我有一個列族有3場複合列名,類似這樣的例子,從Astyanax's documentation改編(列實際上不是sessionId
和token
,假裝他們是爲了便於討論):如何使用Astyanax查詢多個組合列前綴?
// 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
並手動序列化開始和結束,也許?
我的錯誤;我錯過了這個問題的一個關鍵部分,我不知道開始和結束時間戳,我想要得到所有這些時間戳。 –
然後只需將startTime和endTime設置爲空。我修改了上面的代碼以反映這一點。 – pscuderi
這似乎不適合我;我沒有收到專欄。 :( –