Riak и записи с сортировкой по времени

Я хотел бы отсортировать некоторые записи, хранящиеся в riak, по функции оценки каждой записи и «возраста» (текущее время - дата создания). Каков наилучший способ выполнить "срочный" запрос в riak? На данный момент мне известны следующие варианты:

  • Mapreduce в реальном времени — выполните весь расчет в задании mapreduce во время запроса.
  • Задание ETL. Периодически выполняйте запрос в фоновом задании и сохраняйте результат обратно в riak.
  • Переместите его на уровень приложения — вообще не сортируйте с помощью riak, а вместо этого используйте уровень уровня приложения для сортировки и кэширования записей.

Mapreduce кажется лучшим на бумаге, однако я читал смешанные отчеты о реальной задержке riak mapreduce.


person Jason S    schedule 03.07.2013    source источник


Ответы (1)


MapReduce — довольно дорогая операция, и ее не рекомендуется использовать в качестве инструмента запросов в реальном времени. Лучше всего он работает при работе с ограниченным набором данных в пакетном режиме, где можно контролировать количество одновременных заданий mapreduce, поэтому я бы не рекомендовал первый вариант.

Если процесс периодически обрабатывает/агрегирует данные для определенного интервала времени, как описано во втором варианте, это может сработать и обеспечить эффективный доступ к подготовленным данным посредством прямого доступа по ключу. Процесс агрегации может, если вы используете leveldb, основываться на вторичном индексе, содержащем метку времени. Однако одним недостатком может быть то, что новые вставленные записи могут не сразу отображаться в результатах, что может быть или не быть проблемой в вашем сценарии.

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

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

person Christian Dahlqvist    schedule 04.07.2013