22 puan yazan xguru 2024-08-14 | 3 yorum | WhatsApp'ta paylaş

Tam metin arama (Full Text Search)

  • Tam metin arama, belirli anahtar kelimelerin ve ifadelerin varlığına göre bir metin koleksiyonundaki öğeleri bulma tekniğidir
  • Elasticsearch gibi çoğu arama motoru, arama sonuçlarını sıralamak için BM25 algoritmasını kullanır
    • BM25, bir terimin ne kadar sık göründüğünü ve tüm belgeler arasında ne kadar ayırt edici olduğunu dikkate alır
  • Tam metin arama, sonuçları anlamsal benzerliğe göre bulan ve sıralayan benzerlik araması veya vektör aramasından farklıdır
  • Birçok modern uygulama, daha doğru sonuçlar elde etmek için tam metin arama ile benzerlik aramasını birleştirir; buna hibrit arama denir

Postgres FTS

Avantajlar

  1. Basitlik

    • Postgres FTS ek altyapı gerektirmez ve AWS RDS gibi tüm yönetilen Postgres servislerinde kullanılabilir
    • Uzun vadede harici bir arama motorunu orkestre etme ve yönetme ihtiyacını ortadan kaldırarak ciddi zaman ve emek tasarrufu sağlar
  2. Gerçek zamanlı arama

    • Postgres FTS'te veriler commit edilir edilmez aranabilir hale gelir
    • Bu, kullanıcıya dönük arama deneyimleri veya gecikmeye duyarlı arama deneyimleri geliştiren şirketler için (ör. e-ticaret siteleri veya fintech) çok faydalı olabilir
  3. Postgres işlemleri ve MVCC

    • Postgres'in ACID işlemleri ve çok sürümlü eşzamanlılık denetimi (MVCC), eşzamanlı erişim ve sık güncellemeler sırasında FTS sonuçlarının güvenilirliğini sağlar

Dezavantajlar

  1. Eksik özellik seti

    • Postgres FTS'in sınırlı özellik seti bazı şirketler için oyunu bozan bir unsur olabilir
    • Eksik özellikler arasında BM25 skorlaması, alaka düzeyi ayarı, özel tokenizer'lar ve faceting yer alır
  2. Büyük veri kümelerinde performans düşüşü

    • Postgres FTS, milyonlarca satır içeren tablolarda iyi çalışsa da onlarca milyon satırlı tablolarda performans belirgin şekilde düşer
  3. İşlem ek yükü

    • Bir kolonda GIN indeks oluşturmak, o kolonu etkileyen işlemlere az da olsa gecikme (genellikle milisaniyeler) ekler

Temel özet

  • Postgres FTS, gelişmiş FTS sorguları gerektirmeyen küçük ve orta ölçekli tablo aramaları için idealdir
  • "Orta ölçekli" ve "gelişmiş" terimleri bilinçli olarak muğlak bırakılmıştır, çünkü bunların anlamı performans gereksinimlerine göre değişir
  • Neyse ki Postgres FTS'e geçiş yapmak veya Postgres FTS'ten taşınmak oldukça kolaydır

Elasticsearch

Avantajlar

  1. Kapsamlı özellik seti

    • Elasticsearch neredeyse her türlü FTS sorgusunu işleyebilir
    • Elastic query DSL (alan özel dil), tam metin arama özellikleri için standarttır
  2. Yüksek performans

    • Benchmark'lara göre Elasticsearch, battle-tested Lucene arama motoru ve dağıtık mimarisi sayesinde milyarlarca satırı milisaniye düzeyinde sorgulayabilir
  3. Aramanın ötesinde özellikler

    • FTS'in yanı sıra Elasticsearch bir analitik sorgu motoru, vektör veritabanı, güvenlik ve gözlemlenebilirlik platformudur
    • Birçok kuruluş, birden fazla servisi Elasticsearch içinde birleştirmenin sağladığı sadeliği tercih eder

Dezavantajlar

  1. Güvenilir bir veri deposu değildir

    • Pek çok şirket, Elasticsearch'ü birincil veri deposu olarak kullanma kararından sonradan pişman olmuştur
    • Bu önerilen bir yaklaşım değildir. Elasticsearch'te ACID işlemleri ve MVCC bulunmadığından veri tutarsızlığı ve kaybı yaşanabilir; ayrıca ilişkisel özelliklerin ve gerçek zamanlı tutarlılığın eksikliği birçok veritabanı sorgusunu zorlaştırır
  2. ETL hattı gerektirir

    • Elasticsearch güvenilir bir veri deposu olmadığından, Postgres kullanan kuruluşlar genellikle veriyi Postgres'ten Elasticsearch'e extract, transform, load (ETL) süreciyle taşır
    • ETL hattındaki arızalar her türlü prodüksiyon kesintisine yol açabileceğinden, temel Postgres şemasındaki değişikliklerin hattı bozmaması için dikkatli bakım gerekir
  3. Veri tazeliği kaybı

    • ETL işleri zaman alır ve periyodik olarak çalıştırılır
    • Elasticsearch'e ulaşan veri çoğu zaman Postgres'tekinden saatlerce geridedir
    • Postgres tablolarında gerçek zamanlı arama yapan uygulamalar için bu kabul edilemez olabilir
  4. Maliyet

    • Birçok şirketten Elasticsearch'ün en büyük yazılım gider kalemi haline geldiğini duymak şaşırtıcıdır
    • Elasticsearch cluster maliyetleri arttıkça bu şirketlerin birçoğu Elasticsearch Cloud'dan self-hosted yapıya geçti; bu bulut harcamalarını azalttı ama yeni sorunlar doğurdu
    • Elasticsearch'ün işletimi, ayarlanması ve yönetimi son derece zordur ve bununla ün salmıştır
    • Bu kuruluşlar, Elasticsearch cluster'larını yönetmek için pahalı mühendisler istihdam eder

Temel özet

  • Elasticsearch, operasyonel ek yük ve veri tazeliği pahasına üstün arama performansı sunar
  • Daha hafif alternatiflerle bunun mümkün olmadığı veya diğer Elasticsearch servislerini de kullanmayı planladığınız durumlarda Elasticsearch önerilir

Alternatif arama motorları

  • Son birkaç yılda Algolia, Meilisearch ve Typesense gibi modern arama motorları ortaya çıktı
  • Bu motorlar genellikle kullanıcıya dönük arama deneyimleri oluşturmak için kullanılır
  • Hacker News araması da Algolia üzerine kuruludur
  • Her servis farklı uç noktalarda ayrışsa da Postgres üzerinde arama arayan geliştiriciler için önemli bir uyarı vardır
  • Bu çözümlerin hiçbiri Postgres için özel olarak geliştirilmemiştir
  • Postgres kullanıcıları, Elasticsearch'te olduğu gibi bu servislerde de benzer sorunlar yaşama eğilimindedir

İki dünyanın en iyisi mümkün mü?

  • ParadeDB, Postgres için geliştirilmiş bir tam metin arama motorudur
  • pg_search adlı bir extension üzerine kurulan ParadeDB, Rust tabanlı Lucene alternatifi Tantivy'yi Postgres'in içine gömer
  • Postgres FTS gibi ParadeDB de ek altyapı gerektirmeden mevcut self-hosted Postgres veritabanına bağlanır
  • Elasticsearch gibi ParadeDB de gelişmiş bir tam metin arama motorunun özelliklerini sunar
  • Amazon RDS gibi yönetilen Postgres servisleriyle uyumluluk yakında gelecektir

3 yorum

 
galadbran 2024-08-14

Postgres FTS'in ne olduğunu merak ediyordum; meğer yerleşik bir özellikten bahsediyormuş.

 
xguru 2024-08-14

Bu ekip sürekli iyileştirmeler yapıp ilgili yazılar paylaştığı için GeekNews'te de birkaç kez paylaşmıştım.

ParadeDB - Search için PostgreSQL
pg_bm25 - Postgres'te Elastic seviyesinde kalite sunan tam metin arama eklentisi

 
cometkim 2024-08-14

Yazıda bahsedilen paradedb, pg_search ve pg_bm25 aslında aynı projedir.