SASGIS

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

Копирование части кэша

программа для загрузки и просмотра спутниковых снимков Земли, Луны, Марса предоставленных сервисами Google Maps и Космоснимки. Возможность работы с GPS приёмником.

Модератор: Tolik

Re: Копирование части кэша

Сообщение Cowa » 22 сен 2008, 21:21

svp
Мне кажется дискуссия слегка затянулась. Это напоминает вечный спор, что лучше - Windows или Linux, Delphi или С++... Ведь для решения задачи в одном случае будет оптимальный один метод или инструмент, а в другом - другой.
Теперь что именно не устраивает в текущем распределении кеша, и нужно перейти на базу данных.
svp писал(а):Не устраивает нагрузка на файловую систему. Файловая система не приспособлена к быстрой работе с ТАКИМ количеством файлов. И дело даже не в скорости доступа к тайлу (она здесь не столь критична), а в скорости определения есть ли такой тайл в наличии, или его надо закачивать. Но это тоже не самое главное. Просто таким кешем, какой он сейчас, очень сложно делиться. Именно из-за медленной работы файловой системы с большим количеством файлов.

1. Что такое "нагрузка на файловую систему", если мы говорим применительно к SAS.Планете. По-моему, нагрузка небольшая. МАксимальная нагрузка - при перемещении карты или изменении масштаба. При этом считывается порядка 20 тайлов (в зависимости от разрешения дисплея). Если папка Cache находится на локальном диске это достаточно быстро.
2. И "дело даже не в скорости доступа к тайлу ..., а в скорости определения есть ли такой тайл в наличии". То есть уже не важна скорость считывания тайла, а все дело тормозят математические вычисления наличия тайла на определенном уровне.Откуда уверенность, что проц долго считает эту функцию? Кто считал? А я сейчас взял и посчитал - в цикле от 1 до 3 000 000 выполняются три процедуры - 1.расчитывается имя тайла по координатам и уровню детализации, 2. по имени тайла и уровню детализации - координаты. 3. IF FileExists(FName) Then ... Все что нужно для определения наличия тайла на любом уровне. Весь цикл выполняется 2 секунды с округлением. Аргументы?
3. Оказывается что переход на базу Berkeley нужен для обмена кешем: "таким кешем, какой он сейчас, очень сложно делиться". И всего-то. Я подозреваю, что у того скем делиться программа использует именно Berkeley. Интересно, для того чтобы делиться кешем готов ли АВТОР "слегка" переделать свою программу? Я понимаю если львиная доля программ, работающих с картами, использует именно такую базу, тогда смысл есть. А так ... Может проще написать конвертер.
Во блин, написал то, а ведь не хотел же :) . Кстати, как аргумент, которых убедит многих - попробуй написать простенький вьювер карты, использующий именно базу Berkeley и посмотреть насколько это эффективно. Все познается в сравнении. Кстати, у меня вьювер запускается на локальном компе, а Cache находится на сетевом. Так вот скорость падает именно при скачивании тайлов с сервера по сети. И мне бы интересно было бы поднять скорость. И если Berkeley оправдает надежды, напишу конвертер. Вот. Но не думаю, что скорость возрастет, ведь с сервера будут скачиваться те же тайлы, только их местонахождение будет считываться из базы.

P.S. Мы по-моему зашли в обсуждениях куда-то не туда. :)
Cowa
Постигающий Дао
 
Сообщения: 173
Зарегистрирован: 23 авг 2008, 01:46
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Копирование части кэша

Сообщение svp » 23 сен 2008, 17:45

Cowa
Пожалуй действительно не туда. Тем более у Вас какие-то предрассудки по отношению к базам данных. И я не уверен, что Вы прочли ту статью про Berkeley DB. Ну да ладно. В таком ключе у нас действительно получается какой-то религиозный спор. Мешаем всё в одну кучу.
Индексация, хранение тайлов в базе, разделение кеша на участки -- это совершенно разные слабо связанные задачи, каждую из которых можно и нужно решать по отдельности.
Давайте мыслить системно!
    * Разве не правильно выделить загрузку тайлов с сервера в отдельный механизм, который мог бы работать автономно, как менеджер закачек?
    * Не корректнее ли было бы абстрагироваться от механизма получения тайлов из кеша и сделать более универсальную систему? Плагины придумали уже черте когда. Достаточно продумать API интерфейс для работы с кешем, и мы получим простой механизм адаптации к любому формату кеша. Достаточно добавить соответствующую DLL-ку к проге и прога уже будет уметь, например, забирать кеш с FTP. Более того, она даже не заметит разницы.
Я понимаю, что каждый может попробовать начать писать свой вьювер. Каждый решает сколько времени готов на это выделить. Я лишь хотел помочь правильно развивать то что есть. И не претендую на истину в последней инстанции.
Но раз уж зашла речь о задачах:
    * Считаю, что правильно было бы сделать апи также для склеивания карт. Чтобы склеивать можно было сторонними плагинами. А плагины люди напишут. Я напишу.

Насчет вашего эксперимента с измерением скорости. Позвольте уточнить, вы проверяли наличие одного и того же файла в цикле? Не пробовали генерить разные имена, существующие и не существующие? Ведь есть такая штука, как кеш (речь о системном кешировании при файловых операциях).
Да, и выборка тайлов для отображения (их нужно совсем немного, чтобы замостить экран) -- не самая трудоёмкая задача. Не понимаю, почему Вы за неё так ухватились. Гораздо существеннее скорость доступа ощущается при построении карты заполнения и при копировании фрагментов кеша. Попробуйте скопировать какой-нибудь город в 19 уровне средствами SAS-Планеты.

P.S.
"Нагрузка на файловую систему." Речь шла о статической нагрузке. С большим количеством маленьких файлов система работает ГОРАЗДО медленнее и гораздо менее эффективно, чем с несколькими очень большими. Посмотрите, сколько в вашем кеше составляют потери из-за кластерной структуры файловой системы. Если продукт претендует на популярность, то не стоит надеяться, что каждый пользователь догадается выделить под кеш отдельный NTFS-раздел, отформатированный с минимальным размером кластера.
Аватара пользователя
svp
Советчик
 
Сообщения: 447
ICQ: 204094886
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.

Re: Копирование части кэша

Сообщение Cowa » 23 сен 2008, 18:54

svp
Еще раз повторюсь - при написании вьювера у вас отпадут очень многие вопросы. Сразу будет понятно где слабые места.
Cowa
Постигающий Дао
 
Сообщения: 173
Зарегистрирован: 23 авг 2008, 01:46
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Копирование части кэша

Сообщение bk99 » 24 сен 2008, 10:14

Предлагаю не отвлекаться от темы топика "Копирование части кэша". Мне тоже кажется более разумнным хранить кэш в базах, а не так, как это реализовано сейчас в Планете. Но это дело автора Планеты, спорить о формате кэша надо с ним, а не с создателями сторонних утилит, заточенных под основную прогу. У нас есть то, что есть и работать надо с этим. Все дискуссии, не относящиеся к основной теме топика, считаю вредными и отвлекающими. На крайний случай можно создать отдельную ветку на форуме о преимуществах разных форматов кэша.
Без обид!
bk99
Новичок
 
Сообщения: 49
Зарегистрирован: 01 авг 2008, 14:18
Благодарил (а): 16 раз.
Поблагодарили: 0 раз.

Re: Копирование части кэша

Сообщение feya » 24 сен 2008, 11:28

По просьбе svp выкладываю функцию определения находится ли какой либо тайл в пределах полигона.
P - к-та центра тайла, TestPoligon - сам полигон.

function PtInRgn(TestPolygon:array of TPoint; const P:TPoint):boolean;
var ToTheLeftofPoint,ToTheRightofPoint:byte;
np:integer;
OpenPolygon:boolean;
XIntersection:real;
begin
ToTheLeftofPoint:=0;
ToTheRightofPoint:=0;
OpenPolygon:=False;
if not ((TestPolygon[0].X = TestPolygon[High(TestPolygon)].X) and
(TestPolygon[0].Y = TestPolygon[High(TestPolygon)].Y)) then OpenPolygon:=True;
for np:=1 to High(TestPolygon) do
if((TestPolygon[np-1].Y<=P.Y)and(TestPolygon[np].Y>P.Y))or
((TestPolygon[np-1].Y>P.Y)and(TestPolygon[np].Y<=P.Y))then
begin
XIntersection:=TestPolygon[np-1].X+((TestPolygon[np].X-TestPolygon[np-1].X)/
(TestPolygon[np].Y-TestPolygon[np-1].Y))*(P.Y-TestPolygon[np-1].Y);
if XIntersection < P.X then Inc(ToTheLeftofPoint);
if XIntersection > P.X then Inc(ToTheRightofPoint);
end;
if OpenPolygon then
begin
np:=High(TestPolygon);
if((TestPolygon[np].Y<=P.Y)and(TestPolygon[0].Y>P.Y))or
((TestPolygon[np].Y > P.Y)and(TestPolygon[0].Y<=P.Y))then
begin
XIntersection:=TestPolygon[np].X+((TestPolygon[0].X-TestPolygon[np].X)/
(TestPolygon[0].Y-TestPolygon[np].Y))*(P.Y-TestPolygon[np].Y);
if XIntersection<P.X then Inc(ToTheLeftofPoint);
if XIntersection>P.X then Inc(ToTheRightofPoint);
end;
end;
if(ToTheLeftofPoint mod 2=1)and(ToTheRightofPoint mod 2=1)then Result:=True
else Result:=False;
end;
http://sasgis.org | SAS.Планета | SASPlanet
Аватара пользователя
feya
Гуру
 
Сообщения: 2034
Зарегистрирован: 13 июл 2008, 10:45
Благодарил (а): 5 раз.
Поблагодарили: 56 раз.

Re: Копирование части кэша

Сообщение Cowa » 24 сен 2008, 13:23

Полностью согласен с bk99 о переносе размышлений о хранении кеша в отдельную ветку. Вопрос слишком объемный.
Очередные изменения и дополнения в CacheCopy.
1. Оптимизирован механизм сравнения списков файлов. Теперь работает раз в 8-10 быстрее (сам удивляюсь :) ).
2. Добавлена кнопка сохранения основного списка.
3. Небольшие изменения в интерфейсе (все равно он как-то не очень).
4. Добавлена возможность использовать ФИЛЬТР для основного списка (т.е. обрабатывается только список, а не файлы).
Можно фильтровать по названию карты и по уровню детализации в любых сочетаниях.

Забираем CacheCopy 1.2 - http://drop.io/cachecopy (265kb)

В общем теперь можно копировать кеш определенных типов карт и определенных уровней.
Есть мысль добавить фильтр по координатам. Интересно, это кому-то будет нужно. Мне вряд ли пригодится.
Cowa
Постигающий Дао
 
Сообщения: 173
Зарегистрирован: 23 авг 2008, 01:46
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Копирование части кэша

Сообщение bk99 » 26 сен 2008, 11:24

Спасибо за обновление!
Дифирамбы петь не буду - всё очень нравится. Перейду сразу к замечаниям, однако оговорюсь, что всё это моё субъективное ИМХО, можешь всё это проигнорировать - ты хозяин. Я пишу с точки зрения неискушённого пользователя. Для краткости буду писать повелительно - "сделать...", но читать следует так: "было бы здорово, если бы уважаемый автор счёл возможным сделать...". Итак:
1 - Сделать возможность раскрывать прогу на весь экран и сворачивать в трей (как у всех виндосовских программ в правом верхнем углу рядом с крестиком "Закрыть".
2 - В верхней панели, там где "Load" и "Save", добавить пункт "About". Туда включить краткое описание и ссылку на САСПланету.
3 - В названии утилиты (в самой верхней синей панели и внизу в progress-окне) слово SAS.Planet писать через точку (я, правда не знаю почему, но так уж её назвал автор, надо уважать).
4 - Сделать возможным увеличивать размер progress-окна (которое в самом низу) - сдвигать мышкой его верхнюю границу.
5 - На вкладке "Source" при загрузке "Source folder" сразу, автоматически, показывать список файлов (убрать кнопку "Finde files"). Либо сделать чек-бокс "Show files" с галочкой по-умолчанию. Так, наверное, будет даже лучше.
6 - То же самое (чек-бокс "Show files" с галочкой по-умолчанию) сделать на вкладке "Target" при выборе "Target folder". Если эти файлы там есть.
7 - Запоминать последний путь на вкладках "Source" и "Target".
8 - Сделать ini файл, чтобы запоминал настройки при закрытии утилиты. Ну или без ini, но чтоб запоминать.
9 - При переходе между вкладками "Source" и "Target" список файлов должен соответствовать выбранной папке (сейчас при переключении между этими вкладками список файлов не меняется).
10 - Вкладка "Target". При копировании файлов, если папка "Target" уже содержит файл, который копируется из "Source", то каждый раз выскакивает окно "Подтверждение замены файла". Надо сделать, чтобы совпадающие файлы просто игнорировались (не копировались).
11 - Вкладка "Target". Убрать галочку по-умолчанию в чек-боксе "Create "cash" folder".
12 - В пунктах меню "Открыть" и "Сохранить" убрать выскакивающие "Warning" окна (в следующими за ними диалоговых окнах уже есть пункты "Отмена").
13 - В пункте меню "Сохранить" по умолчанию предлагать сохранить файл в папке с утилитой. И, может быть, предлагать на выбор возможность сохранять в .txt формате. По-умолчанию пускай остаётся .list.
Дальше пока не разбирался.
И ещё для уважаемого azya. На мой взгляд, было бы полезно включить эту утилитку в шапку на ru-board'е.
bk99
Новичок
 
Сообщения: 49
Зарегистрирован: 01 авг 2008, 14:18
Благодарил (а): 16 раз.
Поблагодарили: 0 раз.

Re: Копирование части кэша

Сообщение Cowa » 27 сен 2008, 22:19

Ух, столько написано - думал что-то не работает, хотя тестировал в разных режимах. Приятно, что утилитка кому-то полезна. А интерфейс мне самому как-то не очень. С одной стороны - вроде все наглядно, с другой - сумбурно. Будем исправлять.
Итак, по пунктам:
1. На весь экран раскрывать, мне кажется смысла нет - вся информативная часть будет в левом верхнем углу. А сворачивать в трей - сделаю.
2. Пункт "About" обязательно добавлю, но позже. Это не самое главное.
3. Не доглядел - сорри. Обязательно исправлю. Мои извинения автору. (Не хорошо получилось :( )
4. И в этом есть смысл. Сделаю.
5. Да, пожалуй с галочкой "Show files" будет удобнее. Если, конечно, вы ошибочно не выберете папку в которой пара сотен тысяч файлов и будете ждать несколько минут, пока заполнится список. Кстати сказать, я не проверял возможные ограничения утилиты по кол-ву файлов, которые она сможет "проглотить".
6. Я так понял, что при открытии папки Target, во второй список файлов должны попасть файлы, находящиеся там? Ребят, ну это же не файловый менеджер. Вкладка Target создана только для того, чтобы было понятно КУДА копировать. Эта идея внесет только больше непоняток в интерфейс.
7. При запуске утилиты, или при открытии окна - обзор папок?
8. Да, смысл есть. Слишком много уже настроек. Сделаю в ближайшем времени, хотя не люблю ini-шки.
9. см. п. 6.
10. Предполагается, что папка Target не содержит файлов, находящихся в списке файлов из Source. Зачем тогда все эти условия по отбору файлов из Source. В конце концов, это виндовская функция копирования и можно нажать на кнопочку - "Да - для всех". Специально оставил эту возможность, чтобы было понятно, что в папке Target содержатся одинаковые файлы.
11. Потом сами уберете, когда будут запоминаться настройки в ini
12. Ок.
13. Не хочу делать в txt, т.к при не правильном редактировании этого файла ручками будут ошибки. "Защиты от дурака" при чтении там нет. Иными словами - формат при записи файла должен соответствовать формату при чтении.
Cowa
Постигающий Дао
 
Сообщения: 173
Зарегистрирован: 23 авг 2008, 01:46
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Копирование части кэша

Сообщение Cowa » 28 сен 2008, 16:27

Обновление CacheCopy
По просьбам трудящихся :) небольшие косметические изменения в версии. Добавлено сохранение некоторых параметров в ini-файле.
Забираем CacheCopy v1.21 - http://drop.io/cachecopy (268kb)

P.S. Жаль, что нельзя сюда загрузить утилитку - ограничение в 256kb.
Cowa
Постигающий Дао
 
Сообщения: 173
Зарегистрирован: 23 авг 2008, 01:46
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Копирование части кэша

Сообщение bk99 » 29 сен 2008, 15:38

Придирки к CacheCopy v1.21
1. Вкладка "Source", ставлю галку "Auto show files", выбираю "Source folder" - автоматически появляется список файлов. Это хорошо. Закрываю CacheCopy. Опять открываю CacheCopy - путь в "Source folder" уже стоит какой надо и галка "Auto show files" тоже стоит, но список файлов не появляется пока не i) уберёшь галку "Auto show files" ii) и не нажмёшь на кнопку "Finde files". Хорошо бы, если поле "Source folder" не пустое при открытии проги, то ничего больше нажимать не надо было! У меня список из 15 тыс. файлов появляется через секунду, т.е. никаких тормозов вроде бы нету!
2. При переключении с вкладки "Source" на вкладку "Target" список файлов так и висит со вкладки "Source" - это запутывает. Если на вкладке "Target" генерирования списка не планируется, то лучше бы вообще убрать это поле со списком, а просто оставить информацию сколько файлов из "Source" найдено их размер и т.п. (то, что уже есть сейчас).
3. На вкладках "Source" и "Target" при нажатии на кнопки "Обзор папок" обзор начинается с "Мой компьютер", а хорошо бы с той папки, которая уже указана в поле (или с последней открытой папки).

Не совсем понимаю как работает вкладка "Compare" - я этой функцией не пользуюсь (пока что нужды не было). Но вот попробовал посмотреть что это за зверь и не справился с управлением! Подскажи!
bk99
Новичок
 
Сообщения: 49
Зарегистрирован: 01 авг 2008, 14:18
Благодарил (а): 16 раз.
Поблагодарили: 0 раз.

Пред.След.

Вернуться в SAS.Планета

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 19