SNKV- sqlite B-트리 엔진 기반 키-값 스토어

발행: (2026년 3월 5일 오후 07:52 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

개요

RocksDB, LevelDB 등 다양한 키‑값 저장소가 존재합니다.
SQLite는 SQL 데이터베이스이지만, 저장 엔진으로 활용되는 경우가 많습니다. 이러한 배경에서 SNKV가 만들어졌습니다:

  • Repository:

아키텍처

SNKV의 아키텍처는 매우 단순합니다:

kvstore layer → b‑tree layer → pager → OS

하위 레이어들은 이미 검증된 배틀‑테스트를 거쳤으며, 프로덕션 환경에서도 사용할 수 있습니다.

C/C++ 프로젝트에서 SNKV 사용하기

  1. 단일 헤더 파일을 생성합니다:

    make snkv.h

    또는 0.4.0 릴리스의 ZIP 파일을 다운로드합니다.

  2. .c 또는 .cpp 파일에 헤더를 포함하고, 첫 번째 포함 전에 구현 매크로를 정의합니다:

    #define SNKV_IMPLEMENTATION
    #include "snkv.h"

    이렇게 하면 구현이 실행 파일에 컴파일됩니다.

  3. API 명세서를 검토하여 자세한 내용을 확인합니다:

Python 지원

Python 개발자는 pip을 통해 SNKV를 설치할 수 있습니다:

pip install snkv

Python API에 대한 문서는 다음을 참고하세요:

데이터 레이아웃

전체 SQL 레이어를 우회합니다. 데이터는 다음 형식으로 저장됩니다:

key_len | key | value

이 레이아웃 덕분에 O(log n) 시간에 키 프리픽스를 기반으로 값을 빠르게 가져올 수 있습니다.
각 테이블은 캐시된 읽기 커서를 유지하여 get, exists 등의 성능을 향상시킵니다.

트랜잭션 모델

  • 읽기 트랜잭션kvstore_open 후 자동으로 시작되어 mxFrame을 찾는 데 필요한 시간을 줄입니다.
  • 쓰기 작업은 다음 순서로 진행됩니다:
    1. 현재 읽기 트랜잭션을 커밋합니다.
    2. 쓰기 트랜잭션을 실행하고 커밋합니다.
    3. 새로운 읽기 트랜잭션을 다시 시작합니다.

예제

  • Python 예제:
  • 일반 예제 (C/C++):

충돌 안전성 테스트

다음과 같은 충돌 테스트가 구현되었습니다:

  1. 10 GB WAL‑모드 데이터베이스에 결정적인 키‑값 쌍을 기록합니다.
  2. 활성 쓰기 중에 SIGKILL을 사용해 작성자를 강제로 종료합니다.
  3. 재시작 후 다음을 검증합니다:
    • 커밋된 모든 트랜잭션이 정확한 바이트 값으로 존재합니다.
    • 부분 트랜잭션이 보이지 않습니다.
    • 데이터베이스에 손상이 전혀 없습니다.

생태계 지원

SNKV는 SQLite와 동일한 저장 엔진을 사용하므로, SQLite 하위 레이어에 의존하는 도구들을 그대로 사용할 수 있습니다. 검증된 도구에는 다음이 포함됩니다:

  • LiteFs
  • WAL‑기반 백업 도구
  • 롤백 저널 도구

기여

문제가 발생하거나 제안이 있으면 이슈를 열어 주세요:

피드백과 의견을 언제든 환영합니다.

0 조회
Back to Blog

관련 글

더 보기 »

C#와 F#의 주요 차이점은 무엇인가요?

소개 종종 우리 .NET 클라이언트가 이 질문을 합니다: C를 사용해야 할까요, 아니면 F를 사용해야 할까요? 두 언어 모두 동일한 .NET 런타임에서 실행되며 동일한 라이브러리에 접근합니다.

이 프로젝트를 재라이선스할 권리 없음

안녕하세요, 저는 마크 필림입니다. 여러분은 제가 쓴 고전인 Dive Into Python과 Universal Character Encoding Detector를 기억하실지도 모릅니다. 저는 chardet의 원래 작성자입니다....

AI 지원 재작성으로 재라이선스

면책 조항: 저는 변호사가 아니며, copyright law 또는 software licensing 전문가도 아닙니다. 다음 게시물은 최근 커뮤니티 이벤트와 법적…