TiDB 소개

TiDB에 대한 소개

소개

데이터베이스, 운영 체제, 컴파일러는 컴퓨터 소프트웨어를 구축하는 주요 기본 기반이다. 데이터베이스는 애플리케이션 계층에 가깝고 비즈니스를 지원하는 시스템으로 수십 년 동안 개발이 계속되고 있으며, 매일 진화하고 있다.

많은 사람들이 다양한 종류의 데이터베이스를 이용해 왔다고 생각하지만, 데이터베이스(특히 분산 데이터베이스)의 개발 경험이 있는 분은 극히 소수라고 생각한다. 데이터베이스 구현에서 알면 스킬 향상으로 이어질 뿐만 아니라 다른 시스템 구축에도 도움이 되며 데이터베이스를 능숙하게 활용할 수 있다.

기술 이해를 깊게 하는 가장 좋은 방법은 그 분야의 오픈 소스 프로젝트에 몰두하는 것이라고 필자는 생각한다. 데이터베이스 분야에도 많은 훌륭한 오픈 소스 프로젝트가 있다. 이 프로젝트를 통해, 특히 유명한 MySQL과 PostgreSQL 소스 코드를 본적이 있는 사람도 많을 것이다. 분산 데이터베이스 분야에서 TiDB도 인정받는 몇 안되는 프로젝트로 위 제품과 마찬가지로 소스 코드를 읽을 수도 있다.

그러나, 분산 데이터베이스는 복잡하기 때문에 많은 기술자에게 전체 프로젝트를 이해하는 것이 어려운 것 같다. 그 때문에, 필자는 TiDB의 기술을 알기 쉽게 해설하는 기사를 정리하기로 했다. 오픈 소스로부터 읽을 수 있는 테크닉 뿐만이 아니라, SQL 인터페이스의 배후에 숨겨져 있는 구현시의 테크닉등도 다수 소개 하겠다.

데이터 저장

데이터베이스의 가장 기본적인 기능인 데이터 저장에 대해 설명한다. 데이터를 저장하는 방법에는 여러 가지가 있다. 가장 간단한 방법은 메모리에 데이터 구조를 구축하고 사용자가 보낸 데이터를 저장하는 방법이다. 예를 들어, 배열을 사용하여 데이터를 저장하고 데이터를 받으면 배열에 새 항목을 추가할 수 있다. 이 솔루션은 간단하고 기본적인 요구를 충족하며 성능이 뛰어나다. 그러나 이러한 장점을 능가하는 단점이 있다. 가장 큰 문제는 모든 데이터가 메모리에 저장되므로 서버가 중지되거나 다시 시작될 때 데이터가 손실된다는 것이다.

데이터 지속성을 달성하는 수단으로는 디스크와 같은 비휘발성 스토리지에 데이터를 저장하는 것이다. 디스크에 파일을 만들고 데이터를 받으면 파일에 새 데이터를 추가한다. 이는 지속 가능한 스토리지 솔루션이지만 이것만으로는 충분하지는 않다. 왜냐하면 저장된 디스크가 손상되면 데이터가 손실되기 때문이다. 따라서 디스크가 손상된 경우를 가정하고 RAID(Redundant Array of Independent Disks)에서 중복하여 사용한다. 하지만 기계가 다운되면 어떻게 될까? 데이터에 더 이상 액세스할 수 없다.
RAID는 안전한 저장 장소가 아니다. 그 외에도 네트워크를 통해 스토리지에 데이터를 저장하는 방법과 중복 소프트웨어를 이용하여 하드웨어 수준에서 복제하는 방법 등이 있다. 이러한 방법의 문제는 복제할 때 일관성을 유지하는 것이다. 데이터 무결성(무손상성)과 정확성 보호는 기본 요구 사항이며, 이를 달성하기 위해 아래에 같은 어려운 문제가 있다.

  • 빠른 쓰기 속도가 필요하다.
  • 저장 시 데이터를 일관성 있게 읽어야 한다.
  • 동시 수정을 처리해야 한다.
  • 여러 레코드를 원자적으로 수정해야 한다.

이러한 문제는 모두 해결하기 어렵지만, 모든 것을 해결할 수 있어야 뛰어난 데이터베이스 스토리지 시스템이라고 할 수 있다.

이러한 배경을 바탕으로 당사는 TiDB의 데이터스토어 부분인 TiKV를 개발하였다. 우선, SQL의 개념은 잊고, 고성능으로 고신뢰의 분산 키 밸류 스토어의 TiKV의 구현 방법을 소개하겠다.
※ TiKV는 KVS로 이용하실 수 있다.

키-벨류(key-value)

데이터 스토리지 시스템의 첫 번째 가장 중요한 단계는 데이터 저장 모델을 결정하는 것이다. 즉, 어떤 형식으로 데이터를 저장해야 하는지를 결정하는 것이다. TiKV는 원래 바이트 배열이 키와 값으로 구성된 거대한 맵으로 생각할 수 있다. 이 맵에서는 키가 바이트 배열의 원시 바이너리 비트에 따라 비교 순서로 배치된다. 다음 사항에 유의해야 한다.

  1. 이는 키-벨류 쌍으로 구성된 거대한 지도이다.
  2. 이 맵에서 키-벨류 쌍은 키의 이진 시퀀스에 따라 순서가 지정된다. 사용자는 키의 위치를 ​​탐색하고 다른 키 값 쌍에 대해 다음 메소드를 사용할 수 있다. 이 키-벨류 쌍은 모두 이것보다 커진다.

여기에서 언급한 스토리지 모델과 SQL 테이블 간의 관계는 무엇인가? 라고 의문을 느끼고 있는 사람도 있을 것이다. 분명히 말한다. 무관한다.


이번에는 스토리지와 키 밸류의 기본 지식을 소개하였다. 다음장에서는 분산 Key-Value의 TiKV의 원리를 소개하겠다.