software

PostgreSQL News 1.0 Yayınlandı: Derinlemesine Mimari İnceleme

Yerel Okapi BM25 sıralamalı tam metin arama, block-max WAND optimizasyonu ve güçlü çok sütunlu indeksleme özelliklerini tanıtan PostgreSQL News 1.0'ı keşfedin.

OP
OPA Release DeskWIRE
•6 min read
PostgreSQL News 1.0 Yayınlandı: Derinlemesine Mimari İnceleme

⚠️ Breaking Changes & Migration Caveats

İlk 1.0 sürümü; önceki sürümlerle tam geriye dönük uyumlu olup, sağlam ileriye dönük uyumluluk garantileri ve bm25_upgrade() ile yerinde yükseltme yolları sunar.

PostgreSQL News 1.0: Yerel BM25 Tam Metin Arama Analizi

Yönetici Özeti ve Mimari Önem

PGX Inc. tarafından pgx-bm25 eklentisi olarak geliştirilen PostgreSQL News sürüm 1.0, ilişkisel veritabanlarının gelişmiş tam metin arama işlemlerini nasıl yürüttüğü konusunda devrimsel bir değişimi temsil ediyor. Okapi BM25 sıralamalı aramayı doğrudan yerel bir indeks erişim yöntemi (bm25_native) olarak sunan bu sürüm, ilişkisel veritabanı sistemleri ile Elasticsearch veya Apache Lucene gibi özel arama motorları arasındaki tarihsel boşluğu dolduruyor. Geliştiricileri harici senkronizasyon hatları, karmaşık yan sistemler veya çift yazımlı mimariler tutmaya zorlamak yerine pgx-bm25, son teknoloji metin getirme yeteneğini doğrudan PostgreSQL depolama ve sorgu yürütme katmanlarına yerleştiriyor.

Mimari açıdan eklenti, ana veritabanının çekirdek ilkel yeteneklerinden sorunsuz bir şekilde yararlanır. İndeksin tamamı standart indeks ilişkisi sayfalarında bulunur, bu da onun Yazma Öncesi Günlük (WAL), kilitlenme kurtarma mekanizmaları ve yerel fiziksel replikasyonu otomatik olarak miras almasını sağlar. VACUUM gibi standart veritabanı bakım işlemleri, özel daemonlara veya harici çalışma zamanlarına ihtiyaç duymadan indeks yapılarına hizmet verir. Standart sunucu başlıklarına karşı saf C dilinde yazılmış ve PGXS kullanılarak derlenmiş olan araç zinciri, yalnızca standart bir C derleyicisi ve pg_config gerektirerek oldukça küçük bir ayak izine sahiptir. Bu sıkı entegrasyon, ayrıştırılmış arama altyapılarında yaygın olan nihai tutarlılık anormalliklerini ortadan kaldırarak işlemsel tutarlılığı garanti eder.

Temel İyileştirmeler ve Geliştirici Ergonomisi

Sürüm 1.0, temiz SQL soyutlamaları sayesinde gelişmiş sorgu yetenekleri ve olağanüstü geliştirici ergonomisi sunar. Metin analizi, PostgreSQL'in yerel Snowball sözlüklerini kullanarak indeks bazlı dil yapılandırmalarına (örneğin, "negligent" ve "negligence" gibi morfolojik varyantların eşleştirilmesi) olanak tanır. Yüksek performanslı sorgu yürütme, her eşleşen belgeyi puanlamaktan kaçınarak standart LIMIT 10 maddesi gibi top-N sıralamalı sorguları optimize eden block-max WAND (Weak AND) algoritması ile elde edilir. Satır eşleştirme için @@@ ve alaka düzeyi sıralaması için &@@ özel operatörleri, doğrudan sorgu planlayıcı ile etkileşime girerek ayrı bir Sort düğümü yükü oluşturmadan sıralı indeks taramaları şeklinde çalışır.

Sorgu oluşturma özellikleri ile geliştirici ergonomisi daha da ileri taşınmıştır. Geliştiriciler, temel dize aramalarının ötesinde jsonb oluşturucu fonksiyonlarını kullanarak karmaşık sorgular inşa edebilir; kullanıcı girdilerini güvenli bir şekilde değer olarak ileterek uygulamaları SQL enjeksiyon risklerinden tamamen koruyabilirler. Eklenti, alan bazlı güçlendirme ve uzunluk normalizasyonu içeren BM25F puanlamasıyla çok sütunlu indeksleri, tam ifadeleri, token mesafeli yakınlık aramalarını, boole sorgu yapılarını (must, should, must_not), önek joker karakterlerini ve bm25_snippet() aracılığıyla HTML etiketlerinden arındırılmış vurgulanmış parçaları destekler. En önemlisi, k1, b ve alan güçlendirmeleri gibi ince ayar parametreleri, maliyetli bir REINDEX işlemine gerek kalmadan ALTER INDEX ... SET komutuyla dinamik olarak değiştirilebilir.

Mimari Karşılaştırma Matrisi

Özellik / Metrik Harici Arama Motoru (Temel) PostgreSQL News 1.0 (pgx-bm25) Mimari Etki
Gecikme (Top-N Arama) Değişken ağ + IPC yükü İndeks taraması ile doğrudan bellek erişimi Yerel sorgular için büyük ölçüde azaltılmış gecikme
Bellek Kullanımı Ayrı JVM yığını veya yerel daemon belleği PostgreSQL shared_buffers & OS page cache'i paylaşır Bellek şişmesini ve çift önbellekleme cezalarını ortadan kaldırır
API'ler & Sorgu Arayüzü HTTP üzerinden REST / JSON / Özel istemciler Yerel SQL operatörleri (@@@, &@@) & jsonb oluşturucular Birleşik işlem sınırları ve sorgu planlaması
Replikasyon & Kurtarma Uygulama düzeyinde senkronizasyon veya snapshot replikasyonu Yerel WAL akışı ve fiziksel replikasyon Yüksek kullanılabilirlik için sıfır operasyonel yük

Kırılgan Değişiklikler ve Geçiş Uyarıları

Sürüm 1.0, pgx-bm25 eklentisi için temel bir başlangıç oluşturduğundan, önceki sürümlere yönelik hiçbir geriye dönük kırılgan değişiklik bulunmamaktadır. Ancak, gelecek sürümler için sağlam uyumluluk sözleşmeleri oluşturulmuştur. Disk üzerindeki format, eklemeli format değişikliklerinin REINDEX gerektirmeyeceğini garanti eder; kırılgan değişikliklerin kaçınılmaz olduğu durumlarda ise dahili bm25_upgrade() fonksiyonu mevcut indeksleri yerinde sorunsuz bir şekilde taşıyacaktır. Assert etkin yapılar, UBSan, AddressSanitizer ve kilitlenme kurtarma ile replika eşitliği için titiz TAP testleri dahil olmak üzere kapsamlı test süreçleri, PostgreSQL 17 ve 18 ortamlarında kurumsal düzeyde kararlılık sağlarken, PostgreSQL 19 betaları için ön doğrulama çalışmaları devam etmektedir.

Adım Adım Yükseltme Kılavuzu

PostgreSQL News 1.0 sürümüne yükseltme veya kurma işlemleri standart PGXS araçlarıyla kolaylaştırılmıştır. Hedef ortamınızın uyumlu bir C derleyicisi ile birlikte PostgreSQL 17 veya 18 çalıştırdığından emin olun.

  1. Eklentiyi Derleyin ve Kurun: Yerel PostgreSQL kurulumunuza göre derlemek için depo kök dizininde standart derleme komutlarını çalıştırın:

    make
    sudo make install
    
  2. Veritabanınızda Eklentiyi Etkinleştirin: psql veya tercih ettiğiniz istemciyi kullanarak hedef veritabanınıza bağlanın ve eklentiyi oluşturun:

    CREATE EXTENSION bm25_native;
    
  3. Yerel Bir BM25 İndeksi Oluşturun: Yerel erişim yöntemini kullanarak ilk sıralamalı tam metin indeksinizi oluşturun ve sorgulayın:

    CREATE INDEX docs_bm25 ON docs USING bm25_native (body);
    
    SELECT id, bm25_score(ctid) AS score
    FROM   docs
    WHERE  body @@@ 'quick fox'
    ORDER  BY body &@@ 'quick fox'
    LIMIT  10;
    
#PostgreSQL News#1.0#software#Release#Changelog