2013-06-26 3 views
0

Наши имена столбцов целенаправленно выбираются так, чтобы они возвращались в желаемом порядке (ключ в основном является внутренним порядковым номером). Наши рядовые ключи аналогичным образом упорядочены. В основном одна строка в день, все столбцы дня добавляются в эту строку.Получите последний добавленный столбец по всем строкам?

Учитывая, что как создать запрос в Hector, чтобы вернуть мне последний столбец из последней строки? Или самый старый? В двух словах два наиболее распространенных запроса: «Получите последнюю запись» и «Получите мне самую старую запись».

Я недостаточно хорошо знаком с Кассандрой или Гектором, чтобы разобраться в правильном запросе. Это должно выглядеть примерно так?

QueryResult<OrderedRows<String, String, Long>> result = 
    rangeSlicesQuery.setColumnFamily(cf).setKeys("", "").setRowCount(1).setRange("","",true,1).execute(); 

Поскольку имена столбцов динамически сгенерированные значения, и я понятия не имею, когда последний или первое значение, я не вижу никакого способа получения вокруг открытого состава значений для ключей и диапазонов столбцов. Надеюсь, Гектор/Кассандра достаточно умен, чтобы сделать это быстро или есть какая-то оптимизация, которую я должен сделать?

ответ

2

Вы хотите, чтобы столбцы упорядочивались в обратном порядке, таким образом вы можете сделать запрос на срез в строке с лимитом 1 и получить только самое последнее значение. Если у вас нет обратного порядка, вам нужно прочитать всю строку.

Что касается того, как получить самую последнюю строку, нет способа найти ее в одном запросе. Один из способов - поддерживать индекс всех ваших строк (снова в обратном порядке, чтобы вы могли использовать тот же трюк, чтобы выбрать самый последний), и сначала нажмите этот индекс, а затем строку. Другим способом является то, что если у вас есть приблизительное представление о его значении, и вы можете предсказать последовательность значений (как это звучит, как вы можете, должна быть одна строка в день, и не должно быть строк позже, чем сегодня), тогда вы выберите последнее возможное значение и попытайтесь загрузить его, если вы ничего не получите, попробуйте загрузить следующее последнее значение и так далее. Если маловероятно, что вы получите удар по первой попытке (например, если не существует строки для каждого дня, только для большинства дней), вы можете запросить примерно пять или десять значений за раз, и просто выберите в последнее время вы возвращаетесь (и повторяете, если ничего не получите).

+0

Спасибо, что, кажется, подтверждают веб-страницы bazillion, которые я вчера посмотрел :). К сожалению, Cassandra, похоже, не очень подходит для этого конкретного набора запросов, основанных на том, как у нас теперь настроено настроение. Мне нужно вернуться и подумать о том, как мы моделируем ... –