Мы используем ByteOrderedPartitioner для хранения временных рядов для нового проекта, cql3 был для нас приемлемым только на мгновение, затем мы выбираем Гектора, чтобы двигаться дальше, но теперь наш запрос диапазона не работает.
С* версия: 2.0.7
Версия Гектора: 1.0-5
Схема:
ColumnFamilyDefinition cfd = HFactory.createColumnFamilyDefinition(
keyspaceName, columnFamilyName,
ComparatorType.UTF8TYPE);
cfd.setComparatorTypeAlias("(IntegerType,IntegerType,IntegerType)");
cfd.setKeyValidationClass("CompositeType(IntegerType,IntegerType,IntegerType)");
cfd.setDefaultValidationClass(ComparatorType.UTF8TYPE.getClassName());
Ключ строки: 100:20:11
=> (имя = столбец 1, значение = AAL, отметка времени = 1401745673543000)
=> (имя = столбец 2, значение = Нью-Йорк, отметка времени = 1401745673543002)
Ключ строки: 100:20:12
=> (имя = столбец 1, значение = AAL, отметка времени = 1401745673543000)
=> (имя = столбец 2, значение = TXA, отметка времени = 1401745673543002)
И так далее..
Запрос для перебора всех строк семейства столбцов cassandra
Composite startComposite = new Composite();
startComposite.addComponent(0,100,EQUAL);
startComposite.addComponent(1,20,EQUAL);
startComposite.addComponent(2,11,EQUAL);
Composite endComposite = new Composite();
endComposite.addComponent(0,100,EQUAL);
endComposite.addComponent(1,20, EQUAL);
endComposite.addComponent(2,18,GREATER_THAN_EQUAL);
int rowCount = 100;
RangeSlicesQuery<Composite, String, String> rangeSlicesQuery = HFactory
.createRangeSlicesQuery(ksp, CompositeSerializer.get(), StringSerializer.get(), StringSerializer.get())
.setColumnFamily(columnFamilyName)
.setRange("", "", false, rowCount);
rangeSlicesQuery.setKeys(startComposite, endComposite);
QueryResult<OrderedRows<Composite, String, String>> result = rangeSlicesQuery.execute();
System.out.println(result.get());
Получить пустые строки:
Строки({})