![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
"SQLite Archive" является емкостью для файла, подобной
ZIP-архиву или
Tarball,
но на основе базы данных SQLite. SQLite Archive это обычный файл базы данных SQLite, который содержит
следующую таблицу как часть ее схемы: Каждая строка таблицы SQLAR содержит содержание единственного файла.
Имя файла (полный путь относительно корня архива) находится в области "name".
Поле "mode" это целое число, которое является правами доступа стиля Unix для
файла. "mtime" это время изменения файла в секундах с 1970.
"sz" это оригинальный несжатый размер файла. Область "data" содержит
содержание файла. Содержание обычно сжимается, используя
Deflate, хотя не всегда. Если "sz"
равно размеру области "data", содержание сохранено несжатым.
SQLite Archive это один пример более общего представления, что база данных
SQLite может вести себя как контейнерный объект, содержащий много
меньших компонентов данных. С базами данных клиент-сервер как PostgreSQL или Oracle, пользователи и
разработчики склонны думать о базе данных как о сервисе или узле, но не как
об объекте. Это вызвано тем, что содержание базы данных распространено на
многие файлы на сервере или возможно на многие серверы в сервисной группе.
Нельзя указать на единственный файл или даже единственный каталог
и сказать, что "это база данных". SQLite, напротив, хранит все содержание в
единственном файле на диске. Тот единственный
файл это что-то, на что можно указать и сказать, что "это база данных
". Это ведет себя как объект. Файл базы данных SQLite может быть
скопирован, переименован, послан как почтовое приложение, передан как
аргумент POST-запросу HTTP, или иначе обработан
как другой объект данных, такой как изображение, документ или медиа-файл. Исследования показывают, что много приложений
уже используют SQLite в качестве контейнерного объекта. Например,
Kennedy (не имеет никакого отношения к
SQLite developer) сообщает, что 14% приложений Android никогда не пишут
в их базы данных SQLite. Считается, что эти приложения загружают все базы
данных из облака и затем используют информацию в местном масштабе по мере
необходимости. Другими словами, они используют SQLite не как базу данных, а
как запрашиваемый формат электронной передачи. Fossil Distributed Version Control
предоставляет пользователям выбор загрузить регистрации как Tarball, архивы
ZIP или как архивы SQLite. Архив SQLite гибок. ZIP Archive и Tarball
ограничиваются хранением только файлов. Архив SQLite хранит файлы плюс другие
табличные и/или относительные данные, которые кажутся
полезными для применения. SQLite Archive транзакционный. Обновления атомные и длительные, даже
если есть потери мощности посреди обновления.
Читатели видят последовательную и неизменную версию содержания, даже если
некоторый другой процесс одновременно обновляет архив. SQLite Archive может быть обновлен с приращением.
Отдельные файлы могут быть добавлены, удалены или заменены, не имея
необходимости переписывать весь архив. SQLite Archive может быть запрошен,
используя язык запросов высокого уровня (SQL). Некоторые примеры: Приложения, которые уже используют SQLite для других целей, могут
легко добавить поддержку SQLite Archives, используя маленькое расширение
(
https://sqlite.org/src/file/ext/misc/sqlar.c),
чтобы обращаться со сжатием и декомпрессией содержания. Даже это крошечное
расширение может быть опущено, если файлы в архиве не сжаты.
Напротив, поддержка ZIP Archive и/или Tarball требует отдельных библиотек или
большого количества дополнительного кода. SQLite Archive может работать вокруг наложенной брандмауэром цензуры.
Например, определенные типы файлов, которые считают "опасными"
(например: DLL), будут
блокироваться Gmail
и вероятно многими другими почтовыми сервисами и брандмауэрами, даже если
файлы будут обернуты в ZIP Archive или Tarball. Но эти брандмауэры обычно
еще не знают об SQLite Archive и таким образом, содержание может быть
помещено в архиве SQLite, чтобы уклониться от цензуры. SQLite Archive это относительно новый формат. Это было сначала
описано в 2014. ZIP Archive и Tarball, с другой стороны, известны в течение
многих десятилетий и хорошо укреплены как стандартные форматы.
Большинство программистов знает, каковы ZIP Archive или Tarball, но если вы
скажете "Архив SQLite", то вы, вероятно, получите ответ
"Что?". Утилиты, чтобы обработать ZIP Archive и Tarball, более
вероятно, будут установлены на компьютерах. Так как база данных SQLite это более общий формат (она разработана,
чтобы сделать намного больше, чем просто
связку файлов), это не столь компактно как ZIP Archive или Tarball.
SQLite Archive обычно приблизительно на 1% более крупный, чем эквивалентный
ZIP Archive. Tarball сжаты как единый блок вместо того, чтобы сжать каждый
файл отдельно, как сделано SQLite и ZIP Archive. Как пример, следующая таблица показывает относительные размеры для
SQLite Archive, ZIP Archive и Tarball с 1743 файлами в дереве
исходных текстов SQLite 3.22.0: SQLite Archive поддерживает только метод сжатия
Deflate. Tarball и ZIP Archive поддерживают
более широкий ассортимент методов сжатия. Рекомендуемый способ создать, обновить, просмотреть и извлечь
SQLite Archive состоит в том, чтобы использовать
sqlite3.exe для SQLite
version 3.23.0
(2018-04-02) или позже. Эта CLI поддерживает параметр командной строки -A,
который разрешает легкое управление SQLite Archives.
CLI для SQLite version 3.22.0
(2018-01-22) имеет команду .archive
для управления SQLite Archive, но это требует взаимодействия с оболочкой. Перечислить все файлы в SQLite Archive "example.sqlar" можно
одной из этих команд: Извлечь все файлы из SQLite Archive "example.sqlar": Создать новый архив SQLite, названный "alltxt.sqlar",
содержащий все файлы *.txt в текущем каталоге: Добавить или обновить файлы в существующем архиве SQLite: Для подсказок использования и резюме всех вариантов, просто дайте
CLI опцию -A без дополнительных аргументов: Все эти команды работают так же,
если аргумент имени файла является архивом ZIP вместо базы данных SQLite. Так же, как есть программа "zip", чтобы управлять архивами ZIP, и
программа "tar", чтобы управлять Tarball, есть программа
"sqlar", чтобы управлять архивами SQL.
Программа "sqlar" в состоянии создать новый архив SQLite, перечислить
содержание существующего архива, добавить или удалить файлы из архива и/или
извлечь файлы из архива. Отдельная программа "sqlarfs" в состоянии
установить архив SQLite как
Fuse Filesystem. Приложения могут легко читать или писать SQLite Archive, будучи
скомпонованными с SQLite и включая расширение
ext/misc/sqlar.c,
чтобы обращаться со сжатием и декомпрессией. Расширение sqlar.c создает две
новых функции SQL. sqlar_compress(X) пытается сжать копию
blob X алгоритмом Deflate
и возвращает результат как blob. Если вход X не является сжимаемым blob,
то копия X возвращена. Этот установленный порядок используется, вставляя
содержание в архив SQLite. sqlar_uncompress(Y,SZ) отменит сжатие, достигнутое
sqlar_compress(X). Параметр Y это сжатое содержание (вывод предшествующего
вызова sqlar_compress()) и SZ это оригинальный несжатый размер входа X,
который создал Y. Если SZ меньше или равен размеру Y, это
указывает, что никакое сжатие не произошло, и таким образом,
sqlar_uncompress(Y,SZ) вернет копию Y.
Иначе sqlar_uncompress(Y,SZ) выполнит алгоритм Inflate на Y, чтобы
вернуть его к оригинальной форме и возвращает несжатое содержание.
Этот установленный порядок используется, извлекая содержание
из архива SQLite. Достаточно просто вставить новые записи или извлечь существующие из архива
SQLite. Вставьте новое в архив SQLite, используя код: Извлеките вход из архива SQLite, используя код: Код выше для общего случая. Для особого случая SQLite Archive,
который хранит только несжатое или несжимаемое содержание (это могло бы
подойти, например, в архиве SQLite, который хранит только JPEG, GIF, и/или
PNG), содержание может быть вставлено и извлечено из базы данных, не
используя sqlar_compress() и sqlar_uncompress(), поэтому
расширение sqlar.c не требуется.
Choose any three.
1. Введение
CREATE TABLE sqlar(
name TEXT PRIMARY KEY, -- name of the file
mode INT, -- access permissions
mtime INT, -- last modification time
sz INT, -- original file size
data BLOB -- compressed content
);
1.1. База данных как контейнерный объект
1.2. Используя архивы SQLite
2. Преимущества архивов SQLite
На вопросы как эти можно ответить, не имея необходимости
извлекать любое содержание.
3. Недостатки SQLite Archives
SQLite Archive 10,754,048
ZIP Archive (Info-ZIP 3.0) 10,662,365
ZIP Archive
(zipfile) 10,390,215
Tarball 9,781,109
4. Управление архивом SQLite из командной строки
sqlite3 example.sqlar -At
sqlite3 example.sqlar -Atv
sqlite3 example.sqlar -Ax
sqlite3 alltxt.sqlar -Ac *.txt
sqlite3 example.sqlar -Au *.md
sqlite3 -A
4.1. Другие инструменты командной строки
5. Управление архивы SQLite из кода приложения
INSERT INTO sqlar(name,mode,mtime,sz,data)
VALUES ($name,$mode,strftime('%s',$mtime),
length($content),sqlar_compress($content));
SELECT name, mode, datetime(mtime,'unixepoch'), sqlar_uncompress(data,sz)
FROM sqlar WHERE ...;