PostgreSQL與Elasticsearch和PGSync的實時資料整合 -Tolu

banq發表於2021-11-04

PGSync是一個變更資料捕獲工具,用於將資料從Postgres轉移到Elasticsearch。它允許你保留Postgres作為你的真實來源,並在Elasticsearch中公開結構化的非規範化文件。

這對於構建後端服務以驅動文字搜尋應用或構建實時儀表盤應用非常有用。

對巢狀實體的改變會傳播到Elasticsearch。

PGSync的高階查詢生成器會根據你的模式生成SQL查詢。

只需用JSON描述你的模式,PGSync就會持續捕捉你的資料變化,並將其載入到Elasticsearch中。

PGSync提供了一個自我管理的變化資料捕獲解決方案。

 

原有問題

在高層次上,你在Postgres資料庫中擁有資料,你想在Elasticsearch中展示它。這意味著你的資料的每一個變化都需要被複制到Elasticsearch中。

起初,這似乎很容易,然後就不容易了。只需新增一些程式碼,在更新資料庫後將資料複製到Elasticsearch,或者在你的應用層面上執行所謂的雙重寫入。編寫跨越多個表和涉及多個關係的SQL查詢可能不是件容易的事。檢測巢狀檔案中的變化也可能相當困難。

當然,如果你的資料從未發生過變化,那麼你可以直接拍下時間快照,然後將其載入到Elasticsearch中。請記住,你不應該真的把你的主要資料儲存在Elasticsearch中。

Elasticsearch更適合作為一個次要的非規範化搜尋引擎,與傳統的規範化資料儲存一起使用。

其中一個挑戰是在合理的時間範圍內將資料從真實源中取出並放入二級儲存。

現有的工具,如Apaches的Kafka、Amazons的Kinesis或Elastics的Logstash需要相當多的工程和專業知識。

如何解決問題

PGSync利用PostgreSQL 9.4中引入的Postgres的邏輯解碼功能來捕獲連續的變化事件流。

PGSync的查詢生成器能夠根據你的模式動態地建立高階關係查詢。

只需在Elasticsearch中定義一個描述資料結構的模式(JSON),引導資料庫並啟動PGSync守護程式。

它同時執行一個輪詢和一個事件驅動的模型,以捕獲到日期的變化,並通知在某個時間點發生的變化。最初的同步會輪詢資料庫自上一次迭代以來的變化,此後對資料庫的變化恢復到事件通知(基於觸發器並由pg-notify處理)。

不需要用諸如 "updated_at"、"timestamp "或 "status "等欄位來汙染你的資料庫,以檢測和跟蹤行級變化。

 

PGSync降低了大多數應用程式堆疊的複雜性。

  •     Postgres是你的讀/寫事實來源,而Elasticsearch是你的只讀搜尋層。
  •     你有不斷變化的資料。
  •     你在現有的關係型資料庫(如Postgres)中擁有資料,你需要一個輔助的NoSQL資料庫,如Elasticsearch,用於基於文字或自動完成查詢。
  •     你想避免其他工具所規定的開發開銷和複雜性。

 

安裝需要:

Prerequisites: Python 3.6+, Redis 3.1.0+, Elasticsearch 5.0+, PostgreSQL 9.4+.

Install PGSync from PyPi.

$ pip install pgsync
$ pgsync --config <absolute path to JSON schema config> --daemon

 原始碼:Github repository.

 

相關文章