SASGIS

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

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

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

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

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

Сообщение zed » 24 июн 2015, 13:03

vdemidov писал(а):который хранит весь набор меток для отображения на экране и, в случае необходимости, запрашивает

А он этот набор иногда очищает?
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

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

Сообщение vdemidov » 24 июн 2015, 13:15

zed писал(а):
vdemidov писал(а):который хранит весь набор меток для отображения на экране и, в случае необходимости, запрашивает

А он этот набор иногда очищает?

Очищает, если отключается отображение меток. Во всех остальных случаях он просто заменяется более актуальным. Но делает это всегда воркер, который у тебя упал после ошибки обращения к базе меток, так что этот набор при таких условиях очищаться не будет.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 157 раз.

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

Сообщение zed » 24 июн 2015, 13:19

Ну, то что оно упало, меня мало волнует. Меня волнует, что вся база меток залетает в память. И насколько я вижу, отключение видимости меток, на занимаемой памяти никак не сказывается.
Я надеялся, что отключив кэш в памяти для меток, снизится потребление памяти, а оно как-то совсем не заметно. Только на каждый чих из базы тягать метки приходится.
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

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

Сообщение vdemidov » 24 июн 2015, 13:25

zed писал(а):Ну, то что оно упало, меня мало волнует. Меня волнует, что вся база меток залетает в память. И насколько я вижу, отключение видимости меток, на занимаемой памяти никак не сказывается.
Я надеялся, что отключив кэш в памяти для меток, снизится потребление памяти, а оно как-то совсем не заметно. Только на каждый чих из базы тягать метки приходится.

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

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

Сообщение zed » 24 июн 2015, 13:36

Ок, ты меня успокоил.

Появился ещё вопрос, что надо сделать, чтобы прикрутить фильтр по размеру меток, чтобы не вытягивать из базы то, что отобразить в конечном итоге не получится. Об этом был тикет, и вроде там какое-то простое решение возможно? Я думаю, пришла пора его опробовать. Подскажи, чего и как?
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

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

Сообщение vdemidov » 24 июн 2015, 13:44

Ну вроде как сошлись на том, что нужно добавить в запрос прямоугольника меток параметр с минимальными шириной и высотой геометрий в LonLat и при отборе из базы отбрасывать те метки у которых MBR меньше этих значений. А вот как эти минимальные значения выбирать в TVectorItemSubsetChangeableForMarksLayer это уже нужно подумать. Например размер запрашиваемого прямоугольника делить на количество пикселей в спроецированной версии этого прямоугольника.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 157 раз.

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

Сообщение zed » 24 июн 2015, 13:50

Определить средний размер пикселя в LonLat координатах для текущего прямоугольника и передать этот размер?
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

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

Сообщение vdemidov » 24 июн 2015, 15:12

zed писал(а):Определить средний размер пикселя в LonLat координатах для текущего прямоугольника и передать этот размер?

Ну да. Возможно умножить его на какую-то константу. Или параметр завести в каком-то конфиге, если есть подходящий.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 157 раз.

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

Сообщение vasketsov » 24 июн 2015, 16:17

zed писал(а):Во-первых, все запросы в базу (даже на чтение) получают отлуп от SQLite с сообщением, что база заблокирована

Может быть ORM открывает базу как-то эксклюзивно?
Многоюзерное чтение должно быть в остальных случаях без проблем.
Даже если читать в рамках транзакции.

zed писал(а):Частично работает опция Информация о метке: в базу прилетает запрос, обламывается, но окошко с информацией появляется и в сводной информации всё заполнено: площадь, количество частей и проч. Не отображается только описание метки.

Вообще довольно странно, что ровно один запрос из пяти не закэширован.
Я бы предположил, что особенность в кэшировании BLOBов на уровне ORM.

zed писал(а):где оно кэшируется и как долго тот кэш живёт?

Может внутри ORM-а?
vasketsov
Специалист
 
Сообщения: 901
Зарегистрирован: 25 июл 2009, 21:15
Благодарил (а): 0 раз.
Поблагодарили: 198 раз.

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

Сообщение zed » 24 июн 2015, 16:44

vasketsov писал(а):Может быть ORM открывает базу как-то эксклюзивно?
Многоюзерное чтение должно быть в остальных случаях без проблем.

Ну, вторая копия читала всё на ура. Даже смогла метку записать в базу, но эта запись была фатальной для обеих копий программы.
vasketsov писал(а):Вообще довольно странно, что ровно один запрос из пяти не закэширован.

Не, ORM тут ни при чём. Я поставил брекпоинты на чтение данных из базы - на них просто не прилетали запросы, так что до ORM дело не доходило. А когда доходило (при открытии управления метками, к примеру), то падало с SQLITE_BUSY(5). Как верно заметил vdemidov, из-за самого первого эксепшена в базе, умер поток, который слушал базу и ходил за метками для отрисовки, вот оно и застыло.

Про кэширование в ORM вычитал: там есть Statement cache и небольшой Global JSON result cache (всего 16 Мб по дефолту), так что оно особой погоды не делает, а помогает бороться с однотипными запросами, которые идут один за одним.

А как там сделать многопользовательское чтение/запись в метки, нужно думать много и усердно. У тебя как это сделано?
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Пред.След.

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

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

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