russellromney/honker
요약
honker는 SQLite 데이터베이스를 위한 Rust 기반 확장 기능으로, PostgreSQL의 'NOTIFY/LISTEN' 메커니즘과 같은 강력한 메시징 기능을 구현했습니다. 이 도구는 트랜잭션이 성공적으로 커밋될 때만 큐에 데이터를 추가하는 '트랜잭셔널 아웃박스 패턴'을 지원하여 데이터 일관성을 보장합니다. 개발자는 Python 코드를 통해 간편하게 작업 큐(job queue)를 생성하고, Kafka 스타일의 내구성 있는 이벤트 스트림을 발행 및 구독할 수 있습니다.
핵심 포인트
- SQLite에 PostgreSQL 수준의 메시징 기능(NOTIFY/LISTEN) 구현
- 트랜잭셔널 아웃박스 패턴을 지원하여 데이터 일관성 보장 (커밋 시점에만 큐에 기록)
- Python 바인딩을 통해 작업 큐 및 이벤트 스트림 처리가 용이함
- WAL 모드와 폴링 메커니즘을 사용하여 실시간에 가까운 낮은 지연 시간 처리 가능
russellromney/honker
russellromney/honker(via) SQLite 를 위한 'Postgres NOTIFY/LISTEN' 의미론을 구현한 Rust 기반 SQLite 확장 및 다양한 언어 바인딩으로 이를 활용하도록 돕습니다.
이 설계는 매우 견고해 보입니다. 큐를 작성할 때 다음과 같은 Python 코드를 사용할 수 있습니다:
import honker
db = honker.open("app.db")
emails = db.queue("emails")
emails.enqueue({"to": "alice@example.com"}) # (워커 프로세스에서) 소비
async for job in emails.claim("worker-1"):
send(job.payload)
job.ack()
그리고 Kafka 스타일의 내구성 있는 스트림은 다음과 같이 작성할 수 있습니다:
stream = db.stream("user-events")
with db.transaction() as tx:
tx.execute("UPDATE users SET name=? WHERE id=?", [name, uid])
stream.publish({"user_id": uid, "change": "name"}, tx=tx)
async for event in stream.subscribe(consumer="dashboard"):
await push_to_browser(event)
또한 20 개 이상의 사용자 정의 SQL 함수를 추가하며, 그중 두 가지는 다음과 같습니다:
SELECT notify('orders', '{"id":42}');
SELECT honker_stream_read_since('orders', 0, 1000);
이 확장 기능은 WAL 모드를 필요로 하며, 워커는 .db-wal 파일을 1ms 간격으로 stat 호출로 폴링하여 전체 SQL 쿼리를 실행하는 비용 없이 가능한 한 실시간에 가까운 처리를 할 수 있습니다.
honker 는 transactional outbox pattern(트랜잭셔널 아웃박스 패턴)을 구현하여 트랜잭션이 성공적으로 커밋될 때만 항목이 큐에 추가되도록 보장합니다. 이 패턴에 대한 저자의 가장 좋아하는 설명은 Brandur Leach 의 'Postgres 의 Transactionally Staged Job Drains'입니다. SQLite 에 대한 이 패턴의 새로운 구현을 볼 수 있어 좋습니다.
최근 기사
- LLM 0.32a0 는 주요 호환성 유지 개편 - 2026 년 4 월 29 일
- 이제 사망한 OpenAI Microsoft AGI 조항의 역사 추적 - 2026 년 4 월 27 일
- DeepSeek V4 - 거의 최전선에 있으며 가격의 일부 - 2026 년 4 월 24 일
AI 자동 생성 콘텐츠
본 콘텐츠는 Simon Willison Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기