Couchbase 7.0은 데이터베이스의 중요한 이정표입니다.
In 최신 릴리스33가지가 넘는 주요 혁신과 100가지가 넘는 부수적인 혁신을 통해 획기적이면서도 개발자와 DevOps 엔지니어에게 친숙한 제품으로 완성되었습니다.
이번 릴리스에서는 처음으로 전체 SQL 트랜잭션과 고성능, 대규모 작업을 인터리빙할 수 있게 되었습니다, 모두 단일 데이터베이스에서. 따라서 개발자는 트랜잭션을 위해 하나의 시스템을 선택하고 고속, 짧은 지연 시간 및 규모를 위해 다른 시스템을 선택할 필요가 없습니다.
이 글에서는 이러한 혁신 중 두 가지에 대해서만 이야기하겠습니다. 앞으로 며칠과 몇 주 동안 뛰어난 기술팀이 작성한 여러 블로그 게시물을 통해 Couchbase 7.0 릴리스의 다른 세부 사항에 대해 알아보실 수 있습니다.
Couchbase 7.0에서 처음으로 도입되는 기능 유연한 스키마 문서 데이터베이스의 다중 문 SQL 트랜잭션. 또한 다음과 같은 개념을 도입했습니다. 7.0의 범위 및 컬렉션.
이 두 가지 혁신, 즉 다중 트랜잭션과 데이터 구성은 관계형 데이터베이스의 친숙한 개념을 NoSQL 시스템에서 제공합니다. 이제 개발자는 과거의 모놀리식 애플리케이션을 엔터프라이즈 조직의 현재와 미래의 요구 사항을 충족하는 최신 마이크로서비스로 마이그레이션하는 것이 그 어느 때보다 쉬워졌습니다.
관계형 데이터베이스의 한계
데이터베이스 발전의 관점에서 볼 때, 관계형 데이터베이스 관리 시스템(RDBMS)에는 두 가지 큰 한계가 있었습니다. 하나는 확장성이고 다른 하나는 스키마 경직성이었습니다.
80년대에 구축된 관계형 시스템의 수직적 확장 특성은 당시의 인프라 현실을 반영한 것입니다. WAN과 인터넷은 말할 것도 없고 네트워크, 심지어 LAN도 거의 사용할 수 없었습니다. 따라서 전체 하드웨어 스택을 구축하고 자체적인 방식으로 모든 것을 관리하지 않는 한 컴퓨팅 중간에 네트워크를 도입하는 것은 불가능했습니다.
그 결과 트랜잭션 데이터베이스는 본질적으로 단일 서버 데이터베이스가 되었습니다. 하지만 최신 데이터베이스에는 리소스 사용률에 따라 하드웨어 사용량을 확장 및 축소하는 수평적 확장 시스템이 필요합니다. 이것은 최초의 NoSQL로 해결한 문제.
NoSQL 데이터베이스 는 또한 전 세계 스키마에 유연성을 부여했으며, 이것이 바로 이러한 시스템이 인기를 끄는 주된 이유입니다. 하지만 기술 생태계로서 우리는 40년간의 데이터베이스 연구와 혁신이 우리에게 가르쳐준 가장 중요한 교훈 중 하나를 잊고 있었습니다.
이것이 바로 SQL의 교훈입니다.
SQL의 강점
수백 개의 데이터베이스가 등장하고 사라졌으며, 각 데이터베이스마다 고유한 프로그래밍 패러다임을 내세웠지만, 오직 SQL만이 시간의 시험을 견뎌냈습니다.
이렇게 오래 지속되는 이유는 두 가지입니다: 첫째는 관계형 모델을 뒷받침하는 수학(관계형 미적분학이라고 함)이고, 둘째는 프로그래밍 언어의 단순성입니다. 구조화된 쿼리 언어(SQL)는 기능적이며 영어를 기반으로 합니다.
SQL의 이 두 가지 강점은 복잡한 집합론 개념을 영어로 표현하는 방식에 가까운 구문으로 표현하고 데이터베이스 시스템 내의 모든 프로그래밍 복잡성과 기타 데이터 조작의 특이성을 숨길 수 있게 해줍니다. 이러한 선언적 단순성 덕분에 관계형 데이터베이스가 인기를 얻게 되었고, 지난 40여 년 동안 개발자 팀은 가장 정교한 엔터프라이즈 애플리케이션을 구축할 수 있었습니다.
Couchbase 7.0 릴리스를 개발할 때 관계형 계산과 프로그래밍의 단순성을 유연한 스키마 데이터베이스에 적용하는 것은 쉬운 제안이 아니었습니다. 6년에 걸친 여정이었습니다.
함께 N1QL 쿼리 언어에서 이미 SQL의 강점을 대부분 다루었습니다. N1QL은 관계형 시스템의 "반대 가능한 엄지손가락"인 JOIN과 하위 쿼리 및 창 함수를 제공합니다. 이는 유연한 스키마 문서 데이터베이스에서 관계형 데이터베이스의 구문적 동등성을 제공합니다.
혁신 #1: N1QL의 다중 문 SQL 트랜잭션
수년 동안 Couchbase 문서에는 ACID 속성이 포함되어 왔습니다. 이 오퍼링은 단일 문서 ACID(Couchbase 2.0의 경우)에서 다중 문서 분산 ACID(6.5의 경우)로, 그리고 이제 Couchbase는 7.0에서 SQL 다중 문 트랜잭션을 지원합니다..
이는 최신 데이터베이스의 진화에서 중요한 단계입니다.
문서 데이터 모델은 객체 측면에서 사고하는 애플리케이션 개발자와 행과 열 측면에서 데이터를 저장하는 데이터베이스 간의 임피던스 불일치를 제거합니다.
카우치베이스의 경우, JSON은 데이터 모델입니다.. JSON은 객체, 계층 구조 및 배열을 제공합니다. N1QL 쿼리 언어와 쿼리 엔진은 JSON을 선언적으로 쿼리, 변환 및 조작할 수 있도록 도와줍니다. 작성 및 유지 관리가 어려운 긴 파이프라인을 작성할 필요가 없습니다. 수동으로 최적화할 필요도 없습니다. N1QL은 JSON을 위한 SQL입니다. 작성만 하면 Couchbase가 최적화합니다.
SQL은 다양한 용도로 사용됩니다. 보고를 위한 쿼리 언어이기도 하지만 트랜잭션 처리를 위한 쿼리 언어이기도 합니다. 이제 Couchbase Server 7.0은 N1QL에서 다중 문 트랜잭션을 제공하며, 다음과 같은 기능을 제공합니다. 산 거래 RDBMS처럼요.
이와 같은 분산 트랜잭션은 수십 년 동안 존재해 왔습니다. 하지만 흔히 알려진 차단 및 막힘 문제에 부딪혀 확장되지 못했습니다.
카우치베이스는 다중 모델, 다중 액세스 데이터베이스입니다. 키-값 API와 N1QL 쿼리 언어를 통해 JSON 문서에 액세스하고 조작할 수 있습니다. 다중 문 트랜잭션을 도입할 때 첫 번째 단계는 키-값 데이터 액세스를 지원하는 것이었습니다. 이 단계는 다중 문서 트랜잭션을 위한 아키텍처와 함께 6.5 릴리스에 포함되었지만, 중앙 코디네이터가 없었습니다.
7.0 릴리즈는 이 지원을 N1QL의 다중 문 SQL 트랜잭션으로 확장합니다. 이를 위해서는 분산 트랜잭션을 구현하기 위해 Couchbase의 스케일아웃 아키텍처와 최적화된 동시성을 활용하는 특허 출원 중인 새로운 접근 방식이 필요했습니다.
스케일 아웃은 각 트랜잭션에 대한 중앙 코디네이터를 피함으로써 달성됩니다. 각 트랜잭션의 세부 정보는 여러 개의 활성 트랜잭션 레코드에 보관되며 커밋 프로토콜에서 사용됩니다. 분산 커밋 프로토콜은 여러 인스턴스에서 병렬로 실행됩니다. 따라서 시스템의 확장성과 비용 효율성이 향상됩니다.
다음은 기존 관계형 데이터베이스에서 SQL 다중 문 트랜잭션의 모습입니다:
1 2 3 4 5 6 7 8 9 10 |
시작 트랜잭션; SET 트랜잭션 격리 레벨 읽기 커밋됨; 업데이트 고객 SET balance = balance + 100 어디 cid = 4872; 선택 cid, 이름, balance FROM 고객; 세이브포인트 s1; 업데이트 고객 SET balance = balance - 100 어디 cid = 1924; 선택 cid, 이름, balance FROM 고객; 롤백 WORK TO 세이브포인트 s1; 선택 cid, 이름, balance FROM 고객; 커밋 ; |
이 동일한 트랜잭션은 Couchbase 7.0에서 수정 없이 작동합니다..
다음을 지원합니다. 시작
, 커밋
, 롤백
그리고 세이브포인트
를 사용하여 트랜잭션을 제어할 수 있습니다. 문 수준 원자성 및 읽기-쓰기 같은 ACID 시맨틱은 트랜잭션 내의 각 DML 문에 대해 지원됩니다.
이러한 다중 문 트랜잭션은 앞서 언급한 첫 번째 주요 혁신입니다. 이 혁신은 개발자에게 유연한 스키마의 모든 복잡성을 처리하는 데이터베이스에서 익숙한 트랜잭션 보호 기능을 제공합니다. 그리고 탄력적인 데이터 배포.
혁신 #2: 데이터 구성
Couchbase 7.0 릴리스에 도입된 또 다른 주요 혁신은 데이터베이스 내 데이터 구성입니다. 여기서 범위 및 컬렉션이 등장합니다.
RDBMS에는 데이터베이스 -> 스키마 -> 테이블 -> 행 -> 열이 있습니다. 이제 Couchbase에는 버킷 -> 범위 -> 컬렉션 -> 문서 -> 필드가 있습니다. 범위와 컬렉션이 도입되면서 기존 관계형 데이터베이스의 온톨로지와 NoSQL 데이터베이스가 직접적으로 일치하게 되었습니다.
모든 것을 하나로 모으기
이 두 가지 혁신의 결합은 범위와 컬렉션이라는 데이터 구성의 구조적 수준과 다중 트랜잭션이라는 기능적 수준의 동등성 모두에서 관계형 데이터베이스 시스템과 동등성을 확립합니다.
이 두 가지 혁신이 단일 거래에 어떤 의미가 있는지 자세히 살펴보겠습니다.
스키마 유연성 데이터베이스는 이러한 데이터베이스에 데이터를 저장하기 전에 스키마를 미리 정의할 필요가 없음을 의미합니다. Couchbase는 JSON 데이터베이스이므로 JSON 데이터를 저장하는 한, JSON이 자체적으로 설명하므로 스키마 정의에 대해 걱정할 필요가 없습니다.
스키마가 없는 애플리케이션이란 존재하지 않는다는 것은 우리 모두 알고 있습니다. NoSQL과의 차이점은 데이터베이스가 애플리케이션에 의해 부과되고 암시된 스키마(객체 모델)를 넘어 자체 스키마(데이터 모델)를 부과하지 않는다는 것입니다. 상상할 수 있듯이 이 JSON은 객체의 데이터 부분에 불과합니다. 스키마 진화는 JSON 자체에 대한 변경일 뿐입니다.
범위 및 컬렉션의 도입으로 JSON 문서의 네임스페이스를 지정하고 의미 있는 방식으로 구성할 수 있게 되었습니다. 유연한 스키마 데이터베이스인 Couchbase는 범위 및 컬렉션을 생성, 업데이트, 수정할 뿐만 아니라 인덱스 및 기타 관련 스키마 아티팩트를 생성하는 기능을 유지합니다. 또한 트랜잭션이 진행 중일 때 컬렉션 간에 데이터를 이동하고, 탄력적인 용량 확장을 처리하고, 노드를 추가하거나 제거할 수 있습니다.
다시 말해, 전체 클러스터에서 물리적 재구성에서 논리적 재구성에 이르는 모든 데이터 이동에도 불구하고 ACID 시맨틱이 보장된다는 뜻입니다. 이를 위해 데이터를 적절한 노드나 샤드로 특별히 관리적으로 구조화할 필요가 없습니다. 다중 문 SQL 트랜잭션을 실행할 때 Couchbase는 표면 아래에서 이러한 데이터 이동의 유동성을 처리하도록 정밀하게 설계되어 있습니다.
이것이 바로 NoSQL 운동이 약속한 유연성입니다. 다만 지금까지 완전히 실현되지 않았을 뿐입니다.
기존의 관계형 데이터베이스는 데이터베이스의 모든 연산에 대해 모든 비용을 지불해야 합니다. RDBMS는 제한된 수의 사용자가 있는 메인프레임에서 실행되는 트랜잭션 원장 같은 애플리케이션만 데이터베이스로 이동하던 시절에 구축되었습니다.
이러한 풀-ACID 접근 방식은 오늘날의 애플리케이션에서 비용이 너무 많이 드는 것으로 입증되어 지난 10년 동안 솔루션 설계자는 새로운 마이크로서비스를 설계할 때 선택해야 했습니다: 이 마이크로서비스에 트랜잭션 시맨틱이 필요한가? 그렇다면 관계형 데이터베이스를 사용해야 합니다. 그렇지 않다면 다행히도 확장 가능하고 성능이 뛰어나며 지연 시간이 짧은 데이터베이스를 사용하여 빠르게 개발하고 쉽게 확장할 수 있습니다. 새로운 프로젝트, 애플리케이션 또는 마이크로서비스를 시작할 때마다 이러한 선택을 해야 했기 때문에 개발자의 불만, 데이터베이스 확장, 데이터 불일치, 데이터 불안정성, 데이터 거버넌스 문제가 발생했습니다.
이 딜레마는 이제 역사책에 남을 일입니다.
이제 무엇을 만들 것인가요?
개발자는 이제 단일 데이터베이스를 사용해 확장성, 짧은 지연 시간, 성능, 스키마 유연성은 물론 SQL과 풀-ACID를 보장받으면서도 어떤 요구 사항도 타협하지 않고 사용할 수 있습니다. 필요한 경우에만 트랜잭션 비용을 지불하고, 그 외에는 시스템이 대규모로 작동하도록 자유롭게 사용할 수 있습니다.
Couchbase 7.0 는 키-값 연산, SQL 쿼리, 전체 ACID 트랜잭션, 토큰화된 검색, 이벤트 스트리밍 또는 애드혹 분석 쿼리를 클라우드나 엣지에서 수행할 수 있는 데이터베이스입니다. 데이터베이스에 한 번만 작성하면 이러한 모든 엔진을 사용할 수 있기 때문에 개발자는 지금까지 상상하지 못했던 새로운 종류의 애플리케이션을 구축할 수 있습니다.
Couchbase 7.0 릴리스가 제공하는 기능도 기대가 되지만, 여러분이 만든 애플리케이션에 대해 들었을 때 더욱 기대가 됩니다. I 믿기지 않는다는 듯이 묻습니다: "잠깐만요, 저걸 카우치베이스로 구축했다고요?!".
기대가 됩니다,
Ravi