Мне кажется дискуссия слегка затянулась. Это напоминает вечный спор, что лучше - 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. Мы по-моему зашли в обсуждениях куда-то не туда.