유연한 데이터 모델

JSON 지원

카우치베이스 서버 2.0 은 기본적으로 JSON 문서를 지원합니다. 각각의 JSON 문서는 다양한 구조를 가질 수 있고, 서로 다른 구조를 가진 여러 문서를 동일한 카우치베이스 데이터베이스 버킷에 저장할 수 있습니다. 또한 데이터베이스 내 다른 문서의 구조를 바꾸지 않고 언제든지 특정 문서 구조를 변경할 수 있어서 어플리케이션 기능 추가를 좀더 빨리 할 수 있습니다.

인덱스와 쿼리

카우치베이스 2.0은 JSON 문서에 기본 인덱스(Primary Index)와 보조 인덱스(Secondary Index)를 생성할 수 있습니다. 인덱스는 뷰(View)를 통해 생성하고 쿼리 할 수 있습니다. 인덱스 생성은 각 노드에서 저장된 데이터를 대상으로 인덱스를 생성하며 클러스터 내 모든 노드에 걸쳐 고르게 분산되어 있습니다. 쿼리는 카우치베이스 서버에서 문서를 검색하기에 적절한 클라이언트 라이브러리를 사용해서 실행합니다. 쿼리는 특정 키 조회, 범위 검색, 합계 조회 기능 등을 포함합니다. 심지어 재분배(rebalancing) 또는 장애조치(failover) 등과 같이 클러스터 서버의 구성 변경이 이루어지는 동안에도 쿼리 결과를 제공 합니다. 이와 관련하여 아키텍처 또는 뷰(View) 개발 방법 등 보다 상세한 내용은 documentation를 찾아 보십시오.

증분 맵 리듀스

증분 맵 리듀스는 대용량 데이터 셋의 실시간 분석을 위한 강력한 기능들을 제공합니다. 인덱스는 데이터 변경 부분에 대해서만 갱신되기 때문에 전체 데이터 셋의 배치 작업이 완료될 때까지 기다릴 필요가 없습니다. 뷰(View)에서 맵 리듀스(Map Reduce) 함수에 대해 자세히 알기를 원하면 map and reduce functions 문서를 참고하십시오.


간단한 확장성 자동

자동 샤딩(Auto-sharding)을 통한 클러스터 확장

카우치베이스 서버는 어플리케이션 요구사항이 변경 되더라도 쉽게 자원을 유지하면서 버튼 클릭 한번으로 클러스터에 서버 추가(또는 삭제)를 할 수 있습니다. 어플리케이션은 서버를 추가하여 RAM과 I/O 용량을 늘려나가면서 수평적으로 확장하게 됩니다. 자동 샤딩(Auto-sharding)은 모든 서버에 균등하게 데이터를 분배하여 어플리케이션 변경 없이 해당 요청을 대상 서버로 직접 전달합니다. 서버 추가 또는 삭제는 클러스터의 지속적인 데이터 가용성을 위해 데이터 재분배(rebalancing) 작업을 시작하게 합니다. 이러한 관리 작업에 대해 좀더 배우길 원하시면 administrative tasks(관리 작업) 문서를 참조하십시오. 또한 카우치베이스 서버 관리자 웹 인터페이스 또는 카우치베이스 서버 관리 REST API를 통해 클러스터를 관리할 수 있습니다.

클러스터 간 복제

비즈니스 연속성을 보장하기 위한 재난복구 시스템 구축 시 서로 다른 데이터센터에 있는 여러 클러스터의 데이터를 복제 할 수 있습니다. 또는 최종 사용자에게 가까운 거리에서 데이터를 제공하여 더 나은 사용자 경험(UX, User Experience)을 제공하고자 할 때에도 XDCR을 활용할 수 있습니다. 클러스터 간 데이터 복제는 단방향 또는 양방향 읽기/쓰기를 모두 지원합니다. XDCR 구성 및 자세한 설명은 cross data center replication (XDCR)문서를 읽어 보십시오.


고성능 연속성 보장

내장 객체 수준 캐시

카우치베이스 서버는 검증된 데이터 캐싱 기술인 memcached 기반의 내장 객체 수준 캐시를 포함하고 있습니다. 카우치베이스 서버는 데이터 읽기 및 쓰기 작업 시 submilisecond (1/1000 ms 이하)의 낮은 대기 시간과 지속적으로 높은 데이터 처리량을 보여줍니다. 또한, 글로벌 캐시 관리를 위해 운영체제(OS)에 의존하기 보다는 어플리케이션의 필요에 따라 데이터베이스 별로 캐시 자원을 할당할 수 있습니다.(참조 링크, RAM Quotas).

또한, 카우치베이스는 memcached를 대체 (drop-in replacement for memcached) 하여 동일한 클라이언트 프로토콜을 통해 데이터 생성, 검색, 갱신 및 삭제를 지원합니다. 따라서, 카우치베이스 서버가 제공하는 그래픽 UI, 클러스터링, 리플리케이션(복제), 인덱스, 쿼리 등의 뛰어난 기능을 활용하기 위해서 기존의 memcached를 사용해서 개발된 어플리케이션을 카우치베이스 서버로 업그레이드 할 수 있습니다. 만약 기존의 memcached 라이브러리를 사용하고 있지 않다면 카우치베이스에서 엄격한 품질 테스트를 거쳐 제공하는 카우치베이스 서버 SDK를 사용하십시오.


24x365 무중단

Zero-Downtime 유지보수

카우치베이스 서버는 운영 중인 라이브 클러스터 환경에서도 유지보수 작업을 할 수 있도록 합니다. 어플리케이션 중단없이 서버 추가 또는 삭제가 가능하고, 실행 중인 시스템에서 소프트웨어 업그레이드를 할 수 있습니다. 자세한 내용은 지속적인 모니터링과 유지보수 (ongoing monitoring and maintenance)에서 확인할 수 있습니다. 또한, 라이브 클러스터 환경에서 온라인 클러스터 전체의 데이터 백업(backups) 및 복구를 할 수 있습니다. 데이터 압축(compaction)과 인덱스 생성 작업 역시 데이터베이스가 문서를 제공하는 동안 온라인으로 처리합니다.

자동 장애복구와 데이터 복제

카우치베이스 서버의 데이터 복제(data replication) 기능은 클러스터 안에 여러 개의 데이터 사본을 유지하기 때문에 범용 서버(Commodity server) 또는 가상 머신을 사용하는 경우에는 어플리케이션 고가용성을 확보를 위해서 특별히 노드 장애로부터 보호해야 합니다. 복제 데이터(Replica data)는 단일 노드 장애 발생 시 그 영향을 줄이기 위해 클러스터의 모든 노드에 분산되어 있습니다. 사용자가 원한다면, 카우치베이스 서버는 자동 장애복구 기능과 복제 노드의 활성화를 지원합니다. 장애복구에 대해 자세한 내용은 다음 문서(Learn more about failover)를 참고하십시오.

관리 및 모니터링 UI

카우치베이스 서버는 고급 모니터링과 풍부한 관리자 웹 인터페이스를 제공합니다. 관리자는 클러스터 전체 통계는 물론 개별 노드에서 장애 발생 시 신속한 장애조치(troubleshooting)을 위해 상세한 drill-down 정보를 제공하는 실시간 차트를 통해 전체 클러스터를 모니터링 할 수 있습니다. 모니터링 기능(monitoring capabilities)에 대한 상세한 내용을 확인해 보십시오.

또한, 카우치베이스 서버에서 제공하는 서버 관리 REST API (Couchbase Server management REST API)를 이용해서 Nagios와 같은 외부 모니터링 및 관리 시스템과 카우치베이스 서버를 간단하게 연동 할 수 있습니다.

신뢰할 만한 스토리지 아키텍처

카우치베이스 서버는 모든 데이터를 비동기적으로 디스크에서 유지하고 실제 물리적인 RAM 크기보다 큰 데이터셋을 저장할 수 있습니다. 카우치베이스는 RAM과 디스크 사이에 데이터를 자동으로 이동시키고 객체 수준 캐시의 워킹 셋 (working set) 데이터를 적정 수준으로 유지합니다. 카우치베이스의 추가 전용(append-only) 스토리지 계층은 항상 파일의 마지막에서 지속적으로 쓰기 업데이트가 이루어지기 때문에 디스크의 쓰기 성능을 향상시킵니다. 데이터 변경으로 인한 뮤테이션(mutation)은 먼저 RAM에 우선 커밋한 다음 디스크 쓰기 대기열(Queue)에 추가되어 각 문서 커밋을 실행합니다. 디스크 쓰기 대기열과 지속성에 대한 자세한 내용은 다음 문서disk write queue and persistence를 참고해 주십시오.


SDK

Java, C#, PHP, C, Python, Ruby 등 다양한 언어를 완벽하게 지원하는 SDK를 사용하여 원하는 언어로 응용 프로그램을 개발할 수 있습니다.

기존의 다양한 memcached 라이브러리가 있지만, 카우치베이스에서 제공하는 새로운 SDK 패키지 사용을 권장합니다. 이러한 “smart” SDK는 클러스터 토폴로지를 인식하여 데이터 처리시 해당 데이터가 있는 노드로 직접 요청을 보냅니다. 보다 자세한 내용은 API 상세 사용법 및 SDK 다운로드(APIs, usage details and SDK downloads) 에서 확인 할 수 있습니다.