Как вернуть объекты Riak, отсортированные по значению ключа?

У меня есть ведро под названием "сотрудники". В нем есть ключи, которые выглядят так:

"ryan_07-01-2012_8:15pm"
"joy_07-02-2012_8:20pm"
"ryan_07-03-2012_8:30pm"
"tammy_07-05-2012_8:10pm"
"tammy_07-11-2012_8:01pm"
"joy_07-15-2012_8:20pm"

Все ключи указывают на объекты Riak, которые выглядят примерно так:

{ description: "left the office", signed-out: "8:15pm" }

В Riak, особенно с клиентом php, riak-php, как бы вы возвращали объекты, упорядоченные по времени и дате, на основе значений ключей (т. Е. "Ryan_07-01-2012_8:15pm").

1 ответ

Возможно, вам нужен лучший формат времени / даты, чем этот, этот формат не особенно форматируемый. Например, ГГГГ-ММ-ДД_ЧЧ: ММ: СС (php's date() формат будет 'Y-m-d_H:i:s'). Это можно было бы отсортировать лексикографически.

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

Вы можете использовать ключевые фильтры для ограничения документов, возвращающихся к определенному диапазону (или использовать вторичный индекс - это будет быстрее, см. Больше ниже). Несмотря на то, что можно отсортировать возвращаемые значения внутри операции отображения / уменьшения, я рекомендую сортировать данные в PHP после их возвращения (например, используя uasort()). Это будет не так сложно, как сортировка в операции отображения / уменьшения, и, скорее всего, быстрее, так как вам не нужно раскручивать движок JavaScript V8 для отображения / уменьшения (при условии, что вы не пишете функции Erlang M/R), Кроме того, данные могут быть сокращены в несколько раз по мере того, как узлы отчитываются, так что вы, по сути, повторно сортируете некоторые данные несколько раз. Так что сортировка в PHP проще и быстрее.

Вам также следует рассмотреть возможность добавления вторичного индекса (или нескольких) к документам, это значительно ускорит время нахождения документов. Например, у вас может быть вторичный индекс "timestamp", и вы можете выполнять поиск по диапазону. Документацию по вторичным индексам смотрите в README на клиенте Riak PHP. Для рабочих примеров использования вторичных индексов в клиенте Riak PHP ознакомьтесь с модульными тестами вторичного индекса.

Другие вопросы по тегам