타임스탬프
이 주제에서는 타임스탬프의 개념을 설명하고 Milvus 벡터 데이터베이스의 네 가지 주요 타임스탬프 관련 매개변수를 소개합니다.
개요
Milvus는 비정형 데이터에서 변환된 벡터를 검색하고 쿼리할 수 있는 벡터 데이터베이스입니다. 데이터 삽입 및 삭제를 포함한 데이터 조작 언어(DML) 작업을 수행할 때 Milvus는 작업과 관련된 엔티티에 타임스탬프를 할당합니다. 따라서 Milvus의 모든 엔티티에는 타임스탬프 속성이 있습니다. 그리고 동일한 DML 작업의 엔티티 일괄 처리에는 동일한 타임스탬프 값이 공유됩니다.
타임스탬프 매개변수
Milvus에서 벡터 유사성 검색이나 쿼리를 수행할 때 몇 가지 타임스탬프 관련 매개변수가 관련됩니다.
Guarantee_timestamp
Service_timestamp
Graceful_time
Travel_timestamp
Guarantee_timestamp
Guarantee_timestamp
는 벡터 유사도 검색 또는 쿼리를 수행할 때 Guarantee_timestamp
이전의 DML 작업에 의한 모든 데이터 업데이트가 표시되도록 하는 데 사용되는 타임스탬프 유형입니다. 예를 들어 오후 3시에 데이터 배치를 삽입하고 오후 5시에 다른 배치를 삽입한 경우, 벡터 유사도 검색 중에 Guarantee_timestamp
값이 오후 6시로 설정됩니다. 즉, 오후 3시와 오후 5시에 각각 삽입된 두 개의 데이터 배치가 검색에 포함되어야 합니다.
Guarantee_timestamp
을 설정하지 않으면 Milvus는 검색 요청이 이루어진 시점을 자동으로 가져옵니다. 따라서 검색 전에 DML 작업에 의해 모든 데이터가 업데이트된 데이터 뷰에서 검색이 수행됩니다.
Milvus 내부의 TSO를 이해하는 수고를 덜기 위해 사용자는 Guarantee_timestamp
파라미터를 직접 구성할 필요가 없습니다. 일관성 수준만 선택하면 Milvus가 Guarantee_timestamp
파라미터를 자동으로 처리합니다. 각 일관성 수준은 특정 Guarantee_timestamp
값에 해당합니다.
보장_타임스탬프.
예시
위 그림과 같이 Guarantee_timestamp
값은 2021-08-26T18:15:00
으로 설정되어 있습니다(단순화를 위해 이 예제에서 타임스탬프는 실제 시간으로 표시됨). 검색 또는 쿼리를 수행하면 2021-08-26T18:15:00 이전의 모든 데이터가 검색 또는 쿼리됩니다.
Service_timestamp
Service_timestamp
는 Milvus의 쿼리 노드에서 자동으로 생성 및 관리하는 타임스탬프 유형입니다. 쿼리 노드에서 어떤 DML 작업이 실행되었는지를 나타내는 데 사용됩니다.
쿼리 노드가 관리하는 데이터는 두 가지 유형으로 분류할 수 있습니다:
기록 데이터(또는 배치 데이터라고도 함)
증분 데이터(또는 스트리밍 데이터라고도 함).
Milvus에서는 검색이나 쿼리를 수행하기 전에 데이터를 로드해야 합니다. 따라서 컬렉션의 배치 데이터는 검색 또는 쿼리 요청이 이루어지기 전에 쿼리 노드에 의해 로드됩니다. 그러나 스트리밍 데이터는 즉석에서 Milvus에 삽입되거나 삭제되므로 쿼리 노드는 DML 작업과 검색 또는 쿼리 요청에 대한 타임라인을 유지해야 합니다. 따라서 쿼리 노드는 Service_timestamp
을 사용하여 이러한 타임라인을 유지합니다. Service_timestamp
은 특정 데이터가 표시되는 시점으로 볼 수 있으며, 쿼리 노드는 Service_timestamp
이전의 모든 DML 작업이 완료되었는지 확인할 수 있습니다.
들어오는 검색 또는 쿼리 요청이 있을 때 쿼리 노드는 Service_timestamp
와 Guarantee_timestamp
의 값을 비교합니다. 주로 두 가지 시나리오가 있습니다.
서비스_타임스탬프.
시나리오 1: Service_timestamp
>= Guarantee_timestamp
그림 1과 같이 Guarantee_timestamp
의 값은 2021-08-26T18:15:00
으로 설정되어 있습니다. Service_timestamp
의 값이 2021-08-26T18:15:01
로 증가하면 Guarantee_timestamp
로 표시된 시간 이전의 DML 작업을 포함하여 이 시점 이전의 모든 DML 작업이 쿼리 노드에서 실행되고 완료된다는 의미입니다. 결과적으로 검색 또는 쿼리 요청이 즉시 실행될 수 있습니다.
시나리오 2: Service_timestamp
< Guarantee_timestamp
그림 2에서와 같이 Guarantee_timestamp
의 값은 2021-08-26T18:15:00
으로 설정되어 있고 Service_timestamp
의 현재 값은 2021-08-26T18:14:55
입니다. 즉, 2021-08-26T18:14:55
이전의 DML 작업만 실행되고 완료되며, 이 시점 이후이지만 Guarantee_timestamp
이전의 DML 작업 중 일부는 완료되지 않은 상태로 남습니다. 이 시점에서 검색 또는 쿼리가 실행되면 필요한 데이터 중 일부는 아직 보이지 않고 사용할 수 없어 검색 또는 쿼리 결과의 정확도에 심각한 영향을 미칩니다. 따라서 쿼리 노드는 guarantee_timestamp
이전의 DML 작업이 완료될 때까지(즉, Service_timestamp
>= Guarantee_timestamp
)까지 검색 또는 쿼리 요청을 보류해야 합니다.
Graceful_time
엄밀히 말하면 Graceful_time
은 타임스탬프가 아니라 기간(예: 100ms)을 의미합니다. 그러나 Graceful_time
은 Guarantee_timestamp
및 Service_timestamp
과 밀접한 관련이 있기 때문에 언급할 가치가 있습니다. Graceful_time
은 Milvus 구성 파일에서 구성 가능한 매개변수입니다. 특정 데이터가 표시되기 전에 허용될 수 있는 기간을 나타내는 데 사용됩니다. 즉, Graceful_time
동안 완료되지 않은 DML 작업은 허용될 수 있습니다.
들어오는 검색 또는 쿼리 요청이 있을 때 두 가지 시나리오가 있을 수 있습니다.
Graceful_Time.
시나리오 1: Service_timestamp
+ Graceful_time
>= Guarantee_timestamp
그림 1과 같이 Guarantee_timestamp
의 값은 2021-08-26T18:15:01
으로, Graceful_time
은 2s
으로 설정됩니다. Service_timestamp
의 값은 2021-08-26T18:15:00
으로 증가합니다. Service_timestamp
의 값은 여전히 Guarantee_timestamp
보다 작고 2021-08-26T18:15:01
이전의 모든 DML 작업이 완료되지는 않지만, Graceful_time
의 값에 표시된 대로 2초의 데이터 보이지 않는 기간이 허용되므로 들어오는 검색 또는 조회 요청을 즉시 실행할 수 있습니다.
시나리오 2: Service_timestamp
+ Graceful_time
< Guarantee_timestamp
그림 2에서와 같이 Guarantee_timestamp
의 값은 2021-08-26T18:15:01
으로, Graceful_time
은 2s
으로 설정됩니다. 현재 Service_timestamp
의 값은 2021-08-26T18:14:54
에 불과합니다. 즉, 예상되는 DML 작업이 아직 완료되지 않았으며 2초의 유예 시간이 주어지더라도 데이터 비가시성은 여전히 견딜 수 없는 수준입니다. 따라서 쿼리 노드는 특정 DML 요청이 완료될 때까지(즉, Service_timestamp
+ Graceful_time
>= Guarantee_timestamp
) 검색 또는 쿼리 요청을 미뤄야 합니다.
다음 단계
- 보증 타임스탬프를 통해 Milvus에서 일관성을 조정하는 방법 알아보기