Analitik Sorgular vs Operasyonel Veriler: Aynı Veritabanında Çalışmaz

Başında hep aynı yanılgı karşıma çıkıyor: "Veritabanımız var, bütün sorguları oradan çekelim." Sonra 3 ay sonra sistem çöküyor. Operasyonel veriler ile analitik sorgular aynı veritabanında yaşayamaz. Nokta.

Operasyonel sistem (OLTP) hızlı, küçük yazma işlemleri yapar. Müşteri sipariş verdi, stok güncellendi, ödeme kaydedildi. Satır satır, saniye içinde. Veritabanı buna göre tasarlanır: normalize edilmiş tablolar, küçük indeksler, yazma hızı ön planda.

Analitik sorguları (OLAP) tamamen farklı. "Son 6 ayda bölge başına satış trendi nedir?" türü sorular. Milyonlarca satırı tara, birleştir, grupla. Saatler sürebilir. Bu işlem sırasında operasyonel sistem donmuş gibi kalır.

Bir müşteri sipariş verirken, sistem arka planda 10 milyon satırı taraması gerekiyorsa? Lock beklemeleri başlar. Timeout hatası. Müşteri sayfayı yenileyen donmuş görür.

Bir analitik sorgusu full table scan yaparken, operasyonel sistemin yazma işlemleri kuyruğa girer. Veritabanı motoru kaynakları paylaştırır, ikisi de yavaşlar. Operasyonel sistem 50ms'de yanıt verirken, birdenbire 5 saniye olur.

İndeks stratejileri de çelişir. Operasyonel sistem küçük, hedefli indeksler ister. Analitik sorguları hızlandırmak için dev bitmap indeksler gerekir. Yazma performansını öldürür.

En basit yöntem: operasyonel veritabanını ayrı tutmak. Burası OLTP için optimize edilir. Yazma hızı, tutarlılık, canlı veri.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Analitik için ayrı bir veri ambarı (data warehouse) veya read replica. Veriler operasyonel sistemden periyodik olarak (saatlik, günlük) kopyalanır. Analitik sorgular burada çalışır. Kaç saat sürsün, umursamaz.

Bu sadece teorik değil. Amazon Redshift, Google BigQuery, Snowflake, hepsi bu felsefenin ürünü. Veritabanı motoru bile ayrı yazılmış.

Küçük projeler için: PostgreSQL'de read replica. Operasyonel sorguları primary'ye, analitik sorguları replica'ya yönlendir. Basit ama etkili.

Orta ölçek: Materialized View. Analitik sonuçlarını önceden hesapla, sakla, gerektiğinde yenile. (Materialized View: Ağır Sorguları Önbelleğe Alarak Hızlandırma)

Büyük ölçek: Data warehouse. ETL pipeline ile operasyonel verileri analitik sistemine aktar.

Bir veritabanının iki işi aynı anda iyi yapmasını beklemek, bir araba ile kamyon olmayı beklemek gibi. Teknik olarak mümkün, pratik olarak imkansız. Ayrılık, başlangıçta daha fazla karmaşıklık gibi görünse de, 6 ay sonra sistem çöküşünden daha ucuz.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz

5 yorum

  • adlı kullanıcıya yanıt verdi
    kodkafasi

    abi o anlar gerçekten stres full hızlı bir şey yapmaya çalışırken de doğru çözüm

  • adlı kullanıcıya yanıt verdi
    eskiinternet

    en kötüsü de müşteri beklerken fark etmen baskı altında çözüm bulmaya çalışman ben de

  • eskiinternet

    ah evet bu klasik hata ben de başlangıçta aynı şeyi düşündüm "niye iki veritabanı olsun

  • adlı kullanıcıya yanıt verdi
    eskiinternet

    işte ya baskı altında hızlı çözüm ile doğru çözüm arasında seçim yapmak zorunda kalıyorsun ve çoğu zaman hızlı olanı seçiyorsun sonra 3 ay sonra o

  • adlı kullanıcıya yanıt verdi
    kodkafasi

    vay be kaç gün uğraştın sonra fark etmek için ben de ilk projelerde aynı tuzağa düştüm veritabanı çöktüğünde anladım işin ciddiyetini