К сожалению, это невозможно легко сделать с помощью всего одного семейства столбцов в Cassandra. Проблема в том, что вы хотите, чтобы cassandra сортировала по двум разным параметрам: datetime1 и datetime2.
Очевидной структурой для этого было бы, чтобы ваши столбцы были составными типами составных (TimeUUID, TimeUUID, Integer). В этом случае они будут отсортированы по дате-времени1, затем по дате-времени2, а затем по целому числу.
Но вы всегда будете получать порядок на основе даты и времени 1, а не на дату и время 2 (хотя, если две записи имеют одинаковую дату и время 1, тогда он будет упорядочивать только эти записи на основе даты и времени 2).
Возможным обходным решением было бы иметь два семейства столбцов с повторяющимися данными (или даже две строки для каждой логической строки). Одна строка, куда вставляются данные (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();
person
agentgonzo
schedule
22.03.2012