Foundry
검색어 자동완성 설계
심화
핵심

급상승은 다른 경로로

갱신 주기가 다른 것을 같은 자리에 두지 않는다

하루 1회 갱신으로 정했습니다. 그런데 큰 사건이 생기면 몇 분 안에 새 검색어가 폭증합니다. 어제 만든 트라이에는 그 단어가 아예 없습니다.

하나로 합치려 하면 무너진다

하루 한 번 만드는 본 목록과 분 단위로 얹는 급상승 목록을 나눈다 두 경로 본 목록. 하루 1회 크고 통째로 바꾼다 급상승. 분 단위 작고 자주 바꾼다 읽을 때 둘을 합쳐 상위 5개를 만든다 하나로 합치려면 큰 것을 분 단위로 다시 만들어야 한다 갱신 주기가 다른 것을 같은 자리에 두지 않는다 급상승 목록은 작아서 오래된 것을 버리는 것도 값싸다

급상승을 본 목록에 넣으려면 트라이를 분 단위로 다시 만들어야 합니다. 검색어 1억 종류를 훑는 일을 몇 분마다 할 수는 없습니다.

그래서 경로를 둘로 둡니다.

경로크기주기
본 목록크다하루 1회
급상승작다몇 분

읽을 때 둘을 합쳐 상위 5개를 만듭니다. 합치는 비용은 다섯 개와 몇 개를 비교하는 것이라 무시할 수 있습니다.

갱신 주기가 다른 것을 같은 자리에 두지 않는 것이 요점입니다. 같은 자리에 두면 느린 쪽이 빠른 쪽의 주기를 강요받거나, 빠른 쪽이 느린 쪽의 주기로 늦어집니다.

급상승 목록이 작다는 것의 이득

급상승 검색어는 많아도 수천 개입니다. 이 크기 차이가 여러 가지를 값싸게 만듭니다.

분 단위로 다시 만들 수 있다
한 대에 전부 들어간다
오래된 것을 버리는 것도 값싸다

그리고 급상승은 접두사별 상위 목록을 미리 만들 필요도 없습니다. 수천 개면 읽을 때 훑어도 100ms 안에 끝납니다. 본 목록에서 미리 저장이 필요했던 이유는 크기였습니다.

무엇을 급상승으로 보나

절대 검색량으로 보면 안 됩니다. 인기 검색어는 늘 많이 검색되므로 그것이 늘 급상승으로 잡힙니다.

기준결과
지금 많이 검색된다원래 인기 있는 것이 잡힌다
어제 같은 시간보다 많다진짜 변화가 잡힌다

변화율로 봐야 합니다. 그리고 검색량이 아주 적은 것은 변화율이 쉽게 튀므로 최소 기준을 둡니다. 하루 3번 검색되던 것이 30번이 되면 열 배지만 급상승이 아닙니다.

두 경로를 합칠 때의 위험

같은 검색어가 두 목록에 다 있을 수 있습니다. 합칠 때 걸러내지 않으면 같은 제안이 두 줄로 보입니다.

그리고 급상승 목록은 걸러내기를 급하게 통과합니다. 본 목록은 만들 때 시간을 들여 걸러내지만, 급상승은 몇 분 안에 올라갑니다. 가장 위험한 것이 가장 빨리 올라가는 구조입니다.

그래서 급상승 경로에는 사후 대응을 붙입니다. 사람이 즉시 내릴 수 있는 수단을 두고, 내린 것은 다음 주기에 다시 올라오지 않게 기록합니다.

면접에서 이렇게 나옵니다

Q.급상승 검색어를 본 목록에 함께 넣으면 무엇이 문제입니까

트라이를 분 단위로 다시 만들어야 합니다. 검색어 1억 종류를 훑는 일을 몇 분마다 할 수는 없습니다.

경로크기주기
본 목록크다하루 1회
급상승작다몇 분

경로를 둘로 두고 읽을 때 합쳐 상위 다섯 개를 만듭니다. 합치는 비용은 다섯 개와 몇 개를 비교하는 것이라 무시할 수 있습니다.

흔한 실수: 본 목록의 갱신 주기를 줄여 해결하려는 것. 주기를 줄이면 만드는 비용이 그 배수로 늘어납니다. 갱신 주기가 다른 것을 같은 자리에 두지 않는 것이 답입니다.

Q.급상승 목록에도 노드마다 상위 목록을 미리 만드시겠습니까

만들지 않습니다. 급상승은 많아도 수천 개라 읽을 때 훑어도 100ms 안에 끝납니다.

본 목록에서 미리 저장이 필요했던 이유는 크기였습니다. 크기가 다르면 같은 구조를 쓸 이유가 없습니다.

분 단위로 다시 만들 수 있다
한 대에 전부 들어간다
오래된 것을 버리는 것도 값싸다

흔한 실수: 두 경로에 같은 구조를 적용하는 것. 일관돼 보이지만 급상승 쪽은 미리 저장 때문에 분 단위 갱신이 어려워집니다. 구조는 크기와 주기에서 나오므로 서로 달라도 됩니다.

Q.무엇을 급상승으로 판정하시겠습니까

변화율로 봅니다. 절대 검색량으로 보면 원래 인기 있는 것이 늘 잡힙니다.

기준결과
지금 많이 검색된다원래 인기 있는 것이 잡힌다
어제 같은 시간보다 많다진짜 변화가 잡힌다

그리고 검색량이 아주 적은 것은 변화율이 쉽게 튀므로 최소 기준을 둡니다.

흔한 실수: 최소 기준을 두지 않는 것. 하루 3번 검색되던 것이 30번이 되면 열 배지만 급상승이 아닙니다. 이런 것이 목록을 채우면 아무도 관심 없는 단어가 제안 상위에 오릅니다.

Q.두 경로를 합칠 때 무엇을 조심해야 합니까

중복 제거와, 걸러내기를 급하게 통과한다는 점입니다.

같은 검색어가 두 목록에 다 있으면 같은 제안이 두 줄로 보입니다. 합칠 때 걸러냅니다.

더 중요한 것은 두 번째입니다. 본 목록은 만들 때 시간을 들여 걸러내지만 급상승은 몇 분 안에 올라갑니다. 가장 위험한 것이 가장 빨리 올라가는 구조입니다.

그래서 급상승 경로에는 사람이 즉시 내릴 수 있는 수단을 두고, 내린 것은 다음 주기에 다시 올라오지 않게 기록합니다.

흔한 실수: 내리는 것을 일시적 조치로 두는 것. 기록하지 않으면 다음 주기에 그대로 다시 올라옵니다. 그러면 사람이 같은 것을 계속 내리게 됩니다.

먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.

읽었으면 문제로 확인해보세요

검색어 자동완성 설계 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.