У нас есть объекты с латами и длинными рекордами. Также каждый объект имеет дату создания.Как реализовать быструю сортировку по результату функции?
Пользователь может входить в систему из любого места и видеть объекты. Нам нужно показать сортировку объектов по специальному индексу, который рассчитывается исходя из свежести объекта и того, как далеко от текущего пользователя.
Допустим, у нас есть объекты в Нью-Йорке и Джерси. Если вы выходите из Нью-Йорка, вы должны увидеть объекты Нью-Йорка наверху, а затем Jersey. Но тем не менее, очень старые объекты new-york должны быть ниже, чем новые предметы трикотажа.
Мы можем аппроксимировать функцию F = < объект свежести в день> + < расстояния от текущей точки пользователя, чтобы объект места в км>
Мы используем PostGreSQL для хранения данных, и мы можем на самом деле просто сортировать по такой функции и получить то, что нам нужно. Проблема в том, что мы боимся, что это будет работать довольно медленно, потому что мы планируем достичь таких объектов 1k-10k и 100-300 мест, и приложение должно быстро вернуть результат (потому что это похоже на самое важное в приложении)
Пользователи будут добавлять объекты из разных мест.
Есть ли у вас идеи, как повысить производительность такого запроса?
извините, не понял, в соответствии с чем? Ну функция будет принимать два аргумента < lat, long > текущего пользователя. И «свежесть» объектов будет меняться каждый день. –
@ user909291 Не могли бы вы объяснить более подробно, как реализовано <>? Является ли это несколько числовых или столбцов даты/времени в таблице? Что вы подразумеваете под «свежемостью меняется каждый день», есть ли работа, выполняемая каждый день (или ночь), которая вычисляет новый <> и обновляет всю таблицу? –
krokodilko
Нет, нет. Во-первых, это еще не реализовано, мы просто думаем об этом. Говоря «Свежесть», я имею в виду количество дней, прошедших с даты создания. У нас будет поле даты и времени (дата создания). Но мы можем создавать задания, независимо от того, имеет ли смысл –