5000년 전 데이터베이스: 현대 데이터베이스보다 안정적인가?

2025-09-06

5000년 전 수메르 문명의 데이터베이스 사진이 데이터베이스의 날짜 저장 상한선에 대한 저자의 고찰을 불러일으켰습니다. 사진은 기원전 3100년 보리와 맥아 기록을 보여주는데, 그 신뢰성은 현대 데이터베이스를 훨씬 능가합니다. 테스트 결과 MySQL은 기원전 4713년 이전 날짜를 저장할 수 없었지만, PostgreSQL과 SQLite는 저장이 가능했습니다. 이를 통해 저자는 박물관 소장품 기록 등 더 오래된 날짜를 어떻게 저장할지 고민하며, 에포크 타임스탬프나 사용자 지정 시스템 사용 등을 제안했습니다.

더 보기
(avi.im)
개발

데이터베이스가 캐시를 완전히 대체할 수 있을까?

2025-08-31

이 글에서는 데이터베이스가 캐시를 완전히 대체할 수 있는지에 대한 가능성을 탐구합니다. 데이터베이스는 버퍼 풀과 읽기 복제본과 같은 일부 캐싱 기능을 제공하지만, 캐시는 특히 특정 데이터 하위 집합과 미리 계산된 데이터에 대해 낮은 대기 시간 데이터 액세스에서 뛰어납니다. 캐시를 대체하려면 데이터베이스는 많은 읽기 복제본을 효율적으로 처리하고, 부분적인 읽기 복제본을 활성화하고, 특정 데이터의 우선 순위를 지정하고, 효율적인 증분 뷰 유지 관리(IVM) 메커니즘을 구현하는 등 몇 가지 과제를 해결해야 합니다. 저자는 IVM과 부분적인 읽기 복제본을 결합하면 결국 데이터베이스가 캐시를 부분적으로 대체할 수 있을 것이라고 생각하지만, 여전히 격차가 남아 있다고 생각합니다.

더 보기
(avi.im)

SQLite의 WAL 모드: 내구성과 성능 간의 절충

2025-08-24

SQLite의 WAL(Write-Ahead Log) 모드는 더 높은 쓰기 처리량을 위해 자주 사용되지만, 기본 저널 모드와 비교하여 데이터 내구성이 저하됩니다. `synchronous` pragma는 fsync가 호출되는 빈도를 제어하며, 기본값은 NORMAL입니다. NORMAL 모드에서는 WAL 파일이 각 체크포인트 전에 동기화되고 데이터베이스 파일은 각 체크포인트 후에 동기화되지만, 대부분의 트랜잭션에서는 동기화 작업이 수행되지 않습니다. 내구성이 중요하지 않은 애플리케이션에서는 NORMAL로 충분합니다. 정전 시에도 내구성을 보장하려면 `synchronous=FULL`을 사용하면 각 트랜잭션 커밋 후에 WAL 파일 동기화가 추가되어 내구성이 향상되지만, 쓰기 속도가 저하됩니다. SurrealDB가 벤치마크 성능을 위해 내구성을 희생하고 있다는 우려를 받아 이 설명은 SQLite의 접근 방식을 명확히 합니다.

더 보기
(avi.im)

SQLite WAL 모드의 체크섬 문제: 조용한 데이터 손실

2025-07-25

이 글에서는 SQLite의 Write-Ahead Logging(WAL) 모드에서 체크섬 메커니즘의 결함에 대해 논의합니다. WAL 프레임에서 체크섬 불일치가 발생하면 SQLite는 손상된 프레임과 그 이후의 모든 프레임을 조용히 삭제합니다. 이러한 프레임이 손상되지 않았더라도 마찬가지입니다. 이 디자인은 의도적인 것이지만 잠재적인 데이터 손실로 이어질 수 있습니다. 저자는 근본 원인을 분석하고 데이터 무결성을 위해 SQLite가 손상을 감지했을 때 오류를 발생시켜야 한다고 제안합니다. 또한 임베디드 시스템 및 모바일 장치에서 SQLite의 사용에 대해서도 논의합니다.

더 보기
(avi.im)
개발

SQLite: 놀라운 데이터베이스 전설

2024-12-30

세계에서 가장 널리 배포된 데이터베이스인 SQLite는 3명의 팀이 유지 관리하며, 외부 기여를 거부함에도 불구하고, 탁월한 성능과 안정성으로 세계를 정복했습니다. 서버 다운타임 문제를 해결하기 위해 미국의 군함에서 탄생한 SQLite는 이제 수조 개의 데이터베이스의 기반이 되었습니다. SQLite는 오픈소스가 아니고, 오픈소스 라이선스보다 제약이 적은 퍼블릭 도메인 소프트웨어입니다. 운영 체제 충돌과 같은 극단적인 상황을 시뮬레이션하는 엄격한 테스트 프로세스를 통해 매우 높은 신뢰성을 보장합니다. 그러나 유료 지원과 회원 제도를 통해 수익을 창출하는 독특한 비즈니스 모델도 주목할 만합니다. SQLite의 전설은 기술력뿐만 아니라 그 이면의 끈기와 혁신성에도 있습니다.

더 보기
(avi.im)
개발 전설

블룸 필터: SQLite 속도를 10배 향상시킨 비결

2024-12-22

연구원들은 블룸 필터를 영리하게 사용하여 SQLite 분석 쿼리 속도를 10배 향상시켰습니다. SQLite의 중첩 루프 조인이 비효율적이며 B-트리 프로브에 많은 시간이 소요된다는 것을 발견했습니다. 조인 작업 전에 블룸 필터를 사용하여 일치하지 않을 가능성이 높은 행을 빠르게 필터링하고, 잠재적인 일치 항목에 대해서만 B-트리 프로브를 수행함으로써 프로브 횟수를 크게 줄였습니다. 블룸 필터는 메모리 오버헤드가 최소화되고 SQLite의 기존 쿼리 엔진에 통합하기도 쉬워 성능이 크게 향상되었습니다. 이러한 개선 사항은 SQLite v3.38.0에 통합되었습니다.

더 보기
(avi.im)

Rust 기반 SQLite 재작성: Limbo 프로젝트, 대기 시간 100배 감소 달성

2024-12-16

헬싱키대학교와 케임브리지대학교 연구진이 SQLite를 Rust로 재작성하여 비동기 I/O와 io_uring을 활용한 Limbo 프로젝트를 개발했습니다. 이 프로젝트는 특히 멀티테넌트 서버리스 환경에서 최대 100배의 테일 레이턴시 감소를 달성했습니다. 동기 바이트코드 명령어를 비동기 명령어로 대체하여 블로킹을 방지하고 병렬 처리 성능을 향상시켰습니다. Limbo의 개선은 특히 높은 백분위수 레이턴시에서 두드러지게 나타나며, 높은 신뢰성이 요구되는 애플리케이션에 적합합니다.

더 보기
(avi.im)
개발 비동기 I/O