SASGIS

Веб-картография и навигация

SAS.Wiki

Веб-картография и навигация

Инструменты пользователя

Инструменты сайта


чистка_кэша_беркли

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

чистка_кэша_беркли [21/06/2014 19:58]
178.168.196.176 [Чистка кэша Беркли]
чистка_кэша_беркли [16/05/2023 23:01] (текущий)
radioxoma wiki syntax
Строка 3: Строка 3:
 ====== Чистка/​оптимизация кэша Беркли ====== ====== Чистка/​оптимизация кэша Беркли ======
  
-Сохранение тайлов в кэш Беркли, ​приводит к увеличению ​размеров файлов базы данных *.sdb или *.sdbv (далее - файлов БД). Удаление же тайлов из кэша Беркли (если вы вдруг таким занимались ​через операции с выделенной областью), не приводит к уменьшению размера файлов БД. Это связано с тем, ​что физически ​данные в БД не стираются,​ а лишь помечаются как ​удалённые, на место которых могут быть записаны новые данные. При этом, до определённого момента, увеличения ​размеров файлов БД не происходит. Такое поведение типично для сколь-нибудь сложных БД, и Беркли тому не исключение. Естественно, существуют и способы по уменьшению размеров файлов БД (чистка от удалённых данных),​ об одном ​из таких способов, ​применительно к кэшу Беркли,​ и будет ​рассказано ниже.+> Описываемая процедура ​предназначена для очистки кэша от уже ​удалённых тайлова не самого их удаления, которое должно выполняться из программы SAS.Planet.
  
-Внимание:  +Сохранение тайлов в кэш Беркли,​ приводит к увеличению размеров файлов базы данных ​*.sdb или *.sdbv (далее - файлов БД). Удаление же тайлов из кэша Беркли (если вы вдруг таким занимались через ​операции с выделенной областью), не приводит к уменьшению размера файлов БД. Это связано с тем, что физически данные ​в БД не стираются, а лишь помечаются как удалённые, ​на место которых могут ​быть записаны новые данные. При этом, до определённого ​момента, увеличения размеров ​файлов БД не происходит. Такое поведение типично для сколь-нибудь сложных БД, и Беркли тому не исключение. Естественно, существуют и способы по уменьшению размеров ​файлов БД (чистка от удалённых данных),​ о которых и будет рассказано ниже.
-  ​при всех операциях над кэшем ​Беркли "извне"SAS.Планета должна быть закрыта +
-  * перед ​всеми процедурами делайте бекапы файлов БД, которые вы планируете оптимизировать+
  
-====Описываемая процедура предназначена для очистки кэша от уже удалённых файлов, а не самого их удаления, которое должно ​выполняться ​из программы SASПланета.====+Внимание: 
 +  * при всех ​операциях ​над кэшем Беркли "извне" SAS.Планета должна быть закрыта 
 +  * перед всеми процедурами делайте бэкапы файлов ​БД, которые вы планируете оптимизировать
  
-Используя набор утилит для ​кэша Беркли,​ можно очистить ​кэш ​от удалённых файлов. Очень удобно пользоваться утилитой **sdb_util.exe**,​ объединяющей в себе возможности ​почти всех отдельных утилит. В списке действий,​ которые данная утилита ​выполняет,​ есть **Restore broken files from *.bad**. То есть восстановление ​повреждённых файлов из файлов *.bad.+===== Чистка кэша с использованием sdb_util =====
  
-Действие **Restore broken files from *.bad** ​утилиты **sdb_util.exe** состоит из трёх этапов:\\ +Используя набор ​утилит ​для кэша Беркли,​ можно очистить кэш от удалённых тайлов. Очень удобно пользоваться утилитой **sdb_util.exe**, объединяющей ​в себе возможности почти всех отдельных утилит. В списке действийкоторые данная утилита выполняет, есть **Restore broken files from *.bad** - восстановление повреждённых файлов из файлов *.bad.
-1) Создание дампа файла БД. Составляется ​список полноценных файлов, те. техкоторые одновременно и числятся в БД, и могут быть ​прочитаны. Файлы, не удовлетворяющие хотя бы одному из указанных условий, игнорируются. К этой категории ​относятся как повреждённые, так и удалённые файлы.\\ +
-2) Создание из полученного дампа нового файла БД, содержащего только ​полноценные данные.\\ +
-3) Верификация нового ​файла БД, если ​всё хорошо,​ файл дампа ​и файл *.bad удаляются,​ остаётся нормальный файл БД.+
  
-Откуда берутся файлы *.bad? При верификации ​утилитой **db_verify.exe** (или действием **Verify cache (find broken files)** утилиты **sdb_util.exe**) отыскиваются повреждённые ​файлы, то есть ​файлы, которые числятся в БД, но не могут быть прочитаны. Тогда файл БД получает "​второе"​ расширение *.bad. На удалённые ​файлы утилита **db_verify.exe** не реагирует, ​так как они уже не числятся в БД. Поэтому,​ если ​астоящих" ​повреждённых файлов в БД нетто верификация пройдёт успешно,​ и к имени файла БД не будет добавлено расширение .bad.\\ +Действие **Restore broken files from *.bad** утилиты **sdb_util.exe** состоит из трёх этапов:​ 
-**Но никто не мешает нам добавить это расширение вручную**.+  - Создание дампа отдельно взятого файла БД. При этом происходит копирование во временный файл (*.dump) неповреждённых тайлов и тайлов,​ не помеченных в БД как удалённые. 
 +  - Создание из полученного дампа нового файла БД, содержащего только полноценные данные. 
 +  - Верификация нового файла БД, если всё хорошо,​ файл дампа и файл *.bad удаляются,​ остаётся нормальный файл БД. 
 + 
 +Откуда берутся файлы *.bad? При ​проверке файлов БД утилитой **db_verify.exe** (или действием **Verify cache (find broken files)** утилиты **sdb_util.exe**) отыскиваются повреждённые ​тайлы, то есть ​тайлы, которые числятся в БД, но не могут быть прочитаны ​вследствие ошибок в структуре БД или из-за физического повреждения файлов БД. Тогда файл БД получает "​второе"​ расширение *.bad. На удалённые ​из кэша тайлы утилита **db_verify.exe** не реагирует, ​поэтому,​ если ​с файлом БД нет никаких проблем и повреждений, верификация пройдёт успешно,​ и к имени файла БД не будет добавлено расширение .bad. **Но никто не мешает нам добавить это расширение вручную**.
  
 Утилита **sdb_util.exe** обрабатывает все файлы *.bad, находящиеся внутри указанной папки (и во всех вложенных папках тоже). Утилита **sdb_util.exe** обрабатывает все файлы *.bad, находящиеся внутри указанной папки (и во всех вложенных папках тоже).
Строка 25: Строка 26:
 Для переименования файлов БД удобно пользоваться Total Commander'​ом. Для переименования файлов БД удобно пользоваться Total Commander'​ом.
  
-Чем больше размеры файлов БД и их количество,​ тем больше времени занимает процедура очистки. Файлы *.bad не могут быть использованы SASПланетой ни для отображения,​ ни для скачивания,​ поэтому,​ пока идёт процедура очистки,​ SASПланетой пользоваться не получится. Отсюда рекомендация:​ не замахиваться на глобальную очистку,​ переименовывая сразу все файлы БД в кэше.+Чем больше размеры файлов БД и их количество,​ тем больше времени занимает процедура очистки. Файлы *.bad не могут быть использованы SAS.Планетой ни для отображения,​ ни для скачивания,​ поэтому,​ пока идёт процедура очистки,​ SAS.Планетой пользоваться не получится. Отсюда рекомендация:​ не замахиваться на глобальную очистку,​ переименовывая сразу все файлы БД в кэше.
  
-Если нужно почистить не весь кэш, а лишь определённую местность,​ то из всех имеющихся файлов БД следует выбрать только те, которые содержат тайлы этой местности. Для этого в SASПланете устанавливаем масштаб,​ равный масштабу,​ который нужно почистить,​ минус 8. Должно быть включено отображение границ тайлов. Смотрим на обозначения тайлов,​ попадающих на нужную местность. Цифры, указанные в виде x=XXX, y=YYY, будут входить в названия нужных нам файлов БД. Например,​ если мы хотим почистить карту Черногории на z15, находим Черногорию и устанавливаем масштаб 15-8=7. Карта попадает в тайл с x=35 и y=23. Значит,​ файл БД, содержащий эту карту, должен называться 35.23.sdb (ну, или 35.23.sdbv, если кэш версионный). Поиском находим этот файл и обрабатываем его.+Если нужно почистить не весь кэш, а лишь определённую местность,​ то из всех имеющихся файлов БД следует выбрать только те, которые содержат тайлы этой местности. Для этого в SAS.Планете устанавливаем масштаб,​ равный масштабу,​ который нужно почистить,​ минус 8. Должно быть включено отображение границ тайлов. Смотрим на обозначения тайлов,​ попадающих на нужную местность. Цифры, указанные в виде x=XXX, y=YYY, будут входить в названия нужных нам файлов БД. Например,​ если мы хотим почистить карту Черногории на z15, находим Черногорию и устанавливаем масштаб 15-8=7. Карта попадает в тайл с x=35 и y=23. Значит,​ файл БД, содержащий эту карту, должен называться 35.23.sdb (ну, или 35.23.sdbv, если кэш версионный). Поиском находим этот файл и обрабатываем его.
  
 {{:​sdb.jpg|}} {{:​sdb.jpg|}}
  
 +===== Чистка кэша сторонними средствами =====
 +
 +Следует отметить,​ что существует ещё один //​теоретический//​ способ оптимизации кэша Беркли (на практике пока что для этого способа нет готовых утилит). В API BerkeleyDB предусмотрен специальный метод [[http://​docs.oracle.com/​cd/​E17076_02/​html/​api_reference/​C/​dbcompact.html|DB->​compact()]] - это метод "​щадящей"​ оптимизации (без пересоздания файла БД), поддерживает множество опций, но консольной утилиты для этой операции они почему-то не сделали. Возможно из-за того, что при обычных операциях записи в БД, там такая оптимизация проводится по-умолчанию,​ но не для всей БД, а только для тех страниц,​ которые используются для поиска/​записи текущего ключа (key). Т. е. структура БД самооптимизирующаяся. ​
 +
 +
 +====== Восстановление повреждённого кэша BerkeleyDB ======
 +
 +Для восстановления повреждённого кэша BerkeleyDB:
 +  - Скачать файл http://​sasgis.org/​forum/​download/​file.php?​id=3150
 +  - Распаковать в директорию САС.Планеты
 +  - Исправить пути к утилитам из архива
 +  - Если кэш какой-то карты заглючил,​ надо скопировать оба bat-файла в директорию с этим кэшем. Запустить ''​verify.bat''​. Если какие-то файлы sdb и tne покорраптились,​ они будут переименованы в *.BAD (соответствующий кусок кэша будет потерян!). Если проблема не в файлах sdb и tne, а в логах (они находятся в директории env), надо удалить директорию env и запустить ''​load.bat''​.
 +Когда он отработает,​ можно запускать SAS.Planet, она откроет кэш и создаст новый env. В этом случае ничего не потеряется.