Подведение итогов 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. Увидимся там!