2009-07-31 2 views
3

외부 사이트에서 API를 통해 제품에 대한 검색 결과를 얻는 PHP/MySQL 사이트를 프로그래밍하고 있습니다. 이 사이트는 자체 제품이기도하고 사이트 소유자는 검색 결과를 상호 연결되기를 원합니다.두 가지 검색 결과를 효과적으로 결합하는 방법은 무엇입니까?

누군가가 VIDEO를 검색하여 날짜순으로 정렬 한 경우 결과는 출처와 관계없이 모두 순서대로 표시되어야합니다.

예 :

July 31 - Video A - our database 
July 30 - Video B - via API 
July 29 - Video C - via API 
July 28 - Video D - our database 
...

문제점은 특히 여러 페이지의 결과를 보는 것과 관련하여 효과적으로이를 수행하는 방법을 찾는 것입니다. 사용자가 결과의 두 번째 페이지를 클릭하면 결과의 첫 페이지 (API의 마지막 항목)의 마지막 항목을 파악한 다음 마지막 API 항목이 표시된 이후에 시작하는 항목 만 API에서 가져와야합니다. 이전 페이지로 이동 한 다음 데이터베이스 결과에 대해 동일한 작업을 수행하고 다시 조합하십시오.

이 복잡한 알고리즘을 피하기 위해 나는 500 개의 결과와 같은 많은 양의 결과를 제한하고 한꺼번에 가져 와서 순서를 정했다. 그런 다음 사용자가 몇 페이지 앞으로 나아갈 경우 모든 데이터를 다시 가져올 필요가 없습니다.

두 검색 결과를 결합하는 데 유용한 알고리즘에 대한 제안 사항이 있습니까?

답변

3

캐싱에 사용하든 그렇지 않든간에 다음 결과가 모두 해당 소스에서 제공 될 경우 최소한 두 페이지의 결과 값을 가져와야합니다.

많은 결과를 얻고 세션에 캐싱하면 사용할 수있는 해결책 중 하나입니다.

어떤 이유로 작업 결과가 비싸고 최적화가 필요한 경우 모든 결과를 캐시하지 않으려는 경우 결과의 위치가 포함 된 세션에 간단한 배열을 저장할 수 있습니다. 다음 페이지의 시작 번호를 알 수 있습니다.

예를 들어 (의사 코드)

**Request 1** 
Get 10 results from API 
Get 10 results form Database 
Merge the results 
Display first 10 and save the order to an array 
    (A for API, D for Database, ex: A,A,A,D,A,D,D,A,D,A) 

User clicks page 2 

**Request 2** (Page 2) 
Get 10 results from API starting at 5 
Get 10 results from Database starting at 7 
Repeat merge and display above. 

당신 수 당신이 (당신은 10 개 여분의 결과를 얻을 것입니다) 지금까지 검색하는 데 필요한 것을 선택적으로 캐시. 이렇게하면 첫 번째 요청이 길어 지지만 두 번째 요청을 훨씬 빨리 수행 할 수 있습니다.

사용자가 여러 페이지 앞으로 건너 뛰면 각 소스의 이전의 알 수없는 페이지에 표시 될 수있는 결과의 수가 가장 커야합니다.

어느 소스에서 성능에 대해 너무 걱정하지 않는다면, 내가 말한 것처럼 많은 수의 데이터를 검색하고 모든 결과를 일시적으로 캐시합니다. 새로운 검색이 실행 되 자마자 이전 결과를 덤프하십시오.

관련 문제