Подведение итогов Cloudant (часть 10 из 10)
Это было эмоциональное путешествие по основам Клауданта, но мы почти подошли к концу. В этом заключительном посте мы обсудим агрегирование данных: подсчет, суммирование и статистику.
Cloudant Query, который мы использовали в части 8 и части 9 этой серии, не имеет возможности выполнять агрегирование, только выбор. Например, вы можете сделать эквивалент SELECT * FROM mydb WHERE actor='Al Pacino'
, но не SELECT COUNT(*) FROM mydb WHERE actor='Al Pacino'
.
Уменьшение карты
Один из вариантов - написать собственное представление MapReduce. Представление определяется как функция JavaScript. Cloudant берет каждый документ в базе данных, по очереди передает его этой функции, а затем сохраняет созданные пары ключ / значение в индексе на диске.
Чтобы подсчитать количество документов по акторам, мы должны создать такую функцию карты:
Эта функция в сочетании со встроенным _count
reducer производит подсчет каждого значения актора. Другие встроенные редукторы (_stats
и _sum
) могут использоваться для вычисления статистики по второму полю, создаваемому вашей функцией карты:
В приведенном выше примере можно использовать иерархический ключ year
и month
для группировки агрегирования поля orderValue
- идеально для отчетов и панелей мониторинга.
Количество граней
Другой способ вычисления простых агрегатов подсчета - использование функции фасетирования Cloudant Search. Как и MapReduce, индексы Cloudant Search настраиваются на JavaScript, на этот раз с функцией index
вместо emit
:
В приведенном выше примере индексируются два поля (category
и price
) из нашего документа и указывается, что оба поля должны быть «фасетированы». Это означает, что значения можно подсчитать во время запроса, указав параметр counts
:
См. Документацию для дальнейших примеров подсчета фасетов и фасетирования диапазона.
Агрегация с помощью cloudant-quickstart
Самый простой способ выполнить агрегацию - использовать библиотеку cloudant-quickstart. Подсчет выполняется без самостоятельного определения индекса:
Просто укажите поле или массив полей, по которым вы хотите сгруппировать, и библиотека создаст для вас соответствующее представление MapReduce.
То же самое касается агрегатов stats
и sum
.
Последний отсчет
В этой серии статей по основам Cloudant мы затронули дизайн схемы, уникальные идентификаторы, токены редакции, операции CRUD, запросы и агрегирование. Но есть еще кое-что.
Есть проект под названием PouchDB, который может поразить ваше воображение. Вы также можете выполнить поиск в нашей публикации Medium, чтобы найти больше статей о Cloudant и CouchDB. И, конечно же, вы можете связаться с более широким сообществом с открытым исходным кодом на каналах чата Apache CouchDB или принять участие через списки рассылки CouchDB. Увидимся там!