Background workers#

バックグラウンドワーカーは、 EDB Postgres AIの非同期AIパイプラインの実行エンジンです。標準のデータベーストランザクションをブロックすることなく、大量のデータを処理できます。

バックグラウンドワーカーは、auto_processing => 'Background' でパイプラインが作成または更新されると、自動的にアクティブ化されます。バックグラウンドモードを有効にする前に、必要なPostgresサーバー設定が設定されていることを確認します。

Postgresの前提条件#

バックグラウンドパイプラインを実行する前に、2つのpostgresql.conf 設定を設定する必要があります。

shared_preload_libraries#

バックグラウンドワーカーを起動する前に、postgresql.conf でshared_preload_libraries = 'aidb' を設定する必要があります。これはAIDBのインストール中に構成されます。 Configuring AIDB を参照してください。パイプラインでバックグラウンドモードを有効にする前に、設定されていることを確認してください。

max_worker_processes#

バックグラウンドモードの各パイプラインは、1つの専用のPostgresバックグラウンドワーカープロセスを必要とします。 max_worker_processes 設定は、クラスター全体で許可されるバックグラウンドワーカープロセスの数を制御します。

デフォルト値は8 です。複数のバックグラウンドパイプラインを実行する予定がある場合は、この値を増やします。

max_worker_processes = 20

この設定を変更した後、Postgresを再起動します。現在の値を確認するには

SHOW max_worker_processes;

max_worker_processes が使い果たされると、新しく作成されたバックグラウンドパイプラインはワーカーを起動せず、容量が解放されるまでサイレントに処理をスキップします。

コア機能#

  • 非同期実行 パイプラインがバックグラウンドモードに設定されている場合、処理はユーザーセッションとは無関係に発生します。この方法により、ソーステーブルのクエリまたはデータ変更が、生成またはOCRタスクの埋め込みによって遅延されません。

  • バッチ処理 バックグラウンドワーカーは、レコードを構成可能なバッチサイズにグループ化します。これにより、特にGPUベースのモデルまたはリモートAIサービスAPIと対話する場合、スループットが最適化されます。

  • パラレルオペレーション 各バッチ内で、ワーカーはパイプラインステップデータの取得、埋め込み計算、およびストレージをパラレル操作として実行して、パフォーマンスを最大化します。

  • 継続ポーリング ワーカーは、定義されたbackground_sync_interval に基づいて、変更がないかソースを継続的に監視します。

変更検出#

バックグラウンドワーカーは、特定の検出ロジックを使用してさまざまなソースタイプを処理します。

  • テーブルソース 軽量トリガーは、挿入、更新、削除などの変更イベントをキャプチャし、バックログに配置します。バックグラウンドワーカーは、次のインターバルでこのバックログを処理します。

  • ボリュームソース バックグラウンドワーカーは、外部ストレージのスキャンを実行します。ファイルのlast_modified タイムスタンプを状態テーブルと比較して、新しいドキュメントまたは変更されたドキュメントを識別します。

構成とコンストレイン#

必須#

  • Postgres前提条件 バックグラウンドワーカーには、shared_preload_libraries = 'aidb' とpostgresql.conf に十分なmax_worker_processes 値が必要です。このページの Postgresの前提条件 を参照してください。

オプションのチューニング#

``background_sync_interval`` は、ワーカーが新しいデータまたは変更されたデータをポーリングする頻度を制御します。これは、 postgresql.conf ではなく、aidb.create_pipeline() またはaidb.update_pipeline() を介してパイプラインごとに構成されます。

SELECT aidb.create_pipeline(
    name                     => my_pipeline,
    source                   => my_table,
    auto_processing          => Background,
    background_sync_interval => 30 seconds,
    ...
);

デフォルトの間隔は、ほとんどのテーブルソースに適しています。 AWS S3のようなクラウドオブジェクトストアによってバッキングされるボリュームソースの場合、各スキャンではリストオペレーションが発生し、コストまたはレート制限に影響を与える可能性があります。これらの場合、より長い間隔を検討します。

SELECT aidb.update_pipeline(
    my_s3_pipeline,
    background_sync_interval => 1 day
);

background_sync_interval は、Postgres間隔値'5 minutes' 、'1 hour' 、'1 day' などを受け入れます。

モニタリングとオブザーバビリティ#

aidb.pipeline_metrics ビュー aidb.pipem としてもアクセスを使用して、バックグラウンドワーカーのステータスと状態を追跡できます。主要なメトリックには次のものが含まれます。

  • Table- unprocessed rows テーブルソースの場合、まだ処理されていない行の数。

  • ボリューム-スキャン完了 ボリュームソースの場合、完了したフルスキャンの数。

  • Count (source records) ソース内のレコードの合計数。

  • Count (destination records) 宛先のレコードの合計数。

  • Status 現在のパイプラインのステータス。