Laravel Vektör Araması Artık MariaDB Destekliyor

Laravel 13, geliştiricilerin MariaDB üzerinde yerel vektör arama sorguları çalıştırmasına olanak tanıyarak, PostgreSQL'e geçiş yapmaya zorlamadan Laravel ekosistemine anlamsal arama (semantic search) yetenekleri kazandırıyor.

Bu yeni destek, çerçevenin (framework) daha önceki yalnızca PostgreSQL'e özel uygulamasının yerini alıyor; böylece tanıdık whereVectorSimilarTo metodu artık doğrudan bir MariaDB bağlantısıyla çalışabiliyor. Eğer tavsiye motorları, doküman benzerliği araçları veya "en yakın komşu" (nearest-neighbor) mantığına dayanan herhangi bir özellik geliştiriyorsanız, bu değişiklik önemli bir engel noktasını ortadan kaldırıyor.

Bu Değişim Neden Önemli?

Laravel'in sorgu oluşturucusu (query builder), daha önce vektör arama ihtiyaçlarını yalnızca PostgreSQL bağlantılarını tanıyan bir instanceof testi ile tespit ediyordu. Bu yaklaşım, özelliği tek bir sürücüye bağlıyor ve kod tabanını veritabanına özel koşullu ifadelerle dolduruyordu.

13 sürümü, mantığı gramer (grammar) katmanına taşıyor ve sürücüye özel iki metot ekliyor:

  • supportsVectorDistance() – Laravel'e mevcut bağlantının vektör mesafelerini hesaplayıp hesaplayamayacağını söyler.
  • compileVectorDistanceExpression() – Hesaplamayı gerçekleştiren SQL parçasını oluşturur.

Bu sorumlulukları her bir sürücüye atayarak, framework "tip kontrolü" (type-checking) hilesinden kurtuluyor ve gelecekteki genişletmeler için yol açıyor. Başka bir veritabanı için destek eklemek, artık koşullu blokları her yere dağıtmak yerine sadece birkaç sürücü metodu uygulamak anlamına geliyor.

MariaDB yerel fonksiyonlara sahip, MySQL ise değil

MariaDB yerel vektör fonksiyonlarıyla birlikte gelir. Standart MySQL, yapay zeka eklentileri sunan özel bir bulut hizmeti kullanmadığınız sürece bu fonksiyonlardan yoksundur.

Laravel, PHP tarafında bir benzerlik hesaplaması yapmaktan kasten kaçınıyor. Vektörleri PHP tarafında hesaplamak, sayfalamayı (pagination) bozacak ve uygulamayı uyarı vermeden yavaşlatacaktır. Sürücünün işlemi gerçekleştiremediği durumlarda hata fırlatılması, daha güvenli bir hata modu sağlar.

MySQL kullanıcıları şu an ne yapabilir?

Eğer teknoloji yığınınız (stack) standart MySQL kullanıyorsa, üç gerçekçi yolunuz var:

  1. MariaDB'ye geçiş yapın – çoğu MySQL iş yükü için doğrudan bir alternatif olan MariaDB, aynı ekosistemi korurken size yerel vektör desteği sunar.
  2. Özel bir arama servisi ekleyin – yalnızca benzerlik sorguları için MySQL'in yanında hafif bir PostgreSQL örneği (instance) çalıştırın.
  3. Onsuz devam edin – anlamsal arama birçok uygulama için isteğe bağlıdır; eğer sağladığı fayda operasyonel maliyetten daha fazla değilse, MySQL'de kalmak pragmatik bir seçim olabilir.

Her seçenek operasyonel karmaşıklık, gecikme (latency) ve bakım maliyeti açısından ödünler (trade-offs) içerir. Karar, vektör aramasının ürününüzün değer önerisi için ne kadar merkezi bir öneme sahip olduğuna bağlıdır.

API tasarımı için dersler

Laravel'deki bu değişiklik daha geniş bir tasarım ilkesini örneklendiriyor: Çekirdek mantığın (core logic) her yerine veritabanına özel kontroller serpiştirmekten kaçının. Bir özellik belirli bir motorun yeteneklerine bağlıysa, bu bağımlılığı bir sürücü arayüzü (driver interface) arkasında kapsülleyin (encapsulate). Yeni gramer tabanlı yaklaşım tam olarak bunu yaparak, çekirdek sorgu oluşturucuyu tekrar düzenlemeye gerek kalmadan framework'ü gelecekteki genişletmelere hazırlar.

Kendi paketlerini geliştiren yazılımcılar buna dikkat etmeli. Eğer servis katmanınızın içinde bir veritabanı türü için instanceof kontrolleri buluyorsanız, bu sorumluluğu sürücüye veya özel bir adaptöre taşıyın. Bu, genel API'yi temiz tutar ve kodunuzu geleceğe hazır hale getirir.