Клуб API Карт

45+ тысяч запросов

mikenerevarin
19 ноября 2010, 20:20
Ситуация: в одной соц.сети у меня игра, где игроки на яндекс-карте могут торговать и всячески работать с домами, улицами и т.п. Список объектов во владениях игроков хранится на сервере, с привязкой по улицам, городам, областям и т.п. В последнее время игроки начали жаловаться, что некоторые объекты некорректно взаимодействуют, что означает обновления в привязках и названиях. Для обновления всей БД потребуется более 45 тысяч запросов к геокодеру, хотя ограничение в сутки - 25. Будет ли проект сразу отключен за превышение, или всё-таки лучше разбить процесс на несколько дней? И есть ли списки изменений в картах, чтобы я мог обновлять не всё, а только часть?
10 комментариев
Подписаться на комментарии к посту
Давайте разобьем ваш вопрос на две части и будем решать по очереди.

1. 45к+ запросов к геокодеру в сутки, это, конечно, не хорошо. Если это разовая задача по геокодированию объектов, то нужно разбить на несколько дней. Скажем, пополам - за один день первую половину - 22,5к адресов, за второй все что осталось. Если планируется ежедневно 45к+ запросов к геокодеру, но они не уникальны, то результаты геокодирования нужно кешировать, уверен, что уникальных запросов будет меньше.

2. Про изменения в картах. Сообщить вам об изменениях в картах на уровне геокодера мы вам не сможем, нужно искать какой-то выход, который не ухудшит игровую механику. Например, использовать координаты объекта в качестве уникального ID, а дальше уже с ним работать. В случае изменений на картах изображение объекта исчезнет, но в вашей базе он останется. Это, пожалуй, позволит как-то выйти из положения. Например, это может быть случайный элемент игры.

P.S. поделитесь ссылкой на ваш проект, очень интересно взгялнуть!

1. Это разовая задача. Уникальных запросов, увы, примерно столько и будет, поскольку для каждого дома мне нужно проверить, принадлежит ли он к тем объектам, которым принадлежит.


2. На уровне геокодера и не надо, я имел в виду имеется ли где-то в документации логи или списки изменений. Скажем, пользователи заметили, что Екатеринбург стал принадлежать к Свердловской области, или на некоторых перекрёстках дома поменяли улицы. Будь это отражено, я бы обновил только те объекты, которые обновились, а не прогонял все. В качестве уникального ID хранится crc32 от полного адреса, геоточка тоже присутствует, но так же есть поля области, района, города и улицы. В случае если геокодер не возвращает какой-то из объектов, туда пишется 0, поэтому, например, налоги Свердловской области с объектов не шли до того, как я вручную прописал объектам область. Именно для этого необходимо обновление.


 


P.S. http://vkontakte.ru/app1945716

добрый человек, используйте активные области или растеризации в канвасе.
У меня не самый быстрый комп - средний i7 и мой ФФ просто завис над центром москвы когда начали подгружаться мини обьекты
Может FireBug отключить? Firefox с включенным FireBug'ом жрёт у меня 147мб, с выключенным - 101, всяко меньше, и работает пошустрее. Впрочем, поищите "Владения" и гляньте на Москву, главное чтобы комп вообще не сгорел. У этого товарища ещё и грузится и хранится содержимое каждого балуна.

Буду благодарен за чуть более подробный способ возможной оптимизации, или соответствующие ссылки.
под вашу задачу есть три оптимизации.
1. малек изменить рендер маркера. Сейчас у вас маркер это картинка в диве.
Вопрос на 5 - нахрена нужен див.
Уберите и получите в два раза меньше DOM мусора.

2. Тут уже сложнее - надо избавиться от клиенсткого ресайза аваторок. Отресайзить можно или на сервере или на клиенте, через канвас, в 5 строчек, как говориться.
Рендер изображений не в оригинальном размере - малек, скажем так, тупит. Особенно когда их много, аки у вас.

3. И ну конечно правильное решение - подобие активных областей. Дело это не то чтобы сложное - надо просто акуратно следить и акуратно экспайрить куски при обновлении блоков.
Тоже самое можно сделать на клиенте.

Вообще да, для ваших задач выгоднее уже расчитывать на новые технологии, потому как на старых уже не фурычит :)

1. Див нужен затем, что контакт возвращает не квадратное изображение, а, обычно, прямоугольное, и его нужно обрезать.


2. Было бы неплохо, но:


- Контакт возвращает адреса иконок через JS API, поэтому ресайз на сервере сразу отпадает.


- Ресайз идёт не один раз, а так же и при масштабировании.


По этому пункту что-нибудь придумаю.


3. Тоже почитаем.


Благодарю за дельные комментарии. Жалоб от игроков на тормоза ещё не было, но уверен, что вскоре такие найдутся.

2. грузим картинку, перегоняем в канвас
1. при этом можно сделать как ресайз так и кроп
пункт 1 и 2 выполнены.
создать карту кликов и сгенерить тайл-картинку для .3 - совсем малек сложнее
Кстати насчет именно этого топика.
Передомною как-то встала задача геокодировать, ну скажем так чуть более миллиона адресов. WorldWide
Как выпонимаете задача эта не решаема в принципе.

Решение было найдено очень простое, и очень эффективное - берем сайт с посещаемость 10-20к, кликабельностью,и временем жизни клиента - 5-10 минут.
И начинаем ему втирахя подсосывать задачки на геокодинг. Один в минуту(аяксом из общей очереди разбора).
10к человек в день влет пробивают 100к+ адресов.
Если очень надо - можно и каждые 20 секунд запрос в клиент генерить.

Хотя самый эффективным способом конечно же является парсинг датафайлов какогонить gps навигатора. Но это уже совешенно другая статья :)
Была мысль при работе с объектами их обновлять, но работа обычно происходит с группой от 10 до пары тысяч, поэтому меняем шило на мыло - проще раз в часик кормить 500-1000 запросов, за пару дней и пропарсится. А на будущее и спрашиваю, где можно следить за изменениями.
В блоге Яндекс.Карт публикаются списки городов, для которых появились новые карты или значительно исправлены старые.

Можете подписаться на RSS и будете в курсе. Однако, замечу, что полный список изменений (некий diff) отсутствует.