계층형 ScaNN 트리

Hierarchical ScaNN tree

벡터를 여러 단계의 군집으로 나눠 검색 후보를 좁힙니다.

···
html
<div class="v"><header><b>ScaNN TREE</b><span id="state"></span></header><main><div class="levels" id="levels"></div><div class="count" id="count"></div></main><footer>coarse → fine candidates</footer></div>
css
.v{width:min(92vw,660px);height:min(86vh,310px);box-sizing:border-box;padding:clamp(9px,2.5vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);display:flex;flex-direction:column;gap:7px;color:var(--fg);font:500 clamp(15px,4.5vmin,19px)/1.25 var(--font-sans, sans-serif)}.v header,.v footer{display:flex;justify-content:space-between;align-items:center;gap:8px;white-space:nowrap}.v header b{color:var(--accent);font-size:.9em}.v header span,.v footer{color:var(--muted);font-size:.82em}.v main{flex:1;min-height:0;position:relative;overflow:hidden}.v .mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.v .active{background:var(--accent)!important;color:var(--bg)!important;border-color:var(--accent)!important}.v .muted{opacity:.45} .levels{height:70%;display:flex;align-items:center;justify-content:space-between;gap:5px}.level{flex:1;display:grid;grid-template-columns:repeat(2,1fr);gap:3px;align-content:center}.level i{height:17px;border:1px solid var(--line);border-radius:3px;background:var(--surface);transition:background .3s}.level i.on{background:var(--accent)}.arrow{color:var(--muted)}.count{text-align:center;color:var(--accent);font:600 .85em ui-monospace,monospace}
js
let n=0;function draw(){document.getElementById("levels").innerHTML=[2,4,6,8].map((c,i)=>"<div class=level>"+Array.from({length:c},(_,j)=>"<i class=\""+(i<=n&&j===Math.floor(c/2)?"on":"")+"\"></i>").join("")+"</div>"+(i<3?"<span class=arrow>→</span>":"")).join("");document.getElementById("count").textContent=["coarse cluster","subcluster","leaf group","vector candidates"][n];document.getElementById("state").textContent="level "+(n+1)+" / 4";n=(n+1)%4}draw();setInterval(draw,900)

계층형 ScaNN 트리는 벡터 공간을 상위 군집에서 하위 군집으로 나눕니다. 질의와 가까운 가지를 먼저 따라가면 전체 벡터를 한꺼번에 검사할 필요가 줄어듭니다.

AlloyDB의 4단계 트리는 2026년 기준 미리보기 기능입니다. 계층을 깊게 만든다고 항상 더 정확한 것은 아니며, 구성과 재현율을 함께 측정해야 합니다.

언제 쓰나

매우 큰 벡터 인덱스에서 탐색 범위를 단계별로 줄이는 원리를 볼 때 유용합니다.

페이지로 열기 ↗