Как стать автором
Обновить

Комментарии 6

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

И еще вопрос, имеет ли хэш функция какую-либо привязку к особенностям координатной сетки для ускорения выборки?

Не совсем понял вопрос. Вообще нет такой особенности. Вычисляется так, как было описано, в зависимости от размеров областей и точки отсчета. Хотя если вы про третий способ выборки из БД, то там наверное можно было обойтись целыми числами, правда не известно, повлияло бы это на производительность существенно.
Просто в плане хэша можно было бы реализовать довольно хитро, сам использую такое:
— все координаты сводятся к XYZ, тоестьномер тайла на котом лежит картинка;
— любую пару XY можно представить числом, которое собирается по следующему правилу: биты из Y чередуются с битами из X, младший бит идет из X;
— получить индексы нижележащих уровней Z можно взять (XY) (XY+1) собрать в индекс и каждый сдвинуть на удвоенную разницу уровней влево.

Данная схема работает, проверено в боевых условиях.

В итоге, координата внутри хранится дополнительно как число для Z=18. При запросе передаются координаты левого-верхнего правого-нижнего и зум. Вычисляется граница индекса и в результате получаем простой запрос по интервалу. Если есть несколько зон, можно добавить в условие выборки, не думаю, что сильно просадит скорость.
А сервер работает на asp.net?
Да.
Почитал, пока лишь по диагонали. В избранное до лучших времен, может и пригодится.

Спасибо!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории