Влияние параметров подключения на скорость сжатия MBTiles

Материал из GIS-Lab
Перейти к навигации Перейти к поиску

Небольшое исследование в плане оптимизации времени сжатия MBTiles

Исходные параметры

DB: sample.mbtiles
SIZE: 4477M
TILES: 1332136 (~1.3M)
CHUNK SIZE: 100000

Параметры по умолчанию

PRAGMA synchronous=0
PRAGMA locking_mode=EXCLUSIVE
PRAGMA journal_mode=DELETE

Время компрессии:

real    28m46.202s
user    6m34.901s
sys     16m5.388s

Отключение журналирования

Последняя стадия компрессии - удаление реальной таблицы с тайлами. Это приводит к значительному росту журнала транзакций. Его размер будет равен исходному файлу. Отключение журнала в случае сбоя приводит к потере всех изменений, производимых во время компрессии(но исходные данные остаются в целостности).

PRAGMA synchronous=0
PRAGMA locking_mode=EXCLUSIVE
PRAGMA journal_mode=OFF

Время компрессии:

real    15m4.885s
user    5m54.677s
sys     6m32.340s


Увелечение cache_size

По умолчанию cache_size равен 2000 страниц. Увеличение размера ведет к значительному возрастанию потребления памяти!

PRAGMA synchronous=0
PRAGMA locking_mode=EXCLUSIVE
PRAGMA journal_mode=DELETE
PRAGMA cache_size=100000

Время компрессии:

real    26m21.234s
user    6m36.169s
sys     15m12.289s


Отключение вывода статистики

Не параметры подключения, но все же. Каждая операция добавления данных выводит время операции. Отключение можно произвести только отредактировав код.

#utils.py
тут будет дифф когда нибудь
PRAGMA synchronous=0
PRAGMA locking_mode=EXCLUSIVE
PRAGMA journal_mode=DELETE

Время компрессии:

real    20m15.349s
user    3m3.098s
sys     13m32.283s

Применение всех перечисленных оптимизаций

#вывод статистики отключен
PRAGMA synchronous=0
PRAGMA locking_mode=EXCLUSIVE
PRAGMA journal_mode=OFF
PRAGMA cache_size=100000

Время компрессии:

real    9m33.636s
user    2m28.588s
sys     5m4.405s

Ссылки по теме

List of SQLite PRAGMAs
SQLite Optimization FAQ