概要
honker は、 SQLiteファイル内 で耐障害性キュー、ストリーム、pub/sub、cronスケジューラを提供。 Postgres風のNOTIFY/LISTEN を実現し、 追加ミドルウェアやデーモン不要。 複数言語対応 で同一ファイル・同一フォーマットを共有。 トランザクション一貫性 で、ビジネスデータとキュー操作を同時に管理可能。 運用コスト削減 と 低レイテンシ を両立。
honker:SQLiteで実現する耐障害性キュー・ストリーム・Pub/Sub・Cron
- honker は、 SQLiteファイル に耐障害性キュー、ストリーム、pub/sub、cronスケジューラを統合
- PostgresのNOTIFY/LISTEN のような通知セマンティクスを SQLite にもたらす
- クライアント側ポーリング不要、 デーモンやブローカー不要 の設計
- クロスプロセスのウェイクレイテンシ は 約0.7ms(MシリーズMac) の高速応答
- SQLite拡張として提供、どの言語でも
SELECT load_extension('honker_ext')で利用可能 - Python、Node、Rust、Go、Ruby、Bun、Elixir バインディングが 共通オンディスクフォーマット を共有
SQLiteを主データストアとする利点
- Bluesky’s PDS、Fly’s LiteFS、Turso など実運用例多数
- SQLite利用アプリ では 耐障害性キュー が不可欠
- 従来は Redis+Celery などを追加導入し、 二重管理や運用負荷増加 が発生
- honker は「 キューも同一SQLiteファイル内」という設計思想
- INSERT INTO orders と queue.enqueue(...) が 同一トランザクション で実行
- ロールバック 時は 両方とも巻き戻し、一貫性確保
- キューはテーブルの行 として管理、 パーシャルインデックス で高速アクセス
マルチ言語・シンプルなAPI
- 同一.dbファイル・同一フォーマット で 7言語 サポート
- Python、Node、Rust、Go、Ruby、Bun、Elixir、C++、SQL(拡張)
- Python例
- 同一トランザクション でビジネスデータとキュー投入
- ワーカーはコミット時に自動ウェイク、 ポーリング不要
- Huey風デコレータ でタスク定義・再試行・タイムアウトも簡単
内部動作とパフォーマンス
- PRAGMA data_version を 1msごとにポーリング
- SQLiteのコミットごと にインクリメントされる 単調カウンタ を利用
- 3μsで読める ため 高効率なウェイク信号
- 1データベース1ポーラースレッド、リスナー数が増えても負荷一定
- SELECTのみ で ページキャッシュ負荷・ロック競合なし
- リスナー数増加によるスケールも容易
ACIDトランザクションと拡張性
- キューやストリーム、pub/sub は 拡張が管理するテーブルへのINSERT
- queue.enqueue(payload, tx=tx) で ビジネスロジックと同一トランザクション
- ロールバック時はジョブも同時に消去、整合性維持
- pg_notify は高速だが リトライや可視性なし
- Huey (SQLiteバックエンドPythonタスクキュー)から多くを参考
- pg-boss、Oban はPostgres向け標準、Postgres利用者はそちら推奨
導入方法
- Python例:
pip install honker - Node、Rust、Go、Ruby、Bun、Elixir、C++ 等でも利用可能
- SQLite拡張 として 既存ワークフローに容易に統合
honker導入による運用コスト削減と一貫性の強化
- 追加ミドルウェア不要 による 運用・保守コスト削減
- ビジネスデータとキューの同時管理 で データ一貫性 を実現
- 低レイテンシ・高スケーラビリティ で 本番運用にも最適
- SQLiteを主データストアとするアプリ における 耐障害性キューの最適解