본문 바로가기
데이터 엔지니어링

SingleStore DB에 대해 알아보자

by 내기록 2024. 1. 13.
반응형

 

목차 LIST

     

    SingleStore

    SingleStoreDB는 분산 관계형 데이터베이스로 대규모 트랜잭션과 실시간 분석을 모두 처리할 수 있습니다. 표준 SQL 드라이버를 통해 접근할 수 있으며, 조인, 필터, 분석 기능(ex. 집계, 그룹과, 윈도우 함수 등)을 포함한 ANSI SQL을 지원합니다.

    ANSI SQL?

    ANSI(American National Standards Institute)가 다양한 DBMS(Oracle, MySQL 등)에서 사용 가능하도록 한 표준 SQL문

     

    SingleStoreDB는 클라우드 인스턴스 또는 업계 표준 하드웨어에서 수평적으로 확장되며, 다양한 플랫폼에서 높은 처리량을 제공합니다. 또한 현대의 데이터 처리 생태계에서 흔히 사용되는 기술들(ex. 오케스트레이션 플랫폼, 개발자 IDE, BI 도구 등)과 호환성을 유지하고 있기 때문에 기존 환경에 쉽게 통합할 수 있습니다. 

    메모리 내 로우스토어와 디스크 기반 컬럼스토어를 특징으로 하여, 고도의 동시 운영 및 분산 워크로드를 모두 처리할 수 있습니다.

    또한, SingleStoreDB는 'SingleStore파이프라인' 이라는 데이터 수집 기술을 특징으로 하여, 이를 통해 대량의 데이터를 데이터베이스로 고속 스트리밍 할 수 있고, exactly-once(정확히 한번) 처리되기 때문에 중복이나 누락 없이 정확하고 신뢰할 수 있는 방식으로 저장됩니다.

     

    https://docs.singlestore.com/

     

    OLTP 및 OLAP 워크로드를 위한 고성능

    SingleStoreDB는 확장 가능한 분산 시스템으로 데이터는 클러스터 내 노드 간에 자동으로 샤딩됩니다. 샤딩은 분산 집계 쿼리와 정확히 일치하는 값을 찾는 필터링 쿼리 모두에 대한 쿼리 성능을 최적화합니다. 워크로드를 확장하려면 노드를 추가하고 샤드(=파티션)를 재분배할 수 있습니다.

     

    SingleStoreDB는 인메모리 로우스토어와 디스크 기반 컬럼스토어를 사용하여 데이터를 저장하고 처리하는 것을 지원합니다. 인메모리 로우스토어는 트랜잭션 워크로드에 대한 최적의 실시간 성능을 제공합니다. 디스크 기반 컬럼스토어는 대규모 historical 데이터셋에 걸친 분석 워크로드에 적합합니다.

     

    기본적으로 테이블은 컬럼스토어 형식으로 데이터를 저장하지만, 원하는 경우 로우스토어 인덱스 타입을 지정하여 로우스토어를 생성할 수 있습니다. SingleStoreDB의 로우스토어와 컬럼스토어 엔진의 조합은 실시간 및 historical 데이터를 단일 쿼리에서 통합함으로써 기술 스택을 단순화합니다.

     

    로우스토어/컬럼스토어 엔진의 조합과 실시간 및 historical 데이터는 무슨 관계가 있나?

    SingleStoreDB는 하이브리드 데이터 관리 시스템으로, 로우스토어(row store)와 컬럼스토어(column store) 엔진의 조합을 제공하여 데이터를 효율적으로 저장하고 관리할 수 있게 한다.

    로우스토어는 트랜잭션과 같이 특정 레코드에 대한 신속한 액세스가 필요할 때 유리하므로 실시간 데이터에 적합하다.
    컬럼스토어는 대량의 데이터셋을 분석할 때 유리하며, 데이터 웨어하우징 및 분석 쿼리에 최적화되어있다.

     

     

    혼합 워크로드(작업량) 처리 외에도 SingleStoreDB는 동시 사용자에 대한 높은 동시성을 지원합니다. 분산 쿼리를 최적화하는 과정에서 CPU 사용의 효율성을 극대화하기 위해 처리 워크로드를 고르게 분산합니다. Query plan은 기계 코드로 컴파일되어 이후 실행을 빠르게 하기 위해 캐시됩니다. 이렇게 컴파일된 query plan의 핵심 기능은 파라미터에 대해 사전에 지정된 값을 사용하지 않는다는 것입니다. 이를 통해 SingleStoreDB는 요청에 따라 값을 대체할 수 있으며, 동일한 구조의 후속 쿼리를 빠르게 실행할 수 있습니다. 또한, SingleStoreDB는 Multi-Version Concurrency Control(MVCC) 및 lock-free 데이터 구조를 사용하기 때문에, 대량의 동시 읽기 및 쓰기 작업 중에도 데이터에 대한 high accessible을 유지할 수 있습니다.

     

    Multi-Version Concurrency Control(MVCC)?

    데이터베이스 관리 시스템(DBMS)에서 동시성 제어를 위해 사용되는 기술이다.
    MVCC의 주 목적은 데이터베이스에서 여러 사용자가 동시에 데이터에 액세스하고 수정할 수 있도록 하면서 데이터의 일관성과 격리 수준을 유지하는 것이다.

     

    Durable and Redundant (영속성 및 이중화)

    SingleStoreDB는 내구성이 뛰어나고 확장 가능하며 안정적입니다. 트랜잭션은 로그 레코드로 디스크에 커밋, 즉 저장됩니다. 저장된 데이터는 주기적으로 전체 데이터베이스의 스냅샷으로 압축됩니다. 만약 노드가 다운되면, 트랜잭션 로그 레코드를 사용하여 커밋된 트랜잭션을 복구함으로써 노드를 재시작할 수 있습니다.

     

    SingleStoreDB는 클러스터 내 노드끼리 데이터의 복사본을 공유하는 페어링 구성을 통한 고가용성을 지원합니다. 노드는 필요에 따라 장애 조치(failover)를 진행할 수 있으며, 클러스터는 이에 대한 영향 없이 정상적으로 서비스를 수행합니다. (without the cluster going offline)

    Failover?

    데이터베이스 클러스터에서 어떤 노드(서버)에 문제가 생겼을 때, 그 노드의 역할을 다른 노드가 자동으로 인계받아 계속해서 서비스를 제공하는 과정을 말한다. 이는 시스템의 중단 없이 문제가 생긴 노드의 기능을 다른 노드가 대신 수행함으로써 전체 시스템의 가용성을 유지하는데 도움을 준다.

     

     

    Deploy anywhere (어디에나 배포 가능)

    SingleStoreDB는 특별한 하드웨어 없이도 클라우드나 온프레미스 환경 어디에나 배포할 수 있습니다.

     

    아래는 심화 내용입니다.

    • SIMD CPU 명령어 - AVX2 활용: SingleStoreDB는 SIMD(Single Instruction, Multiple Data)라는 기술을 사용합니다. 이는 한 번의 명령으로 여러 데이터를 동시에 처리할 수 있게 하는 CPU 기능입니다. 여기서 AVX2는 SIMD의 한 형태로, 데이터 처리 속도를 높이는 데 도움이 됩니다.
    • NUMA-aware (Non-Uniform Memory Access-aware): NUMA-aware는 컴퓨터의 메모리에 접근하는 속도가 컴퓨터의 다른 요소에 의해 달라질 수 있다는 것을 인지하고, 이를 효율적으로 사용하는 기술입니다. 즉, 하나의 컴퓨터에서 메모리 접근 시간이 모든 부분에서 같지 않음을 인지하는 것인데, 어떤 메모리는 빠르게 접근할 수 있지만, 다른 부분은 상대적으로 느릴 수 있습니다. SingleStoreDB는 이러한 메모리 접근 속도의 차이를 잘 알고, 이를 고려하여 메모리를 더 효율적으로 사용하여 성능을 향상시킵니다. 쉽게 말하면 SingleStoreDB는 컴퓨터의 메모리를 똑똑하게 사용하여 더 좋은 성능을 낼 수 있도록 합니다.
    • 베어 메탈, 가상 머신, 클라우드 환경에서 배포 가능: SingleStoreDB 다양한 환경에서 설치 운영이 가능합니다. 즉, 베어 메탈 서버(가상화 없이 직접 물리적 서버에 설치), 가상 머신(가상화된 서버 환경), 그리고 클라우드 환경(온라인 클라우드 서비스를 통한 환경)에서 모두 사용할 있습니다.
    SIMD(Single Instruction Multiple Data)?

    병렬 컴퓨팅의 한 종류로 하나의 명령어로 여러 개의 값을 동시에 계산하는 방식이다.

     

     

    Analyzing Data (데이터 분석)

    SingleStoreDB는 표준 SQL을 사용하여 데이터를 쿼리합니다. JDBC/OBDC 인터페이스는 Tableau, Looker, Microstrategy와 같이 널리 사용되는 BI 도구들이 데이터를 쿼리하고 상호 작용할 수 있습니다. 

     

    SingleStoreDB는 응답 시간을 가속화하기 위해 다양한 기능을 제공합니다.

    • 수평 확장 및 분산 병렬 쿼리 실행
    • 빠른 집계와 최적화된 디스크 사용을 위한 컬럼스토어 쿼리 처리
    • 더 빠른 실행을 위한 쿼리 컴파일
    • Query vectorization(쿼리 벡터화) : 스트림라인된 배열 지향 처리, 칩 내 CPU 명령어를 활용하여 효율적인 처리
    Q. 쿼리 벡터화?

    벡터는 다양한 유형의 정보(이미지, 소리, 텍스트 등)를 숫자의 나열로 표현한 것이다.
    즉, 복잡한 정보를 숫자의 나열로 간단하게 표현한 것으로 컴퓨터가 데이터를 더 쉽게 처리할 수 있게 해준다.

    쿼리 벡터화는 데이터베이스에서 복잡한 벡터 데이터를 효율적으로 처리하는 기술로 한 번에 여러 데이터 항목을 처리함으로써 연산 속도를 향상시킨다. 이 기술은 데이터 처리 속도와 효율성을 극대화하여 얼굴 인식, 제품 추천 등 다양한 기능에서 요구하는 빠른 데이터 처리와 분석을 지원한다.

    Q. 스트림라인된 배열 지향 처리?

    스트림라인(Streamlined)은 데이터를 배열 형태로 조직화하고 이를 사용해서 연산을 수행하는 방식을 말한다. 이 스트림라인된 배열 지향 처리는 쿼리 벡터화에서 데이터를 효율적으로 처리하는 기반 기술 중 하나이다.
    데이터를 연속적인 메모리 공간에 나열하여 배열 형태로 저장하는데, 이렇게 하면 데이터 접근 시간이 단축되고 연산이 더 빠르게 진행될 수 있다. 배열에 저장된 데이터에 대해 연산을 수행할 때 단일 연산으로 여러 데이터를 동시에 처리할 수 있게 된다. 예를 들어, 벡터화된 연산을 통해 배열의 모든 요소에 대해 곱셈, 덧셈과 같은 연산을 한 번에 수행할 수 있다.

    Q. 칩 내 CPU 명령어 활용?

    쿼리 벡터화는 스트림라인된 배열 지향 처리 뿐만 아니라, 칩 내 CPU 명령어(예: SIMD 명령어)를 활용하여 데이터 처리 효율을 더욱 높인다. SIMD(단일 명령 다중 데이터)와 같은 명령어를 사용하면, CPU는 하나의 연산 명령으로 여러 데이터를 동시에 처리할 수 있다.

    [정리하면]
    쿼리 벡터화를 효과적으로 사용하기 위해 스크림라인된 배열 지향 처리와 칩 내 CPU 명령어를 활용한다.

     

    Data Ingestion

    SingleStoreDB는 다양한 소스에서 데이터를 연속적으로 또는 벌크(대량, bulk)로 로드할 수 있습니다.

    주로 사용되는 로딩 소스로는 파일, kafka 클러스터, Amazon S3와 같은 클라우드 저장소, HDFS, 그 외의 데이터베이스가 있습니다. 분산 시스템으로서 SingleStoreDB는 병렬 로딩을 사용하여 데이터를 스트리밍하기 때문에 처리량을 극대화합니다.

     

    SingleStore 파이프라인은 Kafka, S3, Azure Blob, 파일 시스템과 같은 소스를 사용하여 외부 데이터를 쉽게 추출, 변환하고 로드할 수 있는 내장 기능입니다. 지원하는 소스의 데이터를 가져올 때, 데이터를 실시간으로 수집하고 처리해야 하는 시나리오에 이상적입니다. 이를 통해 장시간 실행되는 배치작업과 같은 프로세스를 제거할 수 있습니다.

     

    대량 데이터 로드 작업의 경우, SingleStoreDB는 파일을 병렬로 가져와서 성능을 극대화하는 'LOAD DATA' 기능을 제공합니다. 이를 통해 높은 처리량과 효율성을 제공하며 대규모 데이터 세트를 빠르게 로드할 수 있습니다.

     

    Load Data with Pipelines

    SingleStore 파이프라인은 외부 소스의 데이터를 지속적으로 로드하는 기능입니다. SingleStoreDB의 내장 기능인 파이프라인은 다른 도구 없이 외부 데이터를 추출하고 변환하여 로드할 수 있습니다. 이 기능은 확장 가능하며, 높은 성능을 제공하며 완전 분산 워크로드를 지원합니다. 파이프라인은 소스로 Apache Kafka, Amazon S3, Azure Blob Storage, 파일 시스템, Google Cloud Store, HDFS를 지원하며, 데이터 형식은 JSON, Avro, Parquet, CSV를 지원합니다.

    데이터베이스 백업은 오프셋(offset)과 같은 해당 데이터베이스의 모든 파이프라인 상태를 보존합니다. 백업으로 복원할 때, 해당 데이터베이스의 모든 파이프라인은 대상 백업이 생성될 때의 상태로 돌아갑니다. 

    이러한 기능들은 SingleStore 파이프라인으로 데이터 처리 및 관리를 하는데 매우 유용합니다. 특히 실시간 데이터 스트리밍 및 ETL(변환, 추출, 로드) 작업을 단순화하고 높은 처리량과 빠른 데이터 처리 속도를 요구하는 응용 프로그램에 적합합니다.

     

    High Compatible(높은 호환성)

    SingleStoreDB는 ODBC 호환 데이터베이스입니다. MySQL과 wire 프로토콜 호환이 가능하여 MySQL 드라이버를 사용하는 애플리케이션은 SingleStoreDB와 연결해서 사용할 수 있습니다. SingleStoreDB는 MySQL 문법과 내장 함수를 일부 지원하여 MySQL에서 실행되는 대부분의 쿼리는 SingleStoreDB에서 변경 없이 사용 가능합니다.

     

     

     

    References

    https://docs.singlestore.com/db/v8.5/introduction/how-singlestoredb-works/

    반응형

    댓글