🚀 완전 관리형 Milvus인 Zilliz Cloud를 무료로 체험해보세요—10배 더 빠른 성능을 경험하세요! 지금 체험하기>>

milvus-logo
LFAI
  • Home
  • Blog
  • Milvus 벡터 데이터베이스의 일관성 수준 이해하기

Milvus 벡터 데이터베이스의 일관성 수준 이해하기

  • Engineering
August 29, 2022
Chenglong Li

Cover_image Cover_image

이 글은 Chenglong Li가 작성하고 Angela Ni가 번역했습니다.

Mlivus 벡터 데이터베이스에서 삭제한 데이터가 검색 결과에 계속 나타나는 이유가 궁금하신 적이 있으신가요?

가장 큰 이유는 애플리케이션에 적절한 일관성 수준을 설정하지 않았기 때문일 가능성이 높습니다. 분산형 벡터 데이터베이스의 일관성 수준은 시스템에서 특정 데이터 쓰기를 읽을 수 있는 시점을 결정하기 때문에 매우 중요합니다.

따라서 이 문서에서는 일관성의 개념을 명확히 이해하고 Milvus 벡터 데이터베이스에서 지원하는 일관성 수준을 자세히 살펴봅니다.

이동하기:

일관성이란 무엇인가요?

시작하기 전에 먼저 "일관성"이라는 단어는 컴퓨팅 업계에서 과부하가 걸린 용어이므로 이 글에서 일관성의 의미를 명확히 할 필요가 있습니다. 분산 데이터베이스에서 일관성이란 특정 시간에 데이터를 쓰거나 읽을 때 모든 노드 또는 복제본이 동일한 데이터 보기를 갖도록 보장하는 속성을 의미합니다. 따라서 여기서는 CAP 정리에서와 같이 일관성에 대해 이야기하고 있습니다.

현대의 대규모 온라인 비즈니스에 서비스를 제공하기 위해 일반적으로 여러 복제본을 채택합니다. 예를 들어, 온라인 전자상거래 업체인 Amazon은 시스템 충돌이나 장애 발생 시 높은 시스템 가용성을 보장하기 위해 여러 데이터 센터, 지역, 심지어 국가에 걸쳐 주문 또는 SKU 데이터를 복제합니다. 이로 인해 여러 복제본에 걸친 데이터 일관성이라는 시스템 문제가 발생합니다. 일관성이 없으면 Amazon 카트에서 삭제된 품목이 다시 나타나 사용자 경험이 매우 나빠질 가능성이 매우 높습니다.

따라서 애플리케이션마다 서로 다른 데이터 일관성 수준이 필요합니다. 다행히도 AI용 데이터베이스인 Milvus는 일관성 수준의 유연성을 제공하며, 애플리케이션에 가장 적합한 일관성 수준을 설정할 수 있습니다.

Milvus 벡터 데이터베이스의 일관성 수준

일관성 수준이라는 개념은 Milvus 2.0 출시와 함께 처음 도입되었습니다. Milvus 1.0 버전은 분산형 벡터 데이터베이스가 아니었기 때문에 당시에는 일관성 수준을 조정할 수 없었습니다. Milvus 1.0은 매초마다 데이터를 플러시하므로 새로운 데이터가 삽입되면 거의 즉시 볼 수 있으며, 벡터 유사성 검색이나 쿼리 요청이 들어오는 정확한 시점에 가장 업데이트된 데이터 뷰를 읽습니다.

그러나 Milvus는 2.0 버전에서 리팩터링되었으며, Milvus 2.0은 퍼브-서브 메커니즘에 기반한 분산형 벡터 데이터베이스입니다. PACELC 정리에 따르면 분산 시스템은 일관성, 가용성, 지연 시간 사이에서 절충점을 찾아야 합니다. 또한 시나리오에 따라 서로 다른 수준의 일관성이 필요합니다. 따라서 Milvus 2.0에는 일관성 개념이 도입되어 일관성 수준 조정을 지원합니다.

Milvus 벡터 데이터베이스의 4가지 일관성 수준

Milvus는 네 가지 수준의 일관성을 지원합니다: 강함, 경계가 있는 부실함, 세션, 최종. 그리고 Milvus 사용자는 컬렉션을 만들거나 벡터 유사성 검색 또는 쿼리를 수행할 때 일관성 수준을 지정할 수 있습니다. 이 섹션에서는 이 네 가지 일관성 수준이 어떻게 다른지, 그리고 어떤 시나리오에 가장 적합한지 계속 설명합니다.

강함

강함은 가장 높고 가장 엄격한 일관성 수준입니다. 사용자가 최신 버전의 데이터를 읽을 수 있도록 보장합니다.

Strong 강함

PACELC 정리에 따르면 일관성 수준을 강함으로 설정하면 지연 시간이 증가합니다. 따라서 테스트 결과의 정확성을 보장하기 위해 기능 테스트 중에 강한 일관성을 선택하는 것이 좋습니다. 또한 강력한 일관성은 검색 속도를 희생하는 대신 데이터 일관성에 대한 엄격한 요구가 있는 애플리케이션에 가장 적합합니다. 주문 결제 및 청구를 처리하는 온라인 금융 시스템을 예로 들 수 있습니다.

바운드 스탤런트

이름에서 알 수 있듯이 경계부실성은 특정 기간 동안 데이터 불일치를 허용합니다. 그러나 일반적으로 데이터는 해당 기간 외에는 항상 전 세계적으로 일관성을 유지합니다.

Bounded_staleness Bounded_staleness

바운드 스탤렌니스는 검색 지연 시간을 제어해야 하고 산발적인 데이터 보이지 않음을 허용할 수 있는 시나리오에 적합합니다. 예를 들어, 동영상 추천 엔진과 같은 추천 시스템에서 가끔씩 발생하는 데이터 숨김은 전체 회상률에 미치는 영향은 매우 작지만 추천 시스템의 성능을 크게 향상시킬 수 있습니다. 온라인 주문 상태를 추적하는 앱을 예로 들 수 있습니다.

세션

세션은 모든 데이터 쓰기가 동일한 세션 동안 읽기에서 즉시 인식될 수 있도록 합니다. 즉, 하나의 클라이언트를 통해 데이터를 쓰면 새로 삽입된 데이터를 즉시 검색할 수 있습니다.

Session 세션

동일한 세션에서 데이터 일관성에 대한 요구가 높은 시나리오에서는 일관성 수준으로 세션을 선택하는 것이 좋습니다. 예를 들어 라이브러리 시스템에서 도서 항목의 데이터를 삭제하고 삭제를 확인한 후 페이지를 새로고침(다른 세션)하면 해당 도서가 더 이상 검색 결과에 표시되지 않아야 합니다.

최종

읽기 및 쓰기 순서는 보장되지 않으며, 더 이상의 쓰기 작업이 수행되지 않으면 복제본은 결국 동일한 상태로 수렴합니다. 최종 일관성에서는 복제본이 최신 업데이트된 값으로 읽기 요청에 대해 작업을 시작합니다. 최종 일관성은 네 가지 수준 중 가장 약한 수준입니다.

Eventual 최종

그러나 PACELC 정리에 따르면 일관성을 희생하면 검색 지연 시간을 엄청나게 단축할 수 있습니다. 따라서 최종 일관성은 데이터 일관성에 대한 요구는 높지 않지만 매우 빠른 검색 성능이 필요한 시나리오에 가장 적합합니다. 예를 들어 최종 일관성을 사용하여 Amazon 제품에 대한 리뷰 및 평점을 검색하는 경우를 들 수 있습니다.

Endnote

이 글의 서두에서 제기한 질문으로 돌아가서, 사용자가 적절한 일관성 수준을 선택하지 않았기 때문에 삭제된 데이터가 여전히 검색 결과로 반환됩니다. 일관성 수준의 기본값은 Milvus 벡터 데이터베이스에서 경계 부실(Bounded)입니다. 따라서 데이터 읽기가 지연될 수 있으며 유사성 검색 또는 쿼리 중에 사용자가 삭제 작업을 수행하기 전에 Milvus가 데이터 보기를 읽을 수 있습니다. 하지만 이 문제는 간단하게 해결할 수 있습니다. 컬렉션을 만들거나 벡터 유사도 검색 또는 쿼리를 수행할 때 일관성 수준을 조정하기만 하면 됩니다. 간단하죠!

다음 포스트에서는 Milvus 벡터 데이터베이스가 어떻게 다양한 수준의 일관성을 달성하는지에 대한 메커니즘을 공개하고 설명해 드리겠습니다. 기대해 주세요!

다음 단계

Milvus 2.1의 공식 출시와 함께 새로운 기능을 소개하는 블로그 시리즈를 준비했습니다. 이 블로그 시리즈에서 자세히 읽어보세요:

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

계속 읽기