ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RocksDB 알아보기
    BigData 2021. 12. 15. 12:24
    728x90
    반응형

    - 목차

     

    소개.

    RocksDB 에 대해서 알아보려고 합니다.
    RocksDB 는 대표적인 Key-Value Storage 이자 Embedded Storage 입니다.
    빅데이터를 처리하는 여러 어플리케이션에서 주로 사용하는 내부 스토리지인데요.
    대표적으로 Apache Flink 가 있습니다.
     
    RocksDB 는 File 기반으로 데이터를 저장하고 조회하지만,
    특유의 특성으로 인해 빠른 속도의 IO 가 가능합니다.
     
    MemTable 의 Write Buffer 와 SSTable 의 빠른 조회를 기반으로
    RocksDB는 높은 퍼포먼스를 보입니다.
     
    이어지는 내용에서 자세히 알아보겠습니다.

    RocksDB Structure.

     

    MemTable.

    MemTable 은 Memory Table 의 약자로, Rocksdb 의 In-memory 구조의 하나입니다.
    MemTable 은 Read/Write 의 효율을 높이기 위해서 사용되는데요.
    일차적으로 모든 Write 요청은 MemTable 에 저장하고, 특정 시점이 지나는 모든 데이터들은 Disk 로 Flush 됩니다.
    이렇게 MemTable 는 많은 양의 Key-Value Pair 들이 안전히 Disk Flush 될 수 있도록
    Write Buffer 로써 동작합니다.
     
    MemTable 이 데이터들을 Flush 하는 기준은 메모리에 저장된 데이터의 양인데요.
    min_write_buffer_number_to_merge 와 같은 설정으로 지정이 가능합니다.
    지정된 사이즈만큼 MemTable 에 데이터가 차게되면, Flush 가 트리거됩니다.
    MemTable 은 Write Buffer 로써 동작합니다.
     
    그리고 Flush 되기 이전까지 MemTable 에 위치하는 데이터들은 Read 를 위한 cache 로써 동작합니다.
    Flush 가 된 이후에는 모든 Key-Value Pair 데이터들은 SSTable 이라는 파일로 저장되고,
    이 단계 이후에는 SSTable 에서 Read 작업이 수행됩니다.
     

    SSTables.

    SSTableSorted String Table 의 약자입니다.
    MemTable 이 Rocksdb 의 In-memory 구조였다면,
    MemTable 이 Flush 하여 Disk 에 저장된 형태가 바로 SSTable 입니다.
     
    MemTable 이 어느 정도 데이터가 차게되면, Flush 단계가 진행되는데요.
    해당 Flush 작업은 Background Process 진행되고, 진행 과정 동안은 퍼포먼스에 저하됩니다.
     
    SSTable 는 Key-Value Pair 데이터들이 Key 를 기준으로 정렬되어 저장됩니다.
    그리고 자체적인 Indexing 체계와 정렬 탐색 알고리즘을 사용하여,
    조회 속도를 높입니다.
     
     

    Compactions.

    Compaction 은 여러 개의 작은 SSTable 들을 하나의 큰 SSTable 로 병합하는 과정입니다.
    Compaction 과정은 주기적으로 발생하며,
    RocksDB 의 compaction_ttl 설정으로 그 주기를 지정할 수 있습니다.
     
    수 차례 Compaction 을 거치면서 RocksDB 는 최소한의 SSTable 을 가지게 됩니다.
    클라이언트가 특정 Key 의 조회를 요청한다면,
    최소한의 SSTable 파일을 열어 읽어들이고, 정렬된 Key 로부터 데이터를 찾으니
    조회하는데에 소비되는 시간이 길지 않습니다.
     
    결론적으로 Compation 을 통해서 Disk IO 의 빈도를 줄이게 됩니다.
     
     

    Write-Ahead Log (WAL).

    WAL log 는 Write Operation 들을 저장합니다.
    SQL 데이터베이스의 Bin log 처럼 Write Operation 들을 기록하며,
    Crash Recovery 용도로 사용됩니다.
     
     

    Embedded Storage.

    Embedded Storage 는 데이터베이스 서버 또는 스토리지 서버로써 단독으로 사용되기보다,
    특정 시스템 또는 프로세스를 위해서 사용되는 형태의 저장소를 의미합니다.
    MySQL 이나 Mongodb 같이 Standalone Database Server,
    Minio 나 ZooKeeper 같은 Storage Server 처럼 단독으로 사용되진 않습니다.
    Sqlite 과 같이 한 프로그램에 내부 저장소로써 사용된다고 생각하시면 됩니다.
     
    RocksDB 는 전용 네트워크 프로토콜이나 API 를 가지고 있진 않습니다.
    만약 RocksDB 를 Standalone Storage Server 로 사용해야한다면, 부가적인 서버의 도움이 필요합니다.
     
    RocksDB 는 Flink, Hadoop 같은 빅데이터 처리 분야에서 Embedded Storage 로 사용됩니다.

    반응형

    'BigData' 카테고리의 다른 글

    Avro Serialization 알아보기.  (0) 2023.10.05
    Avro File 알아보기  (0) 2023.10.04
    RabbitMQ 에 대해서  (0) 2023.04.09
    apache spark 란  (0) 2023.01.12
    hdfs (hadoop) 에 대해서  (0) 2023.01.11
Designed by Tistory.