- Makale, Postgres veritabanındaki değişiklikleri yakalamanın çeşitli yollarını ele alıyor.
- Sequin adlı şirket, Salesforce ve HubSpot gibi üçüncü taraf API'lerden verileri senkronize ederek geliştiricilerin API verilerini kendi Postgres veritabanlarını kullanarak inşa etmelerini sağlıyor.
- Postgres; tablo değişikliklerine dayalı iş akışlarını tetiklemek, ya da verileri gerçek zamanlı olarak başka veri depolarına, sistemlere veya servislere akıtmak gibi, hareket halindeki veriyi yakalamak için birden çok seçenek sunuyor.
- En basit yaklaşım, Postgres'in süreçler arası iletişim özelliği olan Listen/Notify'ı kullanmaktır. Bu, publish-subscribe deseninin bir uygulamasıdır; ancak "en fazla bir kez" teslim semantiği ve 8000 bayt yük boyutu sınırı gibi kısıtları vardır.
- Bir diğer yöntem, tabloları doğrudan polling ile sorgulamaktır; bu, her tabloda satır güncellendiğinde güncellenen bir
updated_at sütunu veya benzerinin bulunmasını gerektirir. Ancak bu yöntem, satırların ne zaman silindiğini tespit edemez ve delta sağlamaz.
- Postgres, başka bir Postgres veritabanına streaming replication'ı destekler ve bu, uygulamadaki değişiklikleri yakalamak için kullanılabilir. Ancak bu yöntem karmaşıktır ve
postgresql.conf dosyasının ayarlanmasını gerektirebilir.
- Değişiklikler, değişimleri günlüğe kaydeden denetim tabloları üzerinden de yakalanabilir. Bu yaklaşım, replication slot kullanmaya benzer, ancak daha manueldir.
- Postgres'in harici veri kaynaklarından okuma ve yazma yapmayı sağlayan özelliği olan Foreign Data Wrapper'lar (FDW'ler) da vardır. Ancak bu yöntem yalnızca çok belirli durumlarda önerilir.
- Sonuç olarak, Postgres'ta değişiklikleri yakalamanın en iyi yolu kullanım senaryosuna bağlıdır. Listen/Notify kritik olmayan olayları yakalamak için iyidir, değişiklikleri polling ile izlemek basit kullanım senaryoları için sezgisel bir çözümdür ve replication sağlam bir çözüm için en iyi tercihtir. Replication fazla zorsa, denetim tabloları iyi bir ara çözüm olabilir.
1 yorum
Hacker News görüşü
pgauditadlı bir eklentinin kullanılmasını öneriyor.updated_atsütununu poll etmek gibi belirli yöntemlerin potansiyel risklerini tartışıyor.updated_atyerinetxidsaklamayı öneriyor.