У меня есть база данных CouchDB с документами, представляющими 100 000 событий. Каждое событие имеет, помимо прочего, время, в которое оно произошло (хранится в виде массива [Год, месяц, день, час, минута, секунда]) и счет. Я хотел бы сделать график средних баллов по времени. Чтобы сделать это, я создал вид с картой, которая генерирует ключи, сгруппированные по интервалам, и функцию уменьшения, которая усредняет ключи в сегменте.
Это работает довольно хорошо. Когда запрашивается общее среднее значение, CouchDB возвращает результат почти мгновенно. Когда я собираю данные за день и получаю около сотни результатов, моя база данных CouchDB занимает пару сотен мсек, чтобы получить результат. Используя более 1000 сегментов, запрос занимает несколько секунд, чтобы вернуться. Пока этот запрос выполняется, мой процессор переходит на 100%, а мой диск довольно тихий.
Я немного озадачен этим замедлением. Поскольку сокращение всего, что происходит, кажется мгновенным, я пришел к выводу, что накладные расходы могут возникнуть при создании документа JSON с 1000+ записями. Разве CouchDB не способен быстро вернуть 1000 строк результатов?
Я немного новичок в CouchDB, поэтому вполне возможно, что моя карта или функция уменьшения ужасны, или, возможно, где-то в конфигурации есть флаг, который позволяет CouchDB использовать больше памяти. Или, может быть, дело в том, что CouchDB просто сильно оптимизирован для агрегирования запросов с возвратом многих результатов.
Рекомендации