SASGIS

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

SAS.Wiki

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

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

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


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

Различия

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

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

чистка_кэша_беркли [25/05/2014 18:53]
91.203.67.190
чистка_кэша_беркли [16/05/2023 23:01] (текущий)
radioxoma wiki syntax
Строка 1: Строка 1:
 [[главная|Главная страница]] [[главная|Главная страница]]
  
-====== Чистка кэша Беркли ======+====== Чистка/​оптимизация ​кэша Беркли ======
  
-Добавляя файлы в кэш Беркли путём скачивания или формирования, мы увеличиваем размеры файлов базы данных. Удаляя файлы ​из базы данных путём "​стирания"​ лишних тайлов, ​уменьшения размеров файлов БД не добиться, так как ​ранее занятое файлами место так и остаётся занятым. Со временем накапливается ​весьма ​приличное количество таких удалённых тайлов,​ которые зря занимают ​место на диске.+> Описываемая ​процедура предназначена для ​очистки кэша от уже удалённых тайлов, ​а не самого их удаления, ​которое должно выполняться из программы SAS.Planet.
  
-Используя ​набор утилит для кэша Беркли, ​можно очистить ​кэш от удалённых файлов. ​Самый ​надёжный метод - использовать ​утилиту ​**sdb_util.exe**. В списке действий, которые данная утилита выполняетесть **Restore broken files from *.bad**. То есть восстановление ​повреждённых ​файлов из файла *.bad.+Сохранение тайлов в кэш Беркли, ​приводит к увеличению размеров файлов базы данных ​*.sdb или *.sdbv (далее - файлов ​БД)Удаление же тайлов из кэша Беркли (если вы вдруг таким занимались через операции с выделенной областью), не приводит к уменьшению размера файлов БДЭто ​связано с тем, что физически данные в БД не стираютсяа лишь помечаются как удалённые,​ на место ​которых могут быть записаны новые данные. При этом, до определённого моментаувеличения размеров файлов БД не происходит. Такое поведение типично для сколь-нибудь сложных БД, и Беркли ​тому не исключениеЕстественносуществуют и способы по уменьшению размеров файлов БД (чистка от удалённых ​данных), ​о которых ​и будет рассказано ниже.
  
-Файлы ​*.bad появляются путём добавления "​второго"​ расширения bad к названиям файлов базы данных (*.sdb или *.sdbv) ​в результате ​верификации (проверки) кэша утилитой db_verify.exe или действия **Verify cache (find broken files)** ​утилиты sdb_util.exe.+Внимание: 
 +  ​* при всех операциях над кэшем Беркли "извне" SAS.Планета должна быть закрыта 
 +  ​перед ​всеми процедурами делайте бэкапы файлов БД, которые вы планируете оптимизировать
  
-Файлы БД, содержащие удалённые тайлы, не считаются повреждёнными,​ поэтому их проверка утилитами не приведёт к добавлению расширения bad. **Но никто не мешает нам добавить это расширение вручную**.+===== Чистка кэша с использованием ​sdb_util =====
  
-Выбрав из списка действий ​утилиты sdb_util.exe **Restore broken files from *.bad** и указав папку, содержащую файлы *.bad, можно ​восстановить ​из повреждённого файла БД его неповреждённую часть, получив нормальный файл БДДля этого сначала делается дамп, то есть составляется список неповреждённых файлов,​ содержащихся в файле БД. Затем из этого ​списка создаётся новый файл БДсодержащий ​только неповреждённые данные. Третьим этапом файл БД проверяется на наличие повреждённых ​данных. Если всё нормально, ​файл ​дампа и файл *.bad удаляются, ​остаётся нормальный файл БД. Если в указанной папке имеется несколько ​файлов *.bad, они все будут обработаны.+Используя набор ​утилит ​для ​кэша Беркли, можно очистить ​кэш ​от удалённых тайлов. Очень удобно пользоваться утилитой **sdb_util.exe**, ​объединяющей в себе возможности почти ​всех отдельных утилит. В списке действий, которые данная утилита выполняет, есть **Restore broken files from *.bad** - восстановление повреждённых файлов из файлов *.bad.
  
-Итак, план действий: открываем файловым менеджером папку с файлами БД (у них расширения sdb или ​sdbv), путём переименования ​добавляем к названиям этих ​файлов расширение bad (должно стать *.sdb.bad ​или *.sdbv.bad), открываем утилиту sdb_util.exe, ​выбираем из списка действие **Restore broken files from *.bad**, указываем папку, содержащую ​переименованные ​файлы и жмём Run. Наблюдаем за ходом процесса в центральном окне утилитыЗамечучто при ​значительных ​размерах файла БД его обработка может занять **некоторое** времяПо окончании ​процесса в центральном окне будет указано количество ​обработанных файлов. ​Тогда переходим к следующей папке с файлами БД и повторяем всё сначала.+Действие **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находящиеся внутри ​указанной ​папки (и во всех вложенных папках тоже). 
 + 
 +Для ​переименования файлов БД удобно пользоваться Total Commander'​ом. 
 + 
 +Чем больше размеры файлов БД и их количество, тем больше времени занимает ​процедура очистки. Файлы *.bad не могут быть использованы SAS.Планетой ​ни для отображения, ни для скачивания, поэтому, пока идёт процедура очистки, SAS.Планетой пользоваться не получитсяОтсюда рекомендация:​ не замахиваться на глобальную очистку, переименовывая сразу все файлы БД в кэше. 
 + 
 +Если нужно почистить не весь кэш, а лишь определённую местность,​ то из всех имеющихся файлов БД следует выбрать только те, которые содержат ​тайлы этой местности. Для этого в 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. В этом случае ничего не потеряется.