Есть ли недостатки в прагме sqlite3 auto_vacuum? - PullRequest
2 голосов
/ 11 ноября 2010

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

В моем сценарии база данных может увеличиваться на несколько сотен МБ в месяц, в то время как строки старше ~ 6 месяцев будут детально разрушаться. Это достигается с помощью очереди заданий, которая случайным образом выполняет задачу удаления nn самых старых записей в дополнение к текущей задаче, где nn определяется количеством высокоприоритетных задач в очереди.

Я надеюсь, что это избавит от необходимости писать задания по обслуживанию, которые вызывают длительное голодание RW (порядка нескольких минут, чтобы удалить строки и затем запустить VACUUM), когда то же самое может быть достигнуто несколькими MS одновременно. Это может означать, что «старые» строки остаются в БД на несколько дней дольше, чем в противном случае, но это приемлемый компромисс.

Мой вопрос, по вашему опыту (и, возможно, мнению), будет ли включение auto_vacuum неприемлемым компромиссом, учитывая мое описание? Если да, то по каким причинам? Я не использовал sqlite3 широко, а тем более различные прагмы, которые он представляет для настройки, поэтому я надеюсь получить опыт, которого мне не хватает, прежде чем сделать суждение, о котором я мог бы пожалеть несколько месяцев спустя:)

Я использую интерфейс C, если это имеет какое-либо значение.

1 Ответ

2 голосов
/ 11 ноября 2010

Разработчик Liferea объясняет, почему :

Проблема в том, что это также очень долго . С файлом DB размером 50 МБ время работы составило более 1 минуты. Вот почему это может быть только инструмент для опытных пользователей, которые знают, как сделать это вручную, зная, чего ожидать. Выполнение такой длительной операции автоматически во время выполнения, несомненно, будет неприемлемым для ничего не подозревающего пользователя. Также нет хорошего способа решить, когда делать VACUUM, чтобы сэкономить дисковое пространство и повысить производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...