본문 바로가기
프로그래밍/데이터베이스

[ScyllaDB] ScyllaDB를 사용하기에 앞서 기본 이론에 대해서 맛보기 - NoSQL과 ScyllaDB

by 사바라다 2022. 8. 10.

안녕하세요 ! 1달 정도 회사일에 집중하느라 블로그를 소홀히했습니다. 다시 조금씩 차분하게 글을 써보려고합니다. 최근에 NoSQL에 대해서 공부를 하고 있습니다. 그 중에서도 여러분들과 공유할 포스팅은 ScyllaDB의 기본에 대해서 알아보는 시간을 한번 가져보도록 하겠습니다.

오늘 포스팅하는 내용은 대부분 Scylla University의 강의를 요약입니다. Scylla DB에 관심있으신 분들은 위 링크의 내용을 참고하시 더 좋고 많은 내용을 확인하실 수 있습니다.

NoSQL

ScyllaDB는 NoSQL의 한 종류입니다. 따라서 ScyllaDB를 알아보기전에 NoSQL에 대해서 간단히 먼저 알아보도록 하겠습니다. NoSQL이란 주로 Not Only SQL의 약자라고 표현하고 있습니다. NoSQL 책에 따르면 사실 NoSQL은 어떤 한 컨퍼런스에 광고용으로 선택된 이름이고 기술 동향을 나타내는 표현은 아니었다고 합니다. 그럼에도 이는 이후에 굳혀져 RDBMS 처럼 테이블 구조가 아닌 방식으로 데이터를 저장하는 databse를 가리키는 일반적인 용어로 사용하고 있다고합니다. 그리고 이러한 NoSQL은 데이터와 트래픽의 양이 늘어남에 스케일 업으로는 한계가 뚜렷했기 때문에 적절한 스케일 아웃이 필요하게 되었습니다. 스케일 아웃을 통해서 적절한 데이터 처리를 하기 위해서는 data sharding이 필요한대 RDBMS에서는 이를 어플리케이션단에서의 조정이 필요합니다. 그런데 이런 샤딩을 RDBMS에서 하게되면 Transaction 처리, 일관성 제어, 쿼리 구성 등의 어려움이 기하급수적으로 늘어나게 됩니다. NoSQL을 사용하면 이러한 data sharding을 datasource 단에서 제어할 수 있습니다. 이러한 장점으로 NoSQL에 대한 수요가 점점 올라가고 있는 추세라고합니다.

이러한 NoSQL의 일반적인 특징은 아래와 같습니다.

  • 관계형 모델을 사용하지 않음
  • 클러스터에서 잘 동작 (Scale Out 친화적)
  • 오픈 소스
  • 스키마가 없음
  • 다중 저장소의 지속성

그리고 NoSQL은 그 저장방식에 따라서 아래와 같이 타입을 나눌 수 있습니다.

  • Key-Value : Unique Key와 Value의 Pair로 저장
  • Document : 데이터를 문서 형식으로 저장
    • Key-Value와 유사하지만 Key 뿐만 아니라 내부 정보를 통해서도 탐색 가능
  • Wide-column Store : 컬럼을 컬럼 페밀리의 구조로 구조화한 형식
  • Graph : 데이터간의 관계를 표현하기 쉬운 구조로 데이터 저장

이렇게 간단하게 NoSQL에 대해서 간단하기 훑어 보았습니다. SyllaDB는 wide-columns에 속하는 NoSQL입니다. 이제 아래에서 SyllaDB에 대해서 좀 더 자세히 알아보도록 하겠습니다. NoSQL에 대해서는 조금 더 정리하여 따로 포스팅을 올려보도록 하겠습니다.

ScyllaDB에 대해서

ScyllaDB는 wide-columns Type에 속하는 NoSQL입니다. 그리고 Apache Cassandra와 완벽하게 호환되는 대체품이기 때문에 카산드라의 커맨드와 메서드를 사용할 수 있다고 합니다. 이것의 연장선으로 spring 환경에서 spring data cassandra를 ScyllaDB에 사용할 수 있습니다. 카산드라 대비 ScyllaDB의 장점으로 강하게 어필하는 카산드라는 Java 기반으로 만들어졌다는 것에 비해서 ScyllaDB는 C++ 기반으로 만들어졌고 수치적인 장점으로 아래처럼 언급하고 있습니다.

  • GC가 없기 때문에 Stop The world 없음
  • 카산드라 대비 10배 더 많은 throughput
  • node 당 100만 read/write 에 대해서 지연 없이 처리 가능

따라서 ScyllaDB는 아래의 특징을 제공해준다고 합니다.

  • 상대적으로 낮은 Node 숫자로 카산드라 동일 스펙
    • 카산드라 120개 성능 -> 24개로 가능
  • 꾸준한 성능(consistent performance)
    • Cassandra는 GC가 있어서 한번씩 튈때가 있다
    • 이에 비해서 Scylla는 C++로 작성되었기 때문에 꾸준한 성능
  • 카산드라 대체
  • 높은 처리량(high throughput)
  • 높은 가용성(high available)
  • 높은 확장성(high scalable)
    • 스케일 업과 스케일 아웃이 자유롭다

이러한 특징을 토대로하면 ScyllaDB는 아래의 케이스에 적절히 사용할 수 있습니다.

  • 대량의 데이터 처리 : terabytes ~ petabytes의 데이터를 처리하는 서비스
  • 높은 가용성 : 24/7 가용이 되어야하며 멀티 region에서 사용되어지는 글로벌 서비스
  • Real-time : 짧은 response 시간을 항상 유지해야하는 서비스
  • high performance : Node 당 수백만의 처리량을 보장해야하는 서비스

데이터의 기본 용어

마지막으로 ScyllaDB의 기본적인 용어에 대해서 알아보도록 하겠습니다.

먼저 데이터 모델에서 중요한 용어들입니다.

  • keyspace
    • data model에서 가장 최상위 레벨의 집합 용어
    • 내부에 다수의 table로 구성
    • keyspace 단위로 설정할 수 있는 값들이 존재
    • RDBMS의 database에 매칭
  • Table
    • 유사한 데이터의 집합
    • 테이블은 실제 데이터는 row 단위로 구성
    • 세부 구성 요소
      • Columns : row에서 각 세부내용을 나타내는 단위
      • Primary Key : row를 구분할 수 있는 key column
      • Partition Key
        • 어떤 node(shard)에 저장될 지 정하는 key
        • 유니크한 ID로써 primary key를 hashing해서 나타냄

아래는 Cluster infra에서 중요한 용어들입니다.

  • Node : 저장소의 기본 단위
  • Cluster : 노드의 집합, data의 총 저장소로 사용
    • 최소 3개의 노드로 구성
    • ScyllaDB는 hash ring으로 구성
    • master 노드가 별도 있는게 아닌 Peer to Peer로 모든 Node에서 Write를 받아들일 수 있음
  • Replication Factor : 클러스터의 몇개의 노드에 저장할 지 정하는 설정
  • Consistence Level : 분산되어있는 Node에서 몇개의 Node를 통해서 데이터의 정합성을 판단할지 정하는 설정

마무리

오늘은 이렇게 ScyllaDB에 대해서 기본적인 내용에 대해서 알아보는 시간을 가져보았습니다.

금일 포스팅에서는 NoSQL, ScyllaDB의 기본적인 특징 및 사용처, 그리고 기본용어에 대해서 간단히 알아보았습니다.

다음 시간에는 Spring Boot 환경에서 실제로 ScyllaDB를 사용하는 방법에 대해서 알아보도록 하겠습니다.

감사합니다.

참고

[1] https://university.scylladb.com/courses/scylla-essentials-overview/lessons/introduction/

[2] NoSQL - 프리모드 사달게이 * 마틴 파울러

댓글