피드로 돌아가기
Dev.toDatabase
원문 읽기
P99 지연시간 0.4ms 달성 및 Real-time Control Loop 최적화를 위한 Two-tier Storage 설계
I Built a Database Engine in Rust for My Robot and Learned That SQLite Was the Wrong Battle
AI 요약
Context
SQLite 기반의 SD 카드 저장 구조에서 다수 프로세스의 동시 쓰기 및 File Lock 경합으로 인한 DB Corrupt 발생. 특히 200Hz 주기의 제어 루프에서 Page Fault로 인한 비결정적 Latency Spike가 서보 모터 지터(Jitter)를 유발하는 한계 직면.
Technical Solution
- Hot/Cold Storage 분리를 통한 Two-tier Architecture 설계로 쓰기 경로 최적화
- Hot Store에 Lock-free Ring Buffer를 도입하여 파일 시스템 접근을 완전히 제거한 메모리 직접 액세스 구현
- Cold Store에 Append-only Binary File 구조를 채택하여 fsync 비용 최소화 및 쓰기 성능 향상
- Schema Migration 제거를 위해 Binary Format Versioning 방식을 도입하여 런타임 락(Lock) 제거
- Power-loss 상황에서도 상태 일관성을 유지하는 Write-ahead Copy 메커니즘 적용
- MMAP의 비결정적 Page Fault 문제를 회피하기 위한 직접 메모리 관리 전략 수립
실천 포인트
- 제어 루프 내에서 MMAP 사용 시 Page Fault로 인한 비결정적 지연 시간 발생 가능성을 검토할 것 - 빈번한 스키마 변경이 예상되는 임베디드 환경에서는 Migration Script 대신 Format Versioning 도입을 고려할 것 - 쓰기 지연이 시스템 전체의 안정성에 영향을 주는 경우, 메모리 기반 Ring Buffer와 Append-only Log의 조합을 검토할 것