2015-04-10 4 views
1

CouchDB имеет специальный вид _all_docs, который возвращает документы, отсортированные по идентификатору. Но поскольку идентификаторы по умолчанию случайны, сортировка не имеет смысла.CouchDB: Получить последние документы?

Мне всегда нужно сортировать по дате добавления. Теперь у меня есть два варианта:

  1. Генерирование мой собственный идентификатор и убедитесь, что они начинают с меткой времени
  2. Используйте стандартный идентификатор GUID, но добавить метку времени в формате JSON, и вид на что

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

Правда ли, что оба решения отличаются производительностью? И если это правда, какая из них скорее всего будет быстрее или предпочтительнее?

ответ

3

Правда ли, что оба решения отличаются производительностью?

Приведенные ниже примеры с описанием подхода первичного и вторичного индексов в CouchDB.

_all_docs является единственным основным индексом и всегда является актуальным. Вторичные индексы (представления), как в вашем втором решении, которые обновляются, когда они запрашиваются.

Это причина, по которой с точки зрения получателя точка зрения _all_docs может быть «быстрее». В реальности нет разницы в запросе уже обновленных индексов. Два обходных пути для потенциально устаревших представлений (вторичные индексы) - это использование параметра запроса stale=ok (обновление представления после ответа на запрос) или так называемые «нагреватели представлений» (отправьте простой HTTP-запрос на просмотр, чтобы инициировать обновление обработать).

И если это правда, какой из них [...] предпочтителен?

Возможности создания полезной полезной нагрузки индекса и ответа значительно выше на стороне вторичных индексов.

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

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

+0

Отличный отклик, просто собирается подключиться и сказать, что этот ответ также применим к PouchDB. :) – nlawson

+0

@nlawson^5! Хорошо знать. –

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