Вопрос про объём задают в форме «сколько гигабайт в месяц», и в этой форме у него нет ответа. Разброс между двумя пользователями одной и той же системы — кратный: у одного восемь часов работы с текстом, у другого четыре часа с видео и включённая запись звука.
Ответ, который имеет смысл, — это формула, в которую вы подставите свои числа. Она считается за пять минут и даёт куда более полезный результат, чем чужой средний гигабайт.
#Короткий ответ
Годовой объём определяется не частотой захвата, а политикой устаревания. Система без политики растёт линейно и упирается в диск за месяцы. Система с уровнями хранения выходит на плато: старые записи теряют вес, а не накапливаются.
Разница между этими двумя режимами на горизонте года — не проценты, а порядок.
#Как это устроено: уровни хранения
Записывать всё в одном качестве вечно — самый дорогой из возможных способов. Разумная система хранит одни и те же данные в разной подробности в зависимости от возраста.
| Уровень | Возраст | Что хранится | Вес |
|---|---|---|---|
| Горячий | дни | изображение в полном качестве, текст, метаданные | наибольший |
| Тёплый | недели | изображение в пониженном разрешении, текст, метаданные | заметно меньше |
| Холодный | месяцы | текст и метаданные, изображение удалено | килобайты |
| Сводки | всегда | часовые карточки и дневные сводки | единицы килобайт |
| Удалено | после срока хранения | ничего | ноль |
Ключевой переход — из тёплого в холодный. Изображение занимает почти весь вес записи; распознанный текст и метаданные — доли процента от него. Отбросив картинку и оставив текст, вы теряете возможность посмотреть, как это выглядело, и сохраняете возможность найти, что там было написано. Для памяти, к которой обращаются поиском, это правильный размен. Устройство таких уровней разобрано в статье про иерархическую память и её уровни.
#Формула
Кадров в день = активных часов × 3600 / интервал захвата
Записей в день = кадры в день × (1 − доля дедупликации)
Горячий объём = записи в день × средний вес кадра × дней в горячем
Тёплый объём = записи в день × вес уменьшенного кадра × дней в тёплом
Холодный объём = записи в день × вес текста и метаданных × дней хранения
Итог за год = Горячий + Тёплый + Холодный + сводки + индексы
Три величины надо померить у себя, а не взять из статьи.
Средний вес кадра. Через неделю работы:
# Linux/macOS
du -sh ~/.persona/thumbnails
find ~/.persona/thumbnails -type f | wc -l
# Windows
$f = Get-ChildItem "$env:USERPROFILE\.persona\thumbnails" -Recurse -File
"{0} файлов, {1:N1} МБ" -f $f.Count, (($f | Measure-Object Length -Sum).Sum / 1MB)
Делите объём на количество — получаете свой средний вес кадра. Он зависит от разрешения экрана, от того, какое у вас содержимое (текст сжимается лучше графики), и от формата.
Доля дедупликации. Одинаковые и почти одинаковые кадры не дублируются, а вы значительную часть времени смотрите в один и тот же экран. Эта доля у всех разная и обычно велика. Померить её можно, сравнив число сделанных снимков с числом сохранённых записей за сутки.
Вес индексов. Полнотекстовый индекс — это не «служебная мелочь», он занимает заметную долю базы. Смотрите размер файла базы отдельно от каталога изображений и не удивляйтесь, если он окажется вдвое больше ожидаемого; про его устройство — в статье про SQLite и FTS5 на миллионах строк.
#Что из этого следует на практике
#Настройки, влияющие на объём
| Настройка | Как влияет |
|---|---|
| Интервал захвата | прямо пропорционально: реже кадры — меньше объём |
| Адаптивная частота | реже снимает при отсутствии активности |
| Порог простоя | не пишет, пока вас нет за машиной |
| Порог дедупликации | больше похожих кадров считаются одинаковыми |
| Запись звука | добавляет отдельный, заметный поток |
| Исключения приложений и окон | не пишет то, что писать не нужно |
| Понижение качества через N дней | переводит записи в тёплый уровень |
| Удаление изображений через N дней | переход в холодный — главный рычаг |
| Срок хранения | жёсткая граница, после которой удаляется всё |
| Дневной бюджет объёма | ориентир, по которому система себя ограничивает |
| Срок в корзине | удалённое занимает место ещё несколько дней |
Последнюю строку стоит выделить: удалённые записи какое-то время лежат в корзине и продолжают занимать место. Человек, который «всё почистил» и не увидел изменений на диске, обычно просто не дождался истечения этого срока.
Строки про исключения приложений — самый выгодный размен во всей таблице: они одновременно уменьшают объём и решают вопрос приватности, потому что убирают из записи именно то, что записывать не следовало.
#Порядок расчёта на год
- Померьте средний вес кадра за неделю.
- Посчитайте записи в день по своей реальной активности, а не по календарным суткам.
- Умножьте на глубину горячего уровня — обычно это дни или пара недель.
- Прибавьте тёплый уровень с его пониженным весом.
- Прибавьте холодный: текст и метаданные за весь срок хранения.
- Прибавьте индексы — берите ощутимую надбавку к базе, а не символическую.
- Умножьте итог на два. Не потому, что расчёт неточен, а потому что вам понадобится место под резервную копию и под временный файл журнала.
Пункт 7 забывают все. Диск, заполненный ровно под расчёт, — это диск, на котором нельзя сделать копию.
#Что происходит без политики устаревания
Если ни одного перехода между уровнями не настроено, из формулы выпадают все строки, кроме первой: каждый день добавляет объём горячего уровня, и рост линейный. Дальше арифметика простая и неприятная: разделите свободное место на дневной прирост и получите дату, когда диск кончится. Для активного пользователя это обычно месяцы, а не годы.
Именно поэтому политика устаревания — не «оптимизация на потом», а обязательная часть первоначальной настройки. Общий разбор того, как система вообще решает, что забыть, — в статье про стратегии забывания.
#Где интуиция подводит
«Запись экрана — это терабайты». Терабайты — это непрерывное видео. Снимки с дедупликацией и текстом — другой порядок, потому что вы значительную часть времени смотрите в неизменный экран.
«Главное — частота захвата». Она важна, но политика устаревания важнее: частота меняет наклон прямой, политика меняет саму форму кривой с прямой на плато.
«Место занимают картинки». В первый месяц — да. К концу года, если холодный уровень настроен, значительная часть объёма — это база с текстом и индексами, а не изображения.
«Удалил — освободилось». Не сразу: есть корзина со своим сроком, а файл базы после удаления строк сам по себе не уменьшается — он переиспользует освободившиеся страницы. Уплотнение — отдельная операция.
«Возьму диск побольше и не буду думать». Больший диск отодвигает дату, но не меняет линейного роста. Плюс появляется вторая проблема: резервная копия тоже становится больше, а вместе с ней — время её снятия и восстановления.
#Частые вопросы
#Сколько всё-таки гигабайт в месяц у типичного пользователя?
Честного среднего числа нет, и любое названное было бы выдумкой: разброс между пользователями кратный. Померьте свой средний вес кадра за неделю и подставьте в формулу — это займёт пять минут и даст ваше число, а не чужое. Общая оценка порядка величин по режимам работы — в статье о том, сколько это весит и тормозит ли ПК.
#Что занимает больше — изображения или звук?
Зависит от того, сколько вы говорите. Звук пишется непрерывно и не дедуплицируется, в отличие от кадров, поэтому при постоянно включённой записи он способен обогнать изображения. Расшифровки при этом почти ничего не весят.
#Можно ли хранить данные на внешнем диске?
Можно, с одной оговоркой: файл базы должен лежать на локальном диске, а не на сетевом ресурсе или в папке синхронизации — механизм блокировок SQLite там ведёт себя непредсказуемо. Изображения на внешний диск вынести проще и безопаснее.
#Что выбрать: удалять старое или понижать качество?
Понижать качество, а потом удалять только изображение, оставив текст. Это даёт основной выигрыш по объёму при минимальной потере ценности: искать по старым записям вы будете, а рассматривать их — почти никогда.
#Как это влияет на выбор арендованного сервера?
Прямо: диск — та статья, которая заканчивается первой. Считайте прогноз на год до выбора тарифа и проверяйте, можно ли увеличить диск без переезда. Требования по остальным параметрам — в статье про выбор VPS под личный ИИ-сервис.
#Что делать, если диск уже кончается?
По порядку: очистить корзину, уменьшить глубину горячего и тёплого уровней, включить удаление изображений для старых записей, уплотнить базу. Уменьшать частоту захвата стоит в последнюю очередь — она влияет на то, что вы запишете завтра, а не на то, что уже занято сегодня. Куда встроить проверку свободного места, чтобы этот вопрос не заставал врасплох, — в статье о том, как поднять свой ИИ-сервис.