Milvus 2.6에서 지오메트리 필드 및 RTREE와 함께 지리공간 필터링 및 벡터 검색 제공
AI 시스템이 실시간 의사 결정에 점점 더 많이 적용됨에 따라, 지리공간 데이터는 점점 더 많은 애플리케이션, 특히 실제 세계에서 작동하거나 실제 위치에서 사용자에게 서비스를 제공하는 애플리케이션에서 점점 더 중요해지고 있습니다.
DoorDash나 Uber Eats와 같은 음식 배달 플랫폼을 생각해 보십시오. 사용자가 주문을 하면 시스템은 단순히 두 지점 사이의 최단 거리만 계산하는 것이 아닙니다. 레스토랑의 품질, 택배 이용 가능 여부, 실시간 교통 상황, 서비스 지역, 그리고 점점 더 개인 취향을 나타내는 사용자 및 품목을 평가합니다. 마찬가지로 자율 주행 차량은 엄격한 지연 시간 제약(대개 밀리초 이내)에서 경로 계획, 장애물 감지, 장면 수준의 의미 파악을 수행해야 합니다. 이러한 영역에서 효과적인 의사 결정은 공간적 제약과 의미적 유사성을 독립적인 단계로 취급하는 것이 아니라 결합하는 데 달려 있습니다.
그러나 데이터 계층에서 공간 데이터와 의미론적 데이터는 전통적으로 별도의 시스템에서 처리되어 왔습니다.
지리공간 데이터베이스와 공간 확장은 좌표, 다각형, 포함 또는 거리와 같은 공간 관계를 저장하도록 설계되었습니다.
벡터 데이터베이스는 데이터의 의미적 의미를 나타내는 벡터 임베딩을 처리합니다.
애플리케이션에 이 두 가지가 모두 필요한 경우, 한 시스템에서 위치별로 필터링한 다음 다른 시스템에서 벡터 검색을 수행하는 다단계 쿼리 파이프라인을 사용해야 하는 경우가 많습니다. 이러한 분리는 시스템 복잡성을 증가시키고 쿼리 대기 시간을 추가하며 공간 의미 추론을 대규모로 효율적으로 수행하기 어렵게 만듭니다.
Milvus 2.6은 벡터 유사도 검색을 공간 제약 조건과 직접 결합할 수 있는 지오메트리 필드를 도입하여 이 문제를 해결합니다. 이를 통해 다음과 같은 사용 사례가 가능해졌습니다:
위치 기반 서비스(LBS): "이 도시 블록 내에서 유사한 POI 찾기"
다중 모드 검색: "이 지점에서 1km 이내에 있는 유사한 사진 검색"
지도 및 물류: "한 지역 내의 자산" 또는 "경로와 교차하는 경로"
공간 필터링에 최적화된 트리 기반 구조인새로운 RTREE 인덱스와함께 Milvus는 이제 고차원 벡터 검색과 함께 st_contains, st_within, st_dwithin 와 같은 효율적인 지리공간 연산자를 지원합니다. 이 두 가지를 함께 사용하면 공간을 인식하는 지능형 검색이 가능할 뿐만 아니라 실용적입니다.
이 글에서는 지오메트리 필드와 RTREE 인덱스의 작동 방식과 이를 벡터 유사도 검색과 결합하여 실제 공간 의미론적 애플리케이션을 구현하는 방법을 살펴봅니다.
Milvus에서 지오메트리 필드란 무엇인가요?
기하학 필드는 기하학 데이터를 저장하는 데 사용되는 Milvus의 스키마 정의 데이터 유형(DataType.GEOMETRY)입니다. 원시 좌표만 처리하는 시스템과 달리 Milvus는 포인트, 라인스트링, 폴리곤을 포함한 다양한 공간 구조를 지원합니다.
따라서 시맨틱 벡터를 저장하는 동일한 데이터베이스 내에서 레스토랑 위치(Point), 배달 구역(Polygon), 자율 주행 차량 궤적(LineString) 등의 실제 개념을 모두 표현할 수 있습니다. 다시 말해, Milvus는 사물의 위치와 의미 모두를 위한 통합 시스템이 됩니다.
기하학 값은 사람이 읽을 수 있는 기하학 데이터 삽입 및 쿼리 표준인 잘 알려진 텍스트(WKT) 형식을 사용하여 저장됩니다. WKT 문자열을 Milvus 레코드에 직접 삽입할 수 있으므로 데이터 수집과 쿼리가 간소화됩니다. 예를 들어
data = [
{
"id": 1,
"geo": "POINT(116.4074 39.9042)",
"vector": vector,
}
]
RTREE 인덱스란 무엇이며 어떻게 작동하나요?
Milvus에 지오메트리 데이터 유형이 도입되면 공간 개체를 효율적으로 필터링할 수 있는 방법도 필요합니다. Milvus는 2단계 공간 필터링 파이프라인을 사용해 이를 처리합니다:
거친 필터링: RTREE와 같은 공간 인덱스를 사용하여 후보를 빠르게 좁힙니다.
정밀 필터링: 남아있는 후보에 정확한 지오메트리 검사를 적용하여 경계에서 정확성을 보장합니다.
이 설계는 성능과 정확성의 균형을 맞춥니다. 공간 인덱스는 관련 없는 데이터를 적극적으로 제거하며, 정밀한 기하학적 검사는 봉쇄, 교차, 거리 임계값과 같은 연산자에게 정확한 결과를 보장합니다.
이 파이프라인의 핵심은 기하학적 데이터에 대한 쿼리를 가속화하도록 설계된 공간 인덱싱 구조인 RTREE(Rectangle Tree)입니다. RTREE는 최소 바운딩 사각형(MBR)을 사용해 객체를 계층적으로 구성함으로써 쿼리 실행 중에 검색 공간의 많은 부분을 건너뛸 수 있게 해줍니다.
1단계: RTREE 색인 구축
RTREE 구성은 근처의 공간 개체를 점점 더 큰 경계 영역으로 그룹화하는 상향식 프로세스를 따릅니다:
1. 리프 노드를 생성합니다: 각 지오메트리 객체에 대해 해당 객체를 완전히 포함하는 가장 작은 사각형인 최소 경계 사각형(MBR)을 계산하고 이를 리프 노드로 저장합니다.
2. 더 큰 상자로 그룹화합니다: 근처의 리프 노드를 클러스터링하고 각 그룹을 새 MBR로 감싸서 내부 노드를 생성합니다.
3. 루트 노드를 추가합니다: 모든 내부 그룹을 포함하는 루트 노드를 생성하여 높이가 균형 잡힌 트리 구조를 형성합니다.
2단계: 쿼리 가속화
1. 쿼리MBR 구성: 쿼리에 사용되는 지오메트리에 대한 MBR을 계산합니다.
2. 가지를 잘라냅니다: 루트에서 시작하여 쿼리 MBR을 각 내부 노드와 비교합니다. MBR이 쿼리 MBR과 교차하지 않는 분기는 건너뜁니다.
3. 후보를 수집합니다: 교차하는 분기로 내려가서 후보 리프 노드를 수집합니다.
4. 정확한 매칭 수행: 각 후보에 대해 공간 술어를 실행하여 정확한 결과를 얻습니다.
RTREE가 빠른 이유
RTREE는 몇 가지 주요 설계 기능으로 인해 공간 필터링에서 강력한 성능을 제공합니다:
모든 노드가 MBR을 저장: 각 노드는 하위 트리에 있는 모든 지오메트리의 면적을 근사화합니다. 따라서 쿼리 중에 분기를 탐색할지 여부를 쉽게 결정할 수 있습니다.
빠른 가지 치기: MBR이 쿼리 영역과 교차하는 하위 트리만 탐색합니다. 관련 없는 영역은 완전히 무시됩니다.
데이터 크기에 따라 확장: RTREE는 O(log N) 시간 내에 공간 검색을 지원하므로 데이터 세트가 확장되어도 빠른 쿼리가 가능합니다.
Boost.Geometry 구현: Milvus는 최적화된 지오메트리 알고리즘과 동시 워크로드에 적합한 스레드 안전 RTREE 구현을 제공하는 널리 사용되는 C++ 라이브러리인 Boost.Geometry를 사용해 RTREE 인덱스를 구축합니다.
지원되는 지오메트리 연산자
Milvus는 기하학적 관계를 기반으로 엔티티를 필터링하고 검색할 수 있는 공간 연산자 집합을 제공합니다. 이러한 연산자는 공간에서 개체가 서로 어떻게 연관되어 있는지 이해해야 하는 워크로드에 필수적입니다.
다음 표에는 현재 Milvus에서 사용할 수 있는 지오메트리 연산 자가 나와 있습니다.
| 연산자 | 설명 |
|---|---|
| st_intersects(A, B) | 지오메트리 A와 B가 공통점을 하나 이상 공유하면 TRUE를 반환합니다. |
| st_contains(A, B) | 도형 A가 도형 B를 완전히 포함(경계선 제외)하면 TRUE를 반환합니다. |
| st_within(A, B) | 도형 A가 도형 B 안에 완전히 포함될 경우 TRUE를 반환합니다. 이것은 st_contains(A, B)의 역입니다. |
| st_covers(A, B) | 도형 A가 도형 B(경계 포함)를 포함하면 TRUE를 반환합니다. |
| st_touches(A, B) | 도형 A와 B가 경계에서 접촉하지만 내부적으로 교차하지 않으면 TRUE를 반환합니다. |
| st_equals(A, B) | 도형 A와 B가 공간적으로 동일하면 TRUE를 반환합니다. |
| st_overlaps(A, B) | 도형 A와 B가 부분적으로 겹치지만 어느 쪽도 다른 쪽을 완전히 포함하지 않는 경우 TRUE를 반환합니다. |
| st_dwithin(A, B, d) | A와 B 사이의 거리가 d보다 작으면 TRUE를 반환합니다. |
위치정보 인덱스와 벡터 인덱스를 결합하는 방법
밀버스는 지오메트리 지원과 RTREE 인덱스를 통해 단일 워크플로우에서 지리적 공간 필터링과 벡터 유사성 검색을 결합할 수 있습니다. 이 프로세스는 두 단계로 진행됩니다:
1. RTREE를 사용해 위치별로 필터링: Milvus는 먼저 RTREE 인덱스를 사용해 지정된 지리적 범위(예: "2km 이내") 내의 엔티티로 검색 범위를 좁힙니다.
2. 벡터 검색을 사용하여 의미별로 순위를 매깁니다: 벡터 인덱스는 나머지 후보 중에서 임베딩 유사도를 기준으로 가장 유사한 상위 N개의 결과를 선택합니다.
지리적 벡터 검색의 실제 사용 사례
1. 배달 서비스: 더 스마트한 위치 인식 추천
DoorDash나 Uber Eats와 같은 플랫폼은 매일 수억 건의 요청을 처리합니다. 사용자가 앱을 여는 순간, 시스템은 사용자의 위치, 시간대, 취향, 예상 배달 시간, 실시간 교통량, 택배 가능 여부 등을 바탕으로 현재 가장 적합한 레스토랑이나 택배를 결정해야 합니다.
기존에는 지리공간 데이터베이스와 별도의 추천 엔진을 쿼리한 후 여러 차례의 필터링과 순위 재지정을 거쳐야 했습니다. Milvus는 지리적 위치 인덱스를 통해 이러한 워크플로를 크게 간소화합니다:
통합 스토리지 - 레스토랑 좌표, 택배 위치, 사용자 선호도 임베딩이 모두 하나의 시스템에 저장됩니다.
공동 검색 - 먼저 공간 필터(예: 3km 이내 레스토랑)를 적용한 다음 벡터 검색을 사용해 유사성, 취향 선호도 또는 품질에 따라 순위를 매깁니다.
동적 의사 결정 - 실시간 택배 분포와 교통 신호를 결합하여 가장 가까운, 가장 적합한 택배를 신속하게 배정합니다.
이러한 통합 접근 방식을 통해 플랫폼은 단일 쿼리에서 공간 및 의미론적 추론을 수행할 수 있습니다. 예를 들어 사용자가 '카레라이스'를 검색하면 Milvus는 의미론적으로 연관성이 높은 레스토랑을 검색하여 근처에 있고, 빠르게 배달되며, 사용자의 과거 취향 프로필과 일치하는 레스토랑의 우선순위를 지정합니다.
2. 자율 주행: 더욱 지능적인 의사 결정
자율 주행에서 지리공간 인덱싱은 인식, 위치 파악, 의사 결정의 기본입니다. 차량은 단 몇 밀리초 내에 고화질 지도에 지속적으로 자신을 정렬하고 장애물을 감지하며 안전한 궤적을 계획해야 합니다.
Milvus를 사용하면 지오메트리 유형과 RTREE 인덱스를 통해 다음과 같은 풍부한 공간 구조를 저장하고 쿼리할 수 있습니다:
도로 경계 (라인스트링)
교통 규제 구역 (폴리곤)
감지된 장애물 (점)
이러한 구조는 효율적으로 색인화할 수 있어 지리공간 데이터가 AI 의사 결정 루프에 직접 참여할 수 있습니다. 예를 들어, 자율주행 차량은 RTREE 공간 술어를 통해 현재 좌표가 특정 차선 내에 있는지 또는 제한 구역과 교차하는지 여부를 빠르게 판단할 수 있습니다.
현재 주행 환경을 캡처하는 장면 임베딩과 같이 인식 시스템에서 생성된 벡터 임베딩과 결합하면 Milvus는 반경 50m 내에서 현재와 유사한 과거 주행 시나리오를 검색하는 등 보다 고급 쿼리를 지원할 수 있습니다. 이를 통해 모델은 환경을 더 빠르게 해석하고 더 나은 의사 결정을 내릴 수 있습니다.
결론
지리적 위치는 위도와 경도 그 이상입니다. 위치에 민감한 애플리케이션에서는 이벤트가 발생하는 위치, 엔터티가 공간적으로 어떻게 연관되는지, 이러한 관계가 시스템 동작을 어떻게 형성하는지에 대한 필수적인 컨텍스트를 제공합니다. 지리공간 데이터를 머신 러닝 모델의 시맨틱 신호와 결합하면 공간 데이터와 벡터 데이터를 개별적으로 처리할 때는 표현하기 어렵거나 실행하기 비효율적인 더 풍부한 종류의 쿼리를 가능하게 합니다.
지오메트리 필드와 RTREE 인덱스의 도입으로 Milvus는 벡터 유사성 검색과 공간 필터링을 단일 쿼리 엔진으로 통합했습니다. 이를 통해 애플리케이션은 벡터, 지리공간 데이터, 시간에 걸쳐 공동 검색을 수행하여 공간 인식 추천 시스템, 멀티모달 위치 기반 검색, 지역 또는 경로 제약 분석과 같은 사용 사례를 지원할 수 있습니다. 더 중요한 것은 특수 시스템 간에 데이터를 이동하는 다단계 파이프라인을 제거하여 아키텍처의 복잡성을 줄인다는 점입니다.
AI 시스템이 실제 의사 결정에 점점 더 가까워짐에 따라, 어떤 콘텐츠가 관련성이 있는지를 파악하는 것은 점점 더 중요한 시점과 적용 대상과 결합되어야 할 것입니다. Milvus는 이러한 종류의 공간 의미론적 워크로드를 위한 빌딩 블록을 표현력이 뛰어나면서도 대규모 운영에 실용적인 방식으로 제공합니다.
지오메트리 필드와 RTREE 인덱스에 대한 자세한 내용은 아래 설명서를 참조하세요:
최신 Milvus의 기능에 대해 궁금한 점이 있거나 자세히 알아보고 싶으신가요? Discord 채널에 참여하거나 GitHub에 이슈를 제출하세요. 또한 Milvus 오피스 아워를 통해 20분간의 일대일 세션을 예약하여 인사이트, 안내 및 질문에 대한 답변을 얻을 수도 있습니다.
Milvus 2.6 기능에 대해 자세히 알아보기
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



