Я работаю с базой данных sqlite3, которая может стать довольно большой. Место для хранения является проблемой, поэтому я рассматривал возможность включения прагмы auto_vacuum, чтобы пространство, занимаемое удаленными строками, было фактически освобождено, а не просто помечено как доступное для повторного использования.
В моем сценарии база данных может увеличиваться на несколько сотен МБ в месяц, в то время как строки старше ~ 6 месяцев будут детально разрушаться. Это достигается с помощью очереди заданий, которая случайным образом выполняет задачу удаления nn самых старых записей в дополнение к текущей задаче, где nn определяется количеством высокоприоритетных задач в очереди.
Я надеюсь, что это избавит от необходимости писать задания по обслуживанию, которые вызывают длительное голодание RW (порядка нескольких минут, чтобы удалить строки и затем запустить VACUUM), когда то же самое может быть достигнуто несколькими MS одновременно. Это может означать, что «старые» строки остаются в БД на несколько дней дольше, чем в противном случае, но это приемлемый компромисс.
Мой вопрос, по вашему опыту (и, возможно, мнению), будет ли включение auto_vacuum неприемлемым компромиссом, учитывая мое описание? Если да, то по каким причинам? Я не использовал sqlite3 широко, а тем более различные прагмы, которые он представляет для настройки, поэтому я надеюсь получить опыт, которого мне не хватает, прежде чем сделать суждение, о котором я мог бы пожалеть несколько месяцев спустя:)
Я использую интерфейс C, если это имеет какое-либо значение.