Строка SQLite содержит другой строковый запрос

я недавно столкнулся с ситуацией, когда мой экземпляр CouchDB использовал все доступное дисковое пространство на экземпляре виртуальной машины объемом 20 ГБ. После расследования я обнаружил, что каталог в / usr / local / var / lib / couchdb / содержит кучу файлов .view, самый большой из которых составляет 16 ГБ. Мне удалось удалить файлы * .view для восстановления нормальной работы. Я не уверен, почему файлы .view стали такими большими и как CouchDB управляет файлами .view.

Немного больше информации. У меня есть виртуальная машина под управлением Ubuntu 9.10 (karmic) с 512 МБ и CouchDB 0.10. Виртуальная машина имеет задание cron, которое вызывает скрипт Python, который запрашивает представление. Задание cron выполняется раз в пять минут. Каждый раз, когда запрашивается представление, размер файла .view увеличивается. Я написал работу, чтобы отслеживать это ежечасно, и через несколько дней я не вижу, чтобы файл переворачивался или иным образом уменьшался в размере.

Есть ли у кого-нибудь какие-либо идеи по этому вопросу? Есть ли документация, которую я пропустил? У меня нет Я не смог найти что-либо по этому вопросу, но это может быть связано с поиском не в тех местах или с помощью моих поисковых запросов.

11
задан Carlos Justiniano 17 August 2010 в 02:16
поделиться

2 ответа

CouchDB очень требовательна к диску, обменивая дисковое пространство на производительность. Представления будут увеличиваться в размере по мере добавления в них элементов. Вы можете восстановить дисковое пространство, которое больше не нужно, с помощью очистки и уплотнения.

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

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

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

13
ответ дан 3 December 2019 в 04:30
поделиться

То, что ваши файлы .view растут при каждом обращении к представлению, объясняется тем, что CouchDB обновляет представления при обращении к ним. Представления CouchDB также нуждаются в уплотнении, как и базы данных. Если вы часто изменяете документы, что приводит к изменениям в представлениях, вам следует время от времени запускать уплотнение представлений. См. http://wiki.apache.org/couchdb/HTTP_view_API#View_Compaction

Чтобы уменьшить размер представления, посмотрите на данные, которые вы передаете. Когда вы эмитируете(foo, doc), весь документ копируется в представление, чтобы он был мгновенно доступен при запросе к представлению. Функция(doc) { emit(doc.title, doc); } приведет к представлению размером с саму базу данных. Вы также можете emit(doc.title, nil); и использовать опцию include_docs, чтобы позволить CouchDB извлекать документ из базы данных при обращении к представлению (что приведет к небольшому снижению производительности). See http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options

7
ответ дан 3 December 2019 в 04:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: