카우치베이스 데이터베이스 플랫폼은 두 가지 스토리지 메커니즘을 지원합니다: 기본값인 Couchstore와 최근에 출시된 엔진인 Magma입니다. 두 가지 모두 다양한 시나리오에서 이점을 제공합니다. 이 블로그 게시물에서는 새로운 Magma 스토리지 엔진에 대한 간략한 개요를 제공합니다, 에서는 각 엔진의 비교를 제공하고 성능 벤치마크.
카우치스토어는 대용량 데이터 세트, 특히 메모리를 가득 채울 수 있는 데이터 세트의 고성능에 최적화된 성숙한 스토리지 엔진입니다. 카우치스토어의 최소 버킷 크기는 100MB입니다. 데이터 압축이 주요 결정 요인이 아닌 캐싱 사용 사례 및 상황에 이상적입니다.
마그마는 메모리에 맞지 않는 매우 큰 데이터 세트에서도 고성능을 발휘하도록 설계된 새로운 스토리지 엔진입니다. 디스크 액세스가 가장 중요한 사용 사례에 탁월한 성능을 발휘합니다. Magma는 매우 큰 데이터 세트에서도 매우 적은 양의 메모리로 실행되도록 최적화되어 있습니다. 마그마는 다음과 같은 용도로 사용할 때 정말 빛을 발합니다. 사용 가능한 메모리에 맞지 않고 최대 데이터 압축이 필요한 데이터 세트.
아래는 각 저장소 메커니즘을 요약한 비교표입니다.
카우치스토어와 마그마 비교
기준 | 카우치스토어 | 마그마 |
최소 버킷 메모리 할당량 | 100MB | 1GB |
최소 메모리 대 데이터 비율 | 10% | 1% |
노드당 최대 데이터 | 3TB | 10TB |
데이터 크기 최적화 | 작업 데이터 세트가 메모리에 들어갈 수 있을 때 가장 좋습니다. | 다음과 같은 경우에 가장 좋습니다. 작업 세트가 사용 가능한 메모리보다 훨씬 크고 디스크 액세스 속도만 필요한 경우 |
저장 및 액세스 | 최대 1TB까지 데이터 액세스 | 수 테라바이트의 데이터 저장 및 액세스 |
하드웨어 | 저사양 하드웨어에서 실행 가능 | 고품질 하드웨어가 선호됩니다. |
지원되는 서비스 | 전체 텍스트 검색, 이벤트 및 분석을 포함한 모든 서비스를 사용할 수 있습니다. | 전체 텍스트 검색, 이벤트, 애널리틱스 등 모든 서비스는 7.1.2 GA 릴리스에서 사용할 수 있습니다. |
데이터 지속성 | 대부분의 데이터는 메모리 캐시에서 액세스됩니다. | 애플리케이션에는 대량의 영구적이고 내구성 있는 데이터가 필요합니다. |
사용 사례 | 사용 사례는 주로 메모리 액세스가 필요합니다. | 사용 사례는 주로 디스크 액세스가 필요합니다. |
마그마 개요
Magma는 카우치베이스 서버의 차세대 문서 스토리지 엔진입니다. 각 클러스터 노드에서 데이터 밀도와 쓰기 성능을 모두 개선하는 것을 목표로 설계되었습니다. 인덱스와 문서 데이터를 분리하여 쓰기 증폭(WA)을 최소화함으로써 이러한 목표를 달성합니다. 쓰기 증폭은 불변 데이터와 같은 요인으로 인해 쓰기 횟수가 증가하는 파일 스토리지에 데이터를 쓰는 것과 관련이 있습니다. 마그마에는 공간을 유지하고 높은 데이터 밀도와 낮은 메모리 요구 사항을 허용하기 위한 증분 압축 방식도 포함되어 있습니다. 쓰기 증폭을 낮추면 쓰기 처리량이 증가하고 쓰기-지우기 주기가 줄어들어 SSD의 기대 수명이 연장됩니다.
마그마 프로젝트의 다른 디자인 목표에는 다음이 포함됩니다:
확장 가능한 동시 압축 - 전체 데이터베이스 압축은 비용이 많이 드는 작업입니다. 고밀도 데이터베이스를 관리하려면 공간을 확보하기 위해 소규모로 동시에 점진적으로 압축을 수행해야 합니다.
SSD(솔리드 스테이트 드라이브) 최적화 - 무작위 I/O는 포인트 조회 작업 중에만 발생하도록 최소화했습니다. 순차적 읽기 및 쓰기 I/O 액세스 패턴은 SSD의 전체 대역폭을 활용하기 위해 활용됩니다.
낮은 메모리 사용량 - 고밀도 데이터는 읽기 및 쓰기 캐싱의 가능성을 감소시킵니다. 따라서 Magma는 작은 메모리 공간을 활용하도록 최적화되어 있습니다.
가비지 컬렉션 - 마그마에는 로그 구조화된 객체 저장소에서 조각화를 추정하고 디스크 조각화를 정확하게 계산하는 방법이 포함되어 있습니다. 이 방법은 로그 세그먼트당 가비지 크기를 계산하는 데 사용되며, 조각화가 임계값인 50%에 도달하면 압축을 트리거합니다.
마그마 아키텍처의 핵심 중 하나는 추가 전용 세그먼트 로그에 문서를 저장하는 로그 구조의 객체 저장소입니다. 로그 구조 저장소는 seqno(시퀀스 번호)로 문서를 쿼리할 수 있는 인덱스를 유지합니다. 객체 저장소에는 들어오는 쓰기를 받아들이기 위해 꼬리가 있는 증가하는 로그를 사용해 순차적으로 배열된 로그 세그먼트 파일이 포함되어 있습니다(아래 Magma 객체 저장소 아키텍처 다이어그램 참조). 백그라운드 스레드는 각 문서가 고유한 세그노를 수신하는 테일 로그에 문서 변형을 추가합니다.

마그마 오브젝트 스토어 아키텍처
로그에는 동일한 키를 가진 변경 불가능한 문서 버전이 여러 개 포함될 수 있지만, 새 버전이 추가되면 이전 문서 버전은 오래된 버전이 됩니다. 읽기 작업은 항상 최신 버전을 읽으므로 키 조회가 수행되면 최신 버전의 문서가 반환됩니다. 결국 오래된 레코드는 스토리지에서 제거되고 별도의 가비지 컬렉션 프로세스가 공간을 확보하는 데 사용됩니다.
성능 요약
Magma는 RocksDB와 Couchstore를 대상으로 성능 테스트를 거쳤습니다. 이 평가는 메모리에 담기에는 너무 큰 데이터가 포함된 다양한 YCSB(Yahoo! Cloud Serving Benchmark) 워크로드의 처리량과 쓰기 및 공간 증폭에 중점을 두었습니다. 두 차례의 테스트에서 얻은 결론은 다음과 같습니다:
1라운드
-
-
- Magma는 RocksDB보다 1.77배 빠르며 쓰기 증폭이 3.38배 적습니다.
- 마그마는 카우치스토어보다 36배 빠르고 쓰기 증폭이 5배 적습니다.
-
2라운드
-
-
- Magma는 RocksDB보다 1.25배 빠르며 쓰기 증폭이 2.36배 적습니다.
- 마그마는 카우치스토어보다 21배 빠르고 쓰기 증폭이 3.37배 적습니다.
-
결론
Magma의 효율성 개선을 통해 Couchbase Server가 지원하는 단일 머신 데이터 밀도는 3.3배, 메모리 요구량은 10배 증가하여 총소유비용(TCO)이 최대 10배까지 절감되었습니다. 성능 평가 결과, Magma는 메모리에 비해 너무 큰 데이터 세트가 포함된 쓰기 중심의 YCSB 워크로드에서 Couchstore 및 RocksDB 엔진보다 성능이 더 뛰어난 것으로 나타났습니다.
차세대 문서 스토리지 엔진에 대해 자세히 알아보려면 다음 백서를 확인하세요: Magma: Couchbase에서 사용되는 고밀도 데이터 스토리지 엔진. 마그마가 차세대 문서 스토리지 엔진인 이유를 알아보는 데 시간을 내주셔서 감사합니다!