나는 수백 개의 웹 사이트를 크롤링해야하는 웹 크롤러를 만들고 있습니다. 내 크롤러는 이미 크롤링 된 URL 목록을 보관합니다. 크롤러가 새 페이지를 크롤링 할 때마다 이미 크롤링 된 URL 목록을 먼저 검색하고 크롤러가 이미 나열되어 있으면 크롤러가 다음 URL로 건너 뛰는 식으로 진행됩니다. URL이 크롤링되면 목록에 추가됩니다.많은 수의 URL을 효율적으로 검색합니다.
현재 이진 검색을 사용하여 URL 목록을 검색하고 있지만 일단 목록이 커지면 검색 속도가 매우 느려집니다. 그래서, 내 질문에 어떤 URL 목록을 검색하는 데 사용할 수있는 알고리즘입니다 (약 20k 100k 매일 목록 크기 증가).
크롤러는 현재 Python으로 코딩되어 있습니다. 하지만 C++이나 다른 더 나은 언어로 이식 할 것입니다.
왜 자바 태그가 지정 되었습니까? 또한 Trie에서 읽을 수도 있습니다. – nbryans
바이너리 검색을 사용하고 있으므로 목록이 이미 정렬되어 있으므로 바이너리 검색보다 더 좋은 솔루션을 얻을 수 있다고 생각하지 않습니다. 프로그램의 연산 집약적 인 부분 타이밍을 시도 했습니까? 내 생각 엔 병목 현상은 검색 알고리즘이 아니라 정렬 알고리즘 일 것입니다. – user3813674
사전을 사용하여 언제든지 시도해 볼 수 있습니다. 사전 조회는 문자열 일치를 확인하는 대신 해시하기 때문에 매우 효율적입니다 (URL이 일반적으로 여러 가지로 시작하기 때문에 실제로 좋지 않습니다). 문자열 비교가 어쨌든 느리기 때문에 해시 검색이 빨라집니다. – Delioth