ホームRustrussellromney/honker
russellromney

honker

Database🌱 NEW PROJECT BOOST#SQLite#PubSub#Task Queue#Rust#Backend
GitHub で見る →
22

// 概要

Honker は SQLite の拡張機能および言語バインディングであり、Postgres スタイルの NOTIFY/LISTEN セマンティクス、永続的な pub/sub、およびタスクキューをデータベース内で直接提供します。ビジネスロジックの書き込みとキュー操作を同一トランザクション内でアトミックにコミットできるため、Redis のような外部ブローカーが不要になります。従来のクライアントポーリングに頼らず SQLite のデータバージョンを監視することで、1 桁ミリ秒の反応速度を実現しています。

// 技術解説

Honker は、Postgres スタイルの NOTIFY/LISTEN セマンティクス、永続的な pub/sub、およびタスクキューを SQLite データベースファイル内に直接実装する SQLite 拡張機能であり、マルチ言語ライブラリです。プロセス間通信に単調増加する PRAGMA data_version カウンターを活用することで、Redis や Celery といった外部ブローカーを不要にし、ビジネスロジックとキュー操作を単一のトランザクション内でアトミックにコミットできます。この設計はデータ整合性と運用の簡素化を優先しており、データベースがコミットされるたびにサブスクライバーが起動する「オーバートリガー」のオーバーヘッドを許容することで、複雑なポーリングなしにミリ秒未満の反応時間を実現しています。

// 主要ハイライト

01
アトミックなトランザクション結合を提供し、ビジネス上の書き込みとキュー操作が確実に同時にコミットまたはロールバックされるようにします。
02
高コストなポーリングを使用する代わりに PRAGMA data_version を監視することで、1 桁ミリ秒のプロセス間通知レイテンシを実現します。
03
優先順位、遅延ジョブ、指数バックオフによる再試行、デッドレターテーブルを備えた堅牢なワークキューシステムを内蔵しています。
04
コンシューマーごとのオフセットを持つ永続的なイベントストリームをサポートし、信頼性の高いメッセージリプレイと pub/sub 機能を実現します。
05
ロード可能な SQLite 拡張機能として機能し、SQLAlchemy、Django、Drizzle を含むあらゆる SQLite クライアントや ORM とのシームレスな統合を可能にします。
06
Python、Node.js、Rust、Go、Ruby、Bun、Elixir 向けのネイティブバインディングにより、幅広い言語サポートを提供します。

// ユースケース

01
ビジネスロジックのトランザクションと同時に行うアトミックなタスクエンキュー
02
コンシューマーごとのオフセット追跡を備えた永続的な pub/sub ストリーム
03
プロセス間通知および crontab スタイルの定期的なタスクスケジューリング

// クイックスタート

開始するには、使用する言語用の honker パッケージをインストールし(例: 'pip install honker')、ライブラリが提供する open メソッドを使用して SQLite データベースファイルを開きます。その後、キューやストリームを定義し、ライブラリのトランザクションコンテキストを使用して、データベースへの書き込みと同時にタスクのエンキューやイベントのパブリッシュをアトミックに行うことができます。ワーカープロセスについては、claim イテレーターまたは提供されている CLI ワーカーコマンドを使用して、データベースにコミットされたジョブを処理します。