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