2009-07-19 9 views
1

asp.net mvc 프레임 워크를 기반으로 웹 프로젝트를하고 있습니다. db로 postgre SQL을 사용하고 있습니다. 문제는 내 애플리케이션에서 검색을 구성하는 방법입니다. 한 가지 옵션은 lucene.net과 같은 .net 라이브러리를 사용하는 것입니다. 또 다른 옵션은 Postgre 전체 텍스트 검색을 사용하는 것입니다. 그래서 최선의 선택은 무엇입니까?postgres 전체 텍스트 검색

답변

3

저는 프로덕션 환경에서 포스트그레스를 실행하지 않았지만 테스트 DB에서 상당히 많은 양의 데이터를 가지고 테스트 해 보았습니다. 텍스트 문자열의 약 600,000 행을 인덱싱하면 평균 3 단어로 전체 텍스트 인덱스가 120MB가됩니다. 이 검색어에 대한 검색어는 이후에 각 검색 용어의 첫 번째 검색어 인 이후 매우 빠릅니다. 각 용어의 색인을 디스크에서 메모리로 가져와야합니다. 나는 시작시 전체 색인을 메모리로 끌어들이는 방법을 아직 찾지 못했다. 하나의 랩톱 HD에서 실행되기 때문에 초기의 느린 속도의 일부는 디스크 IO 관련 일 수 있습니다. 또한 120MB 인덱스에 120MB 이상의 DB 메모리가 필요한지 확실하지 않습니다.

프로덕션 응용 프로그램의 경우 Lucene for Java를 사용하고 있으며 수 GB의 인덱스 데이터로 매우 빠르게 수행합니다. Lucene의 이점은 1) DB 독립적이며 2) 배포 가능하다는 점입니다. # 1의 경우 이것은 문제가되지 않지만 기본 DB가 무엇이든 동일한 색인 코드를 사용할 수 있음을 의미합니다. # 2의 경우 응용 프로그램의 크기에 따라 다릅니다. Lucene (및 특히 Hadoop)은 다중 스레드로 설계되었으므로 공유 드라이브에 인덱스를 저장하고 여러 컴퓨터에서 동시에 검색을 실행할 수 있습니다. 인덱싱은 여전히 ​​단일 스레드입니다. 당신이 원하든 원하지는 당신의 아키텍처가 무엇인지에 달려 있습니다. 당신은 오히려 1 개의 큰 DB 또는 1 개의 작은/매체 DB와 그것을 지원하는 몇개의 더 작은 인덱싱 서버를 가지고 있습니까?