gonnux.com



REF-bdb-architecture

2026-02-14

topic/infra
topic/database
source/official-docs

원문 내용

Berkeley DB(BDB)란

Berkeley DB는 임베디드(embedded) key-value 데이터베이스 라이브러리이다. 서버/클라이언트 모델이 아니며, 프로세스 내에서 API 호출을 통해 데이터베이스에 접근한다. C로 작성되었으며, C++, Java, Python, Ruby, Go 등 다양한 언어 바인딩을 제공한다.

역사

  • UC Berkeley에서 Keith Bostic과 Margo Seltzer가 대학원생 시절 개발
  • 초기: 인메모리와 온디스크 해싱을 통합하는 것으로 시작
  • Netscape의 후원으로 LDAP 서버 개발을 위한 트랜잭션 처리 기능 추가
  • Sleepycat Software로 프로젝트 이전
  • 2006년: Oracle이 Sleepycat Software를 인수
  • 2013년: Oracle이 라이선스를 Sleepycat License에서 GNU AGPL v3로 변경
  • 마지막 릴리스: 18.1 (약 2020년 5월)

아키텍처: 5개 서브시스템

서브시스템역할
Caching (MPool)인메모리 버퍼 풀. LRU 페이지 교체 정책 사용
Datastore데이터 저장. 키-값 쌍을 DTAG 구조로 관리
Locking2단계 잠금(2PL). 다수 읽기 커서 또는 단일 쓰기 접근
LoggingWAL(Write-Ahead Logging). ARIES 모델 기반 undo/redo
Recovery체크포인팅. 장애 후 복구

데이터 접근 방법

접근 방법설명
B+Tree키 정렬 저장. 정확한 매칭 및 범위 스캔에 효율적. 가장 일반적
Hash선형 해싱. 정확한 매칭 쿼리와 균등 키 분포에 적합
Queue고정 크기 값. 순차 데이터
RecnoB+Tree 기반 순차 저장

동시성 제어

  • 기본: 2단계 잠금(Two-Phase Locking, 2PL) — 직렬화 가능 격리
  • 이후 추가: MVCC (Multi-Version Concurrency Control) — 스냅샷 격리, 더 큰 캐시 필요
  • 충돌 매트릭스로 계층적 데드락 방지

트랜잭션 및 ACID

  • 완전한 ACID 준수
  • WAL(Write-Ahead Logging): 데이터를 두 번 기록 (로그 + 실제 데이터)
  • LSN(Log Sequence Number)으로 로그 인덱싱
  • 체크포인팅으로 인메모리 버퍼를 디스크에 플러시

페이지 포맷

디스크와 메모리의 페이지 포맷이 동일하여 변환 오버헤드가 없다.

SQL 지원

Oracle이 11g R2 릴리스에서 SQLite API 기반 SQL 지원을 추가. SQLite를 BDB에 포함시켜 BDB를 스토리지 레이어로 사용.

라이선스 변경의 영향

2013년 AGPL로 라이선스 변경은 오픈소스 생태계에 큰 영향을 미쳤다:

  • BDB는 라이브러리이므로 링크하는 모든 애플리케이션이 AGPL 호환 라이선스여야 함
  • 많은 오픈소스 프로젝트와 모든 클로즈드 소스 애플리케이션에 문제 발생
  • 이로 인해 여러 프로젝트가 BDB에서 LMDB 등 대안으로 마이그레이션

사용 사례 (역사적)

  • OpenLDAP slapd: back-bdb, back-hdb 백엔드 (현재는 LMDB의 back-mdb로 대체)
  • 389 Directory Server: BDB 백엔드 (현재 LMDB로 마이그레이션 중)
  • MIT Kerberos: KDC DB2 백엔드
  • Subversion: 리포지토리 스토리지
  • RPM: 패키지 데이터베이스

메타 정보

Links