피드로 돌아가기
GeekNewsDatabase
원문 읽기
Honker - SQLite에 Postgres NOTIFY/LISTEN을 구현하는 확장
WAL 폴링 기반 SQLite NOTIFY/LISTEN 구현으로 1ms 지연 달성
AI 요약
Context
SQLite는 서버리스 구조로 인해 Postgres의 NOTIFY/LISTEN과 같은 Push 기반 이벤트 전달 메커니즘이 부재함. 기존의 주기적 쿼리 방식은 오버헤드가 크며, 외부 메시지 브로커 도입 시 비즈니스 데이터와 이벤트 발행 간의 원자성(Atomicity) 결여로 인한 정합성 문제가 발생함.
Technical Solution
- WAL 파일의
stat(2)및PRAGMA data_version을 활용한 3계층 폴링 구조 설계 PRAGMA data_version을 통한 1ms 주기 모니터링으로 commit counter 기반의 정확한 변경 감지 구현stat(2)를 100ms 주기로 실행하여 파일 교체(Atomic Rename, Volume Remount) 상황을 감지하는 이중 안전장치 마련- 이벤트 큐와 구독자 상태를 SQLite 내 Row로 관리하여 비즈니스 로직과 이벤트 발행을 단일 트랜잭션으로 묶는 원자적 커밋 구조 채택
- OS별 Inotify/FSEvents의 신뢰성 문제와 크로스플랫폼 호환성을 고려하여 가장 범용적인
stat폴링 방식을 유지하는 Trade-off 결정 Events INNER JOIN Subscribers쿼리를 통한 효율적인 구독자 필터링 및 타겟 프로세스 깨우기 메커니즘 적용
실천 포인트
단순한 시스템을 위해 무거운 브로커를 도입하기 전, DB의 WAL이나 메타데이터 변경 사항을 저비용 폴링으로 감시하여 Event-Driven 구조를 구현할 수 있는지 검토할 것. 특히 데이터 정합성이 중요하다면 이벤트 발행을 DB 트랜잭션 내에 포함시키는 설계를 최우선으로 고려해야 함.