하루 1회 갱신으로 정했습니다. 그런데 큰 사건이 생기면 몇 분 안에 새 검색어가 폭증합니다. 어제 만든 트라이에는 그 단어가 아예 없습니다.
하나로 합치려 하면 무너진다
급상승을 본 목록에 넣으려면 트라이를 분 단위로 다시 만들어야 합니다. 검색어 1억 종류를 훑는 일을 몇 분마다 할 수는 없습니다.
그래서 경로를 둘로 둡니다.
| 경로 | 크기 | 주기 |
|---|---|---|
| 본 목록 | 크다 | 하루 1회 |
| 급상승 | 작다 | 몇 분 |
읽을 때 둘을 합쳐 상위 5개를 만듭니다. 합치는 비용은 다섯 개와 몇 개를 비교하는 것이라 무시할 수 있습니다.
갱신 주기가 다른 것을 같은 자리에 두지 않는 것이 요점입니다. 같은 자리에 두면 느린 쪽이 빠른 쪽의 주기를 강요받거나, 빠른 쪽이 느린 쪽의 주기로 늦어집니다.
급상승 목록이 작다는 것의 이득
급상승 검색어는 많아도 수천 개입니다. 이 크기 차이가 여러 가지를 값싸게 만듭니다.
분 단위로 다시 만들 수 있다
한 대에 전부 들어간다
오래된 것을 버리는 것도 값싸다
그리고 급상승은 접두사별 상위 목록을 미리 만들 필요도 없습니다. 수천 개면 읽을 때 훑어도 100ms 안에 끝납니다. 본 목록에서 미리 저장이 필요했던 이유는 크기였습니다.
무엇을 급상승으로 보나
절대 검색량으로 보면 안 됩니다. 인기 검색어는 늘 많이 검색되므로 그것이 늘 급상승으로 잡힙니다.
| 기준 | 결과 |
|---|---|
| 지금 많이 검색된다 | 원래 인기 있는 것이 잡힌다 |
| 어제 같은 시간보다 많다 | 진짜 변화가 잡힌다 |
변화율로 봐야 합니다. 그리고 검색량이 아주 적은 것은 변화율이 쉽게 튀므로 최소 기준을 둡니다. 하루 3번 검색되던 것이 30번이 되면 열 배지만 급상승이 아닙니다.
두 경로를 합칠 때의 위험
같은 검색어가 두 목록에 다 있을 수 있습니다. 합칠 때 걸러내지 않으면 같은 제안이 두 줄로 보입니다.
그리고 급상승 목록은 걸러내기를 급하게 통과합니다. 본 목록은 만들 때 시간을 들여 걸러내지만, 급상승은 몇 분 안에 올라갑니다. 가장 위험한 것이 가장 빨리 올라가는 구조입니다.
그래서 급상승 경로에는 사후 대응을 붙입니다. 사람이 즉시 내릴 수 있는 수단을 두고, 내린 것은 다음 주기에 다시 올라오지 않게 기록합니다.