最終的には、PostgreSqlのデータ用のスケーラブルな検索ソリューションが必要です。私の発見は、Logstashを使用してPostgresからElasticSearchに書き込みイベントを送信することを示していますが、使用可能な解決策は見つかりませんでした。私が見つけた解決策は、jdbc-inputを使用して、ある間隔でPostgresからallデータをクエリすることを含み、削除イベントはキャプチャされません。
これは一般的なユースケースだと思うので、皆さんに私とあなたの経験を共有したり、先に進むためのヒントを提供したりしてください。
DELETEの通知も受け取り、Elasticsearchでそれぞれのレコードを削除する必要がある場合、Logstash jdbc入力が役に立たないことは事実です。あなたはbinlogを回避するソリューションを使用する必要があります ここで推奨
ただし、Logstash jdbc入力を引き続き使用する場合は、PostgreSQLでレコードをソフト削除するだけです。つまり、レコードをdeleted
としてマークするために新しいBOOLEAN列を作成します。その場合、同じフラグがElasticsearchに存在し、term
フィールドで単純なdeleted
クエリを使用して検索から除外できます。
クリーンアップを実行する必要があるときはいつでも、PostgreSQLとElasticsearchの両方でdeleted
のフラグが付いたすべてのレコードを削除できます。
PGSync もご覧ください。
Debeziumに似ていますが、起動して実行するのがはるかに簡単です。
PGSyncは、データをPostgresからElasticsearchに移動するための変更データキャプチャツールです。 Postgresを真の情報源として維持し、構造化された非正規化ドキュメントをElasticsearchで公開できます。
Elasticsearchでデータの構造を記述するJSONスキーマを定義するだけです。
スキーマの例を次に示します(オブジェクトをネストすることもできます)。
例えば
{ "nodes": [ { "table": "book", "columns": [ "isbn", "title", "description" ] } ] }
PGsyncは、オンザフライでドキュメントのクエリを生成します。 Logstashのようなクエリを記述する必要はありません。また、削除操作をサポートおよび追跡します。
ポーリングモデルとイベント駆動モデルの両方を操作して、日付に加えられた変更と、ある時点で発生した変更の通知を取得します。最初の同期では、前回デーモンが実行されてからの変更についてデータベースをポーリングし、その後、データベースへの変更について(トリガーに基づいてpg-notifyで処理される)イベント通知を行います。
開発のオーバーヘッドはほとんどありません。
ネストされたオブジェクトとして複数の関係を含むドキュメントを簡単に作成できます。 PGSyncは変更を追跡します。
詳細は github リポジトリをご覧ください。
PyPI からパッケージをpipインストールできます