不幸的是,在 Cassandra 中仅使用一个列族是无法轻松做到这一点的。问题是您希望 cassandra 根据两个不同的事物进行排序:datetime1 和 datetime2。
显而易见的结构是让您的列是 Composite(TimeUUID,TimeUUID,Integer)的复合类型。在这种情况下,它们将按 datetime1、datetime2、integer 排序。
但是您将始终根据 datetime1 而不是 datetime2 获得排序(尽管如果两个条目具有相同的 datetime1 那么它将仅根据 datetime2 对这些条目进行排序)。
一种可能的解决方法是让两个列族具有重复数据(或者实际上每个逻辑行有两行)。插入数据的一行 (datetime1:datetime2:integer) 和插入数据的另一行 (datetime2:datetime1:integer)。然后,您可以对这两行执行 multigetslice 操作,并在将数据交给调用者之前组合数据:
final MultigetSliceQuery<String, Composite, String> query = HFactory.createMultigetSliceQuery(keyspace,
StringSerializer.get(),
CompositeSerializer.get(),
StringSerializer.get());
query.setColumnFamily("myColumnFamily");
startQuery.setKeys("myRow.arrangedByDateTime1", "myRow.arrangedByDateTime2");
startQuery.setRange(new Composite(startTime), new Composite(endTime), false, Integer.MAX_VALUE);
final QueryResult<Rows<String,Composite,String>> queryResult = query.execute();
final Rows<String,Composite,String> rows = queryResult.get();