Оптимизация обработки на стороне сервера, выбор с помощью пользовательской функции в предложении where, спящий режим при загрузке - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь получить всю парковку (каждая парковка имеет атрибут Lat, Lng) путем сканирования с радиусом.

Я создал пользовательскую функцию для вычисления расстояния между 2 точками и назвал ее GET_DISTANCE_IN_KILOMETRE в базе данных.

Позвольте мне описать, чего я хочу достичь:

Поскольку пользователь хочет "найти все места стоянки рядом с слышать", LatLng его / ее текущего местоположения, вместе с Радиус по умолчанию в километрах будет отправлен как запрос на сервер. Затем он выполнит запрос в базе данных, выполнит поиск парковки рядом с его / ее местоположением, выполнив итерацию по всей строке таблицы парковок, и с каждой строкой вычислит расстояние между его / ее местоположением до парковки, затем получит всю парковку в пределах укажите c radius путем сравнения недавно созданного атрибута расстояния с параметром radius.

Кажется, что для каждого запроса требуется не менее 400-500 миллисекунд для ответа клиенту. Моя таблица парковки теперь имеет около 500 строк. Интересно, есть ли подход для улучшения производительности? Предположим, что в ближайшем будущем в таблице парковок будет 1000 или 10000 строк или более, какой подход я могу изменить?

Я недавно читал о кешировании в бэкэнде. Мне также интересно, можно ли его использовать для оптимизации этого случая или нет?

Приведенный ниже код является примером запроса, который я написал в настоящее время для использования в данный момент разработки. Я с нетерпением жду ответа от всех вас! Спасибо за помощь мне !

DECLARE
    @LATITUDE FLOAT
DECLARE
    @LONGITUDE FLOAT
DECLARE
    @RADIUS SMALLINT

SET @LATITUDE = 10.784122211291663
SET @LONGITUDE = 106.71152489259839
SET @RADIUS = 3

SELECT TOP 10 P.ID,
              PLI.NAME,
              P.PARKING_LOT_TYPE_ID,
              P.LATITUDE,
              P.LONGITUDE,
              DISTANCE
FROM PARKING_LOT P
         INNER JOIN (
    SELECT ID, NAME
    FROM PARKING_LOT_INFORMATION) AS PLI ON PLI.ID = P.ID
         INNER JOIN (
    SELECT PL.ID, dbo.GET_DISTANCE_IN_KILOMETRE(@LATITUDE, @LONGITUDE, PL.LATITUDE, PL.LONGITUDE) AS DISTANCE
    FROM PARKING_LOT PL) AS PL
                    ON P.ID = PL.ID AND DISTANCE <= @RADIUS AND IS_AVAILABLE = 1
                        AND CONVERT(TIME, GETDATE()) BETWEEN P.OPENING_HOUR AND P.CLOSING_HOUR
ORDER BY DISTANCE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...