In 파트 1에서 로컬 인덱스와 글로벌 인덱스의 인덱싱 차이점을 다루었습니다. 또한 카우치베이스 서버가 글로벌 보조 인덱스를 위해 제공하는 두 가지 스토리지 옵션, 즉 표준 GSI와 메모리 최적화 GSI에 대해서도 설명했습니다. 이제 메모리 최적화된 GSI에 대해 자세히 알아보겠습니다;
메모리 최적화 글로벌 보조 인덱스란 무엇인가요?
In 글로벌 인덱스와 로컬 인덱스를 다룬 이전 게시물에서 글로벌 인덱스가 로컬 인덱스에 비해 쿼리 지연 시간을 줄이는 방법에 대해 광범위하게 이야기했습니다. 또한 이러한 글로벌 인덱스를 유지하는 것이 얼마나 어려운 일인지도 확인했습니다: 글로벌 인덱스는 대규모 노드 클러스터를 따라잡기 위해 노드의 하위 집합이 필요합니다. 카우치베이스 서버의 경우, 클러스터의 경우 초당 10~100만 건의 작업이 표준입니다.
도전 과제 거기서 끝나지 않습니다! 배열 인덱스와 같은 경우에는 전역 인덱싱이 훨씬 더 어려울 수 있습니다(배열 인덱스에 대해 자세히 읽어보세요. 여기). 배열 인덱스는 배열의 요소를 인덱싱합니다. 임베디드 배열과 배열이 있는 문서에 대한 돌연변이는 문서를 증폭시킵니다. 를 많은 인덱스 쓰기에 적용합니다. 메모리 최적화 글로벌 보조 인덱스(MOI)는 이러한 가장 까다로운 애플리케이션의 문제를 해결하기 위해 특별히 설계되었습니다. 여행 일정, 스코어보드 그리고 사기 탐지 - 문제 없습니다!
MOI는 표준 GSI에 비해 데이터의 빠른 변경에도 10배 이상의 지연 시간과 처리량을 제공할 수 있으며, 그 방법은 다음과 같습니다:
- 인덱싱을 위한 잠금 없는 처리를 통해 인덱스로 들어오는 변이를 유지할 때 대규모 동시성을 확보할 수 있습니다.
- 스킵리스트 구조는 B+트리 인덱스와 달리 인메모리 스토리지를 최적화합니다.
- 인덱스를 메모리 저장소에 강제로 저장하면 MOI는 인덱스 저장을 위해 디스크 속도로 실행되지 않고 복구용으로만 디스크에 일반 스냅샷을 찍습니다.
메모리 최적화 대 표준 글로벌 보조 인덱스 비교
메모리 최적화 인덱스는 4.5 버전에서 GSI를 위한 추가 저장소 옵션으로 추가되었습니다. 표준 글로벌 보조 인덱스는 버전 4.0부터 존재해 왔습니다. 관리자는 메모리에 맞지 않는 인덱스에 대해 아래에 ForestDB를 사용하는 표준 GSI 스토리지로 GSI를 구성하거나 더 빠른 인메모리 인덱싱 및 쿼리를 위해 메모리 최적화 GSI를 선택할 수 있습니다.
일반적으로 인덱스는 쿼리 지연 시간을 줄이기 위해 생성되며, 인덱스를 메모리에 보관하면 지연 시간이 훨씬 더 줄어듭니다! MOI는 지연 시간을 낮추기 위해 설계되었으며 가장 높은 처리량 요구 사항과 MOI는 인덱스를 RAM에 보관하기 위해 대용량 메모리를 갖춘 시스템이 필요합니다. 표준 GSI는 메모리가 부족하면 디스크로 유출될 수 있습니다. IO 하위 시스템 성능은 다음과 같이 됩니다. 매우 표준 GSI가 잘 작동하기 위해서는 중요한 요소입니다. 그러나 표준 GSI와 달리 hMOI에는 고성능 IO 하위 시스템이 필요하지 않습니다. MOI는 인메모리 속도로 실행되므로 표준 GSI에 비해 MOI의 초기 및 지속적인 인덱싱 시간이 더 빠릅니다.
다음 표에는 표준 GSI와 메모리 최적화 GSI의 주요 차이점이 요약되어 있습니다;
메모리에 최적화된 GSI 생성 및 관리
스토어 유형에 관계없이 CREATE INDEX는 Couchbase Server에서 글로벌 보조 인덱스를 생성하는 방법입니다. 실제로 CREATE INDEX 문에는 MOI 관련 옵션이 없습니다. 일반적으로 고가용성 및 파티셔닝 메커니즘은 표준 및 메모리 최적화 GSI에서 동일하게 유지됩니다. 그러나 MOI는 인덱스 배치 및 인덱스 관리에 도움이 되는 추가 통계 및 알림이 함께 제공된다는 점에 유의해야 합니다.
카우치베이스 서버 클러스터에 메모리 최적화 인덱스 배치하기
메모리 최적화 인덱스는 다음 두 가지 중요한 통계를 제공하여 NODES 절이 있는 MOI의 배치를 안내할 수 있습니다. 인덱스 생성.
- 최대 인덱스 RAM 사용량 %: 클러스터와 각 노드에서 사용된 최대 램 할당량을 실시간으로 분, 시간, 일, 주 등의 기록과 함께 백분율(%) 단위로 보고합니다.
- 남은 인덱스 RAM: 클러스터의 여유 인덱스 RAM 할당량을 총계로, 그리고 각 노드별로 분, 시간, 일, 주 등의 기록과 함께 실시간으로 보고합니다.
다음 메모리 최적화 인덱스를 배치할 때 노드의 메모리 가용성을 살펴보고 메모리 크기에 따라 인덱스 기반을 배치할 수 있습니다.
메모리 최적화 인덱스가 포함된 알림
메모리가 부족하면 MOI를 사용한 인덱싱이 일시 중지되므로 관리자는 노드가 RAM 할당량에 근접하고 있는지 시각적으로 확인할 수 있어야 합니다. 위에서 설명한 최대 인덱스 RAM 사용량 % 통계는 바로 이를 위해 만들어졌습니다. 대화형 사용자에게 경고하거나 관리자에게 이메일을 통해 알려주는 알림도 있습니다. 알림 "전체 인덱서 RAM 할당량에 접근 중"는 클러스터의 어느 노드에서든 75% 이상의 인덱서 RAM 할당량이 소진되면 발생합니다. 웹 콘솔의 설정에서 알림을 구성할 수 있습니다.
기술 문서에서 MOI와 GSI 전반에 대한 자세한 정보를 확인할 수 있습니다. GSI의 저장 모드를 선택하는 방법과 인덱스 서비스 및 GSI를 관리하는 방법에 대한 자세한 내용은 관리자 가이드에서 확인할 수 있습니다. 여기 인덱싱 서비스 및 인덱서에 대한 아키텍처 가이드를 찾아보세요. 여기.
In 파트 III 시리즈에서는 표준 글로벌 인덱스가 포함된 새로운 순환 쓰기 모드와 순환 쓰기 모드가 Couchbase Server 4.5에서 데이터를 인덱싱할 때 IO 성능을 향상시키는 방법에 대해 설명합니다.
행복한 해킹
-Cihan