RethinkDb динамически обновляет вторичные индексы на основе функций?

Допустим, мне нужно поддерживать индекс в таблице, где несколько документов могут быть связаны с одним и тем же item_id (конечно, не с первичным ключом).

Может ли один вторичный составной индекс, основанный на результате функции, которая из любого item_id возвращает самый последний документ на основе условия, обновлять себя всякий раз, когда вставляется более новый документ?

Эта таблица уже содержит 1,2 миллиона документов всего за 25 дней, поэтому здесь речь идет о больших данных, поскольку она будет продолжать расти и всегда должна сохранять старые записи для создания любых опорных точек, необходимых на протяжении многих лет.


person DevLounge    schedule 12.01.2016    source источник


Ответы (1)


Я не уверен на 100%, что понимаю вопрос, но если у вас есть вторичный индекс и вы вставляете новый документ или изменяете старый документ, документ будет в правильном месте в индексе после завершения записи. Таким образом, если у вас есть вторичный индекс для метки времени, вы можете написать r.table('items').orderBy(index: r.desc('timestamp')).limit(n), чтобы получить самые последние n документы (и вы также можете подписаться на изменения в этом).

person mlucy    schedule 12.01.2016
comment
Или max(index=r.desc('timestamp')) - person DevLounge; 12.01.2016
comment
Но здесь max должна быть максимальной отметкой времени для каждого уникального item_id (несколько документов с одним и тем же item_id, но всегда должны возвращаться самые последние) - person DevLounge; 12.01.2016
comment
А, хорошо, значит, вы хотите написать запрос, который возвращает самую последнюю строку для каждого item_id? Если количество item_id достаточно мало, чтобы вы могли вернуть их все сразу, вы можете использовать для этого group. В противном случае я не думаю, что это легко достижимо прямо сейчас. - person mlucy; 12.01.2016