5

이것은 인터뷰 질문입니다. 자동 완성을위한 분산 백엔드를 디자인하십시오.자동 완성을위한 백엔드

자동 완성이 주어진 접미사에 의해 사전에 검색입니다 다음과 같이

나는 대답한다. 사전은 아마도 trie으로 구성되어야합니다. 사전은 가장 빈번한 질의로부터 만들어 지지만 다른 이야기입니다.

이제 사전이 자주 변경되지 않는다고 가정합니다 (예 : 매 밀리 초가 아닌 하루에 한 번). 따라서 자동 완성 쿼리 (예 :로드 밸런서 및 라운드 로빈 정책 사용)를 처리하는 여러 서버에 사전을 복제 할 수 있습니다.

사전에 대해서도 생각해야하지만 이것은 또 다른 이야기입니다.

의미가 있습니까? 내가 놓친 게 있니?

+0

아키텍처 질문 정말 그녀에게 물어야한다. 전자 : http://programmers.stackexchange.com/ 나는 정말로 신경 쓰지 않는다. 그러나 약간은한다. –

답변

1

올바른 질문입니다. trie 아이디어는 정말 좋으며 log(n)에서 검색하는 데 도움이됩니다. 변경 빈도는 정보에 따라 다르므로 정확하게 시간을 말하지는 않겠지 만 동적으로 조정할 것입니다. 하루에 한 번만 변경한다고 가정 해 보겠습니다. 트리가 얼마나 변경되었는지는 좋을 것입니다. 그리고 경계를 지정할 수 있습니다 (예 : 10 %). 경계가 초과되면 트라이를 더 자주 업데이트 할 수 있습니다. 그것은 또한 대부분의 경우에 그것이 중요하지 않기 때문에 얼마나 중요한가에 달려있다. 로드 밸런서 아이디어도 좋습니다.

1

SOLR 4.0 (solr에는 trie가 있고 배부되는) 무엇을보십시오. 자동 완성 기능을 사용하는 방법에 크게 의존합니다.. trie 같은 것보다 단지 wild card filter이라면 단순한 ASCII는 괜찮을 것입니다 ... 그렇지 않으면 자동 수정을 원한다면 더 복잡해집니다. 그 말은 나는 일반 필드 (즉, SKU 또는 특수 ID가 아닌)가 그렇지 않으면 엄청나게 크고 비효율적 인 trie를 갖게 될 경우 trie가 좋은 결과를 얻는 것을 의심합니다. 더욱 구체적으로 http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters

관련 문제