Вопросы по исходному коду.

Форум для обсуждения деталей разработки программы SAS.Планета

Модераторы: Tolik, zed, vdemidov

Re: Вопросы по исходному коду.

Сообщение kellwin » 17 июл 2012, 12:56

А по-подробнее можно? Каким образом там уменьшится количество тайлов?

По-подробнее: при моих размерах кеша (десятки миллионов файлов) уменьшение их количества прибл. в 100 раз
сняло бы большинство проблем с копированием, бэкапом и т.д.
Этого можно добиться упаковкой всех файлов каждого терминального подкаталога в 1 - если каталог полностью заполнен, их там 1000, так что среднего уменьшения в 100 раз добиться вполне возможно.
Упаковку я бы хотел делать в специальный формат, в котором можно было бы легко определить, есть тайл или нет.
В общих чертах, это заголовок, массив из 1024 смещений на данные тайлов и сами данные (атрибуты+файл).
При этом я бы хотел разделить закачку тайлов и создание кеша, поскольку дергается он часто, и если вылетит ошибка файловой системы, то перезакачивать придется дост. много.
Поэтому предполагаемая схема работы такая:
Во время закачки:
на чтение тайла - сначала смотрим, есть ли файл в каталоге, затем есть ли кеш в каталоге и есть ли в нем тайл;
на запись - так же, как сейчас, ничего не меняется;
на удаление тайла - тут придется дергать кеш - чистим смещение в массиве и выставляем dirty-флаг в заголовке кеша.

Соответственно отдельно создание кеша - проходим все подкаталоги, и если находим новые файлы картинок или грязный кеш, то пересохраняем. Вот такую программку я отдельно могу написать за час-полтора, только надо определиться с атрибутами файлов, которые надо в кеше хранить.

А так кеш получается совместимым с текущим (нет файла кеша, и не надо), и все, что мне надо от САС, - определиться,
куда вставить чтение тайла из кеша. Ну и для оптимизации еще неплохо кешировать последний открытый кеш, и закрывать его при выходе из программы.

Коммит с Беркли попробую поизучать, спасибо
kellwin
Новичок
 
Сообщения: 5
Зарегистрирован: 28 янв 2010, 10:40
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Вопросы по исходному коду.

Сообщение vdemidov » 17 июл 2012, 13:11

Я бы посоветовал не привязываться к сасовской структуре кэша, а делать что-то в духе qrts именования тайлов с упаковкой тайлов в контейнеры по 256 штук. Это позволит гораздо эффективнее кэшировать запросы к такому кэшу :)
И еще не забывайте о необходимости тредсейфовости тайлохранилища.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1166
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 92 раз.
Поблагодарили: 52 раз.

Re: Вопросы по исходному коду.

Сообщение zed » 17 июл 2012, 13:17

Понятно. Тоже были похожие мысли, но потом пришёл к выводу, что это получится не надёжно (если САС упадёт в критический момент, то полетит весь файл-контейнер) и неприменимо для 2-х и более одновременно-работающих САСах с одним кэшем. Поэтому решил сделать на Беркли - в нём единственное ограничение: кэш нельзя расшаривать по сети и юзать одновременно несколькими клиентами.

Предложений по новым типам кэшей поступало уже достаточно много - поищите в Багтрекере, может какой-то вариант вас заинтересует. На вскидку:
- 0001376: Новый тип кэша в формате MBtiles (на основе SQLite3)
- 0001291: Поддержка кэша SAS4WinCE (только для чтения)
- 0001290: Поддержка вторичного read-only кэша (например, в формате SAS4WinCE)
- 0001113: Хранилище на основе СУБД
- 0001053: Работа САС.Планеты со сторонними кэшами (МЯК и другими) напрямую
- 0000653: Отображать тайлы из архива
Хитрости GoogleEarth - то, чего вы не знаете о гугле
Аватара пользователя
zed
Гуру
 
Сообщения: 1519
ICQ: 357167611
Зарегистрирован: 16 авг 2008, 20:21
Откуда: Беларусь, Могилёв
Благодарил (а): 37 раз.
Поблагодарили: 177 раз.

Re: Вопросы по исходному коду.

Сообщение kellwin » 17 июл 2012, 13:17

vdemidov писал(а):Я бы посоветовал не привязываться к сасовской структуре кэша, а делать что-то в духе qrts именования тайлов с упаковкой тайлов в контейнеры по 256 штук. Это позволит гораздо эффективнее кэшировать запросы к такому кэшу :)
И еще не забывайте о необходимости тредсейфовости тайлохранилища.

Я бы хотел как раз привязаться к сасовской структуре, поскольку в идеале она позволит упаковать 1024 файла в 1 контейнер, что лучше, чем 256 :) К тому же мне было бы проще доделать существующий юнит, чем писать заново.
Тредсейфовость вроде как обеспечивается файловой системой - через блокировку файлов.
kellwin
Новичок
 
Сообщения: 5
Зарегистрирован: 28 янв 2010, 10:40
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Вопросы по исходному коду.

Сообщение kellwin » 17 июл 2012, 13:22

zed писал(а):Понятно. Тоже были похожие мысли, но потом пришёл к выводу, что это получится не надёжно (если САС упадёт в критический момент, то полетит весь файл-контейнер) и неприменимо для 2-х и более одновременно-работающих САСах с одним кэшем.


Поэтому я и хочу разделить закачку тайлов и создание/обновление кеша на разные процедуры. А уже при создании/обновлении гарантировать надежность контейнера достаточно просто.
Проблем для 2-х САСов с одним кешем я тоже не вижу, поскольку в момент закачки/просмотра кеш открывается только на чтение, и ненадолго (заголовок+массив смещений кешируется в память). А операцию упаковки можно прогнать и отдельно, когда несколько одновременно работающих САСов не нужны.
kellwin
Новичок
 
Сообщения: 5
Зарегистрирован: 28 янв 2010, 10:40
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Вопросы по исходному коду.

Сообщение zed » 17 июл 2012, 13:23

kellwin писал(а):поскольку в идеале она позволит упаковать 1024 файла в 1 контейнер, что лучше, чем 256

Это не в идеале, а только на 20-м зуме по-моему (или даже только на 24-м). Чем меньше зум, тем меньше наполненность каталогов и тем больше ненужных подкаталогов с парой папок/файлов.
Хитрости GoogleEarth - то, чего вы не знаете о гугле

За это сообщение автора zed поблагодарил:
vdemidov (17 июл 2012, 13:25)
Аватара пользователя
zed
Гуру
 
Сообщения: 1519
ICQ: 357167611
Зарегистрирован: 16 авг 2008, 20:21
Откуда: Беларусь, Могилёв
Благодарил (а): 37 раз.
Поблагодарили: 177 раз.

Re: Вопросы по исходному коду.

Сообщение vdemidov » 17 июл 2012, 13:25

Тоес
kellwin писал(а):Я бы хотел как раз привязаться к сасовской структуре, поскольку в идеале она позволит упаковать 1024 файла в 1 контейнер, что лучше, чем 256 К тому же мне было бы проще доделать существующий юнит, чем писать заново.

Учитывая общее количество кода, которое нужно будет написать это экономия на спичках. Общего кода там будет ровно 1 строчка :)
1024 в одном контейнере это в 4 раза больше потерянных данных в случае любых глюков по сравнению с 256, но это не принципиально. Принципиально хранение тайлов большими квадратами, а не столбцами. Просто для заполнения экрана 1920х1280 нужно в твоем случае обращаться к 9 контейнерам, а в случае с qrts именованием максимум к 4 контейнерам.

kellwin писал(а):Тредсейфовость вроде как обеспечивается файловой системой - через блокировку файлов.

Мечты-мечты. Ну или тормоза-тормоза
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1166
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 92 раз.
Поблагодарили: 52 раз.

Re: Вопросы по исходному коду.

Сообщение vdemidov » 17 июл 2012, 13:26

zed писал(а):
kellwin писал(а):поскольку в идеале она позволит упаковать 1024 файла в 1 контейнер, что лучше, чем 256

Это не в идеале, а только на 20-м зуме по-моему (или даже только на 24-м). Чем меньше зум, тем меньше наполненность каталогов и тем больше ненужных подкаталогов с парой папок/файлов.

Точно. Я это еще не учел. Так что смысла привязываться к дефолтному сасовскому именованию тайлов нет вообще никакого.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1166
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 92 раз.
Поблагодарили: 52 раз.

Re: Вопросы по исходному коду.

Сообщение zed » 17 июл 2012, 13:26

kellwin писал(а):А операцию упаковки можно прогнать и отдельно, когда несколько одновременно работающих САСов не нужны.

Если запись производить отдельно и вручную - тогда да, никаких проблем ни с тредсейфовостью, ни с несколькими одновременными САСами.
Хитрости GoogleEarth - то, чего вы не знаете о гугле

За это сообщение автора zed поблагодарил:
vdemidov (17 июл 2012, 13:29)
Аватара пользователя
zed
Гуру
 
Сообщения: 1519
ICQ: 357167611
Зарегистрирован: 16 авг 2008, 20:21
Откуда: Беларусь, Могилёв
Благодарил (а): 37 раз.
Поблагодарили: 177 раз.

Re: Вопросы по исходному коду.

Сообщение vdemidov » 17 июл 2012, 13:28

kellwin писал(а):
zed писал(а):Понятно. Тоже были похожие мысли, но потом пришёл к выводу, что это получится не надёжно (если САС упадёт в критический момент, то полетит весь файл-контейнер) и неприменимо для 2-х и более одновременно-работающих САСах с одним кэшем.


Поэтому я и хочу разделить закачку тайлов и создание/обновление кеша на разные процедуры. А уже при создании/обновлении гарантировать надежность контейнера достаточно просто.
Проблем для 2-х САСов с одним кешем я тоже не вижу, поскольку в момент закачки/просмотра кеш открывается только на чтение, и ненадолго (заголовок+массив смещений кешируется в память). А операцию упаковки можно прогнать и отдельно, когда несколько одновременно работающих САСов не нужны.

Ну тоесть у вас очередная вариация на тему ридонли кэша в довесок к рабочему все с той же кучей вопросов по реализации что и здесь:
- 0001290: Поддержка вторичного read-only кэша (например, в формате SAS4WinCE)
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1166
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 92 раз.
Поблагодарили: 52 раз.

Пред.След.

Вернуться в Раздел для разработчиков программы SAS.Планета

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron