2013-08-02 5 views
0

위도와 경도가 높은 개체가 있습니다. 또한 각 개체에는 생성 날짜가 있습니다.함수 결과로 신속한 정렬을 구현하는 방법은 무엇입니까?

사용자는 어디서나 로그인하여 개체를 볼 수 있습니다. 우리는 개체의 신선도와 현재 사용자로부터의 거리를 기반으로 계산되는 특수 색인을 기준으로 개체 정렬을 표시해야합니다.

우리는 New York과 Jersey에 개체가 있다고합니다. New York에서 로그인하면 New Yorkes 객체가 맨 위에 표시되고 Jersey 객체가 표시됩니다. 그럼에도 불구하고 아주 오래된 new-yorks 객체는 그 결과 새로운 유니폼 객체 아래에 있어야합니다.

우리의 km의 장소를 객체에 함수 F 현재 사용자의 관점에서 = 하루에 < 객체 신선도> + < 거리에 근접 할 수>

우리는 데이터를 저장하기 위해 PostgreSQL의를 사용하고, 우리가 할 수있는 정말 종류 등의 기능으로 우리가 필요한 것을 얻으십시오. 문제는 우리가 1k-10k 개체와 100-300 개 장소에 도달 할 계획이므로 애플리케이션이 매우 빠르게 느려질 것이라는 두려움이 있습니다. 앱에서 결과를 매우 빨리 반환해야합니다 (앱에서 가장 중요한 것)

사용자는 다른 위치에서 개체를 추가합니다.

이러한 쿼리의 성능을 향상시키는 방법에 대한 아이디어가 있습니까?

답변

1

대신 다음과 같이 정렬 할 수 있습니다. distance - object_creation_time. 값을 변경하지 않아도 정렬 할 때마다이 함수를 다시 평가할 필요가 없습니다.

+0

죄송합니다. 함수는 현재 사용자의 두 개의 인수 < lat, long >을 취할 것입니다. 그리고 객체의 신선도는 매일 바뀔 것입니다. –

+0

@ user909291 <> 구현 방법에 대한 자세한 내용을 설명 할 수 있습니까? 테이블에 숫자 또는 날짜/시간 소인 열이 있습니까? "신선도가 매일 바뀝니다"란 무엇을 의미합니까? 매일 새벽 <>을 계산하고 전체 테이블을 업데이트하는 작업 (매일 밤)이 있습니까? – krokodilko

+0

아니요, 아니요. 우선 아직 구현되지 않았습니다. 우리는 단지 그것에 대해 생각하고 있습니다. «신선함»이란 창조 날짜로부터 사라진 일수를 의미합니다. 날짜 시간 필드 (생성 날짜)가 있습니다. 그러나 우리는 일을 만들 수 있습니다. 무엇이든 의미가있을 경우 –

-1

Postgres에서 인덱스는 열 또는 열의 튜플에만있을 필요는 없습니다 ... Postgres documentation.에 설명 된대로 함수에 인덱스를 만들 수 있습니다. 동일한 함수로 쿼리하면 인덱스가 사용하십시오.

+0

함수 기반 인덱스는 테이블의 열을 참조하는 함수에 대해서만 만들 수 있습니다. 이 경우 함수는 현재 사용자 지점에서 km의 객체 위치까지 ** 거리를 참조합니다.이 값은 각 객체의 테이블에 저장되지 않으므로이 경우 함수 기반 인덱스는 쓸모가 없습니다. – krokodilko

+0

당신 말이 맞아요. 나는 그것이 사용자의 현재 위치뿐 아니라 임의의 고정 된 지점에 있다는 것을 놓쳤습니다. 블레. – dcsohl

관련 문제