Есть ли недостатки в sqlite как формате архивации?
У меня есть несколько огромных папок с небольшими файлами, которые я хочу заархивировать для длительного хранения (около 200 ГБ).
Вместо того, чтобы просто использовать что-то вроде gzip/tar/dar/7zip, я подумываю использовать sqlite
sqlite3 Backup.db ".ar -cv Data"
Независимо от сжатия, я иду к некоторым подводным камням? Есть ли какие-то преимущества у старой простой смолы?
1 ответ
Основной недостаток: вам нужен sqlite3
исполняемый файл с поддержкой архива, когда вам нужно восстановить ваши данные. В зависимости от обстоятельств, у вас может не быть под рукой, но вы с большей вероятностью найдете работающий gzip
, tar
и др.
Вот почему я особенно педантичен по этому поводу:
- система MacOS
sqlite3
версии, как правило, находятся в пределах досягаемости от актуальных версий, но Apple лишь время от времени обновляет свое программное обеспечение, и многие пользователи Mac могут запускать устаревшие ОС по разным причинам. Следовательно, система MacOSsqlite3
до того, как Mojave не поддерживает архивирование, поэтому для переносимости вам определенно нужно будет установить и обновить пакет Homebrew sqlite3. - Homebrew в Linux по умолчанию устанавливает бутылочный (т.е. предварительно скомпилированный двоичный файл) sqlite v3.26, который каким-то образом не поддерживает архивирование. Мне пришлось
brew install --build-from-source sqlite3
чтобы исправить это.
Это всего лишь два примера, с которыми у меня есть личный опыт. Платформы, на которых вы планируете работать, могут иметь аналогичные ошибки. Сравните это с "это работает везде" gzip
/tar
/так далее.
Итак, если вы хотите использовать формат sqlar всерьез, внимательно рассмотрите все обстоятельства и условия, в которых вы будете это делать. Например, на аварийном диске может отсутствовать архивация sqlite3
и вы действительно не хотите создавать sqlite с нуля во время аварийного восстановления.
Помимо наличия архива, способного sqlite3
Вы также должны рассмотреть вопрос о размерах файлов.
Поскольку sqlar - это, по сути, БД SQLite, он наследует все ограничения этого формата файла. В частности, данные каждого файла хранятся в виде большого двоичного объекта, максимальный размер которого по умолчанию составляет 1 миллиард байт. Кроме того, обработка запросов SQLite приводит к тому, что каждая строка обрабатывается как один большой двоичный объект, что еще больше снижает размер файла.
Сравните это с ZIP (232 для "классического ZIP", 264 для ZIP64) или GNU tar (без ограничений), и у вас может быть еще одна причина выбрать традиционный маршрут.