2012-06-19 3 views
1

У меня есть cassandra db и семейство столбцов с компаратором TimeUUIDType. Я использую Hector и имею пространство ключей, используя RandomPartitioner.Срезанный запрос на столбцах TimeUUID

Я хотел бы сделать запрос на срез, чтобы получить результаты, упорядоченные по таймеру TimeUUID.

SliceQuery<String, UUID, UserLike> query = HFactory.createSliceQuery(getKeyspace(), StringSerializer.get(), TimeUUIDSerializer.get(), UserLikesSerializer.get()); 
query = query.setKey(username); 
query.setColumnFamily(SOME_CF); 

Когда я конфигурирую запрос с этим кодом:

query.setRange(new UUID(UUIDGen.createTime(Long.MAX_VALUE),UUIDGen.getClockSeqAndNode()), null, true, maxResults); 

я получающий данными с неверной последовательностью (возможно, потому что я использую RandomPartitioner - правильно?) Когда я конфигурирую запрос с этим кодом:

query.setRange(new UUID(UUIDGen.createTime(Long.MAX_VALUE),UUIDGen.getClockSeqAndNode()), new UUID(UUIDGen.createTime(0),UUIDGen.getClockSeqAndNode()), true, maxResults); 

я получает ошибку:

InvalidRequestException(why:range finish must come after start in the order of traversal) 
at me.prettyprint.hector.api.exceptions.HInvalidRequestException 

Любые идеи?

ответ

1

Во-первых, вы видите эту ошибку, потому что вам нужно использовать getTimeUUIDBytes, а не new UUID; последний просто сочиняет uuid из двух длин, которые вы ему даете, ни одна из них не является «временной меткой» как таковой. Итак:

query.setRange(UUIDGen.getUUID(UUIDGen.getTimeUUIDBytes(Long.MAX_VALUE)), null, true, maxResults); 

В целом, вы можете просто передать NULL, NULL, как старт/конец диапазона, когда вам просто нужно сказать «дайте мне первую страницу результатов» и не придется беспокоиться об этом.

+0

нет точно. Была ли проблема с интервалом времени (я имею в виду значение Long.MAX_VALUE). Я заменил его System.currentTimeInMillis(), и теперь он работает как шарм – tomekkup

1

Эта ошибка объясняется тем, что начальный диапазон больше, чем значение конечного диапазона в запросе, который вы использовали.

Смежные вопросы