문제

각 파일 세트가있는 큰 작은 파일 세트 (~ 10m)에서 분산 검색을 수행해야합니다. key: value 한 쌍. 이를 위해 총 56 개의 CPU 코어가있는 서버 세트가 있습니다. 대부분 듀얼 코어 및 쿼드 코어이지만 16 개의 코어가있는 큰 DL785도 있습니다.

이 시스템은 온라인 쿼리를 위해 설계되어야합니다. 저는 프론트 엔드에서 요구에 따라 JSON 출력을 반환하는 웹 서비스를 구현하려고합니다.

문제를 더욱 복잡하게하기 위해, 특정 검색을 위해 때때로 나는 최신 각 파일의 버전이지만 다른 검색은 특정 날짜에 존재하는 해당 버전의 파일에만 적용될 수 있습니다.

나는 Hadoop을 보았지만 행정부는 꽤 끔찍하며 기본 작업 제출 방법은 느립니다. 온라인 데이터 처리가 아닌 오프라인 매우 대규모 처리를 위해 설계된 것으로 보입니다.

Couchdb는 문서 상점으로 멋져 보이고 key: value 스타일 문서와 버전 및 Mapreduce, 그러나 어떻게 사용될 수 있는지에 대해서는 아무것도 찾을 수 없습니다. 배포 Mapreduce 시스템. 모든 클러스터링 문서는 클러스터링 및 복제 사용에 대한 이야기입니다. 전체 데이터베이스 로드 밸런싱, 내가 필요로하는 것은 하중 분포.

나는 또한 다양한 DHT를 조사했으며 실제로 개별 기록을 저장하고 검색하는 데 괜찮지 만 일반적으로 MapReduce의 '지도'부분을 수행하는 데 좋지 않습니다. 전체 문서 세트를 반복하는 것이 중요합니다.

따라서 내 이상적인 시스템은 CouchDB의 웹 서비스 기능과 함께 Hadoop의 HDFS와 같은 분산 파일 시스템으로 구성됩니다.

누구든지 도움이 될 수있는 방향으로 나를 지적 할 수 있습니까? 구현 언어는 Linux에서 실행해야한다는 점을 제외하고는 그다지 관심이 없습니다.

도움이 되었습니까?

해결책

문제 도메인이 Solr과 같은 솔루션에 더 적합한 것 같습니다. Solr은 다른 응용 프로그램에 대한 HTTP 인터페이스를 제공합니다 JSON. 여러 컴퓨터에서 검색을 분할하거나로드 밸런싱 (마스터/슬레이브)을 위해 기계에 단일 사본을 배포 할 수 있습니다. 데이터에 가장 적합한 것에 달려 있습니다. 그러나 실시간 검색 결과에 대한 경험에서 Lucene/Solr은 MAP/Reduce 시스템을 기반으로 모든 시스템을 이길 것입니다.

Solr을 응용 프로그램에 통합하고 증분 업데이트를 수행하는 것은 매우 간단합니다. 그래도 버전에 대한 아이디어는 없습니다. 그것이 정말로 필요한 경우, 당신은 그것을 해결하는 다른 방법을 찾아야 할 수도 있습니다.

다른 팁

응용 프로그램 요구 사항에 대해 약간 혼란 스러울 수 있습니다. Solr이 훌륭한 응용 프로그램이 될 키/값 쌍을 통해 검색 할 수 있어야한다고 언급합니다. 그러나지도/축소의지도 부분을 사용해야하며 10m 문서를 스캔해야한다고 언급합니다. 10m 문서를 스캔하고 온라인 방식 (밀리 초 범위)에서 결과를 반환하는 솔루션을 찾을 수 있을지 모르겠습니다. 그러나 또 다른 해결책은 너무 많이 보는 것입니다 HBASE. 이는 HDF 위에 쌓여 있으며 원하는 유형의 작업을 수백만 개의 작은 항목을 줄일 수 있습니다. 그러나 일자리는 제출할 수없고 원하는 시간 근처에서 마무리하지 않을 것입니다.

현재 RSS 항목 (2m 항목, 품목 당 여러 KB)으로 테스트 HBase 설정이 있습니다. 총 DB 크기는 ~ 5GB입니다. 이 DB에 대해 모든 항목을 스캔 한 다음 결과를 출력하는 몇 가지 작업이 있습니다. 클러스터는 ~ 5,000 / 초로 품목을 스캔하지만 작업을 완료하는 데 여전히 약 10 분 정도 걸립니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top