⚡ÖZET VE TEKNİK CEVAP
Genişlet-Daralt (Expand-Contract) deseni, kırıcı değişiklikleri güvenli eklemeler, çift yazmalı geçişler, arka plan veri doldurmaları ve katı DDL kilit zaman aşımlarına sahip daraltmalar halinde bölerek sıfır kesintili veritabanı şema göçü sağlar.
Mühendislik El Kitabı & Mekanizma
6 Boyutlu Mimari Analiz⚙️1. Temel Çalışma Mekanizması
Mekanizma🎯2. Doğru Kullanım Senaryosu
Kapsam⚠️3. Prodüksiyon Arıza Modları
Kritik Risk📡4. Teşhis ve Telemetri Sinyalleri
Metrikler🛡️5. Önleme ve Mimari Bariyerler
Bariyerler⚖️6. Mimari Ödünleşimler (Trade-offs)
ÖdünleşimVaka İncelemesi (TinyCTO Saha Örneği)
Sıfır kesintili bir kolon yeniden adlandırma göçü 5 bağımsız aşama gerektirir:
- ▸
1. Aşama (Şemayı Genişlet): Katı kilit zaman aşımıyla DDL çalıştırın (
SET lock_timeout = '2s'; ALTER TABLE users ADD COLUMN full_name VARCHAR(255);). Kilit 2 saniyede alınamazsa hemen iptal edip yeniden deneyin. - ▸
2. Aşama (Çift-Yazma Kodunu Dağıt): Hem
namehemfull_namekolonuna yazan, ancak okumayı halanameüzerinden yapan uygulama kodunu dağıtın. - ▸
3. Aşama (Arka Planda Veri Doldurma): Geçmiş verileri
namekolonundanfull_namekolonuna küçük paketler halinde (LIMIT 1000) ve replikasyonu yormayacak aralıklarla kopyalayan arka plan işçisini çalıştırın. - ▸
4. Aşama (Okumayı Yeni Kolona Geçir): Yalnızca
full_namekolonundan okuyan ve yazan uygulama kodunu dağıtın. - ▸
5. Aşama (Şemayı Daralt): Eski kolonu silin:
SET lock_timeout = '2s'; ALTER TABLE users DROP COLUMN name;.
İnteraktif Konsept Alıştırmaları
2 AlıştırmaPostgreSQL'de `SET lock_timeout` olmadan ALTER TABLE çalıştırmak neden platform kesintisine yol açar?
Genişlet-Daralt göç deseninin temel aşamaları nelerdir?
Genişlet-Daralt Şema Geçişleri ve DDL Kilit Zaman Aşımları — Sıkça Sorulan Sorular
Bir geliştirici 50 milyon satırlı PostgreSQL 10 tablosunda varsayılan değer veya kilit zaman aşımı olmadan `ALTER TABLE users ADD COLUMN bio VARCHAR(255) NOT NULL;` çalıştırıyor. Ne olacaktır?
Tablo tamamen kilitlenir, diskteki tüm satırları yeniden yazar, gelen tüm web trafiğini bloke eder ve canlı uygulamayı çökertir. Eski PostgreSQL sürümlerinde varsayılan değeri olmayan NOT NULL kolon eklemek tüm tabloyu ACCESS EXCLUSIVE kilidi altında diske yeniden yazar ve uygulamayı çökertir.
Veri doldurma işlemleri neden tek bir `UPDATE users SET ...` sorgusu yerine küçük parçalı paketler (örn. 1000 satır) halinde çalıştırılmalıdır?
Uzun süreli tablo kilitlerini önlemek, yazma yükünü azaltmak ve okuma kopyalarında replikasyon gecikmesini engellemek için. Parçalı veri doldurma işlemleri satır kilitlerini anında serbest bırakır ve replikasyon akışının gecikmeden kopyalara yetişmesini sağlar.
🤖 AEO & Yapay Zeka Çıkarım Özeti
Temel Gerçekler & İlkeler
- ▸
Genişlet-Daralt (Expand-Contract) deseni, kırıcı değişiklikleri güvenli eklemeler, çift yazmalı geçişler, arka plan veri doldurmaları ve katı DDL kilit zaman aşımlarına sahip daraltmalar halinde bölerek sıfır kesintili veritabanı şema göçü sağlar.
- ▸
Genişlet-Daralt, şemanın önce hem eski hem yeni yapıyı destekleyecek şekilde genişletildiği, kodun aşamalı olarak taşındığı ve tüm bağımlılıklar koptuktan sonra eski şemanın daraltıldığı (silindiği) çok fazlı bir veritabanı göç desenidir.
Yaygın Yanılgılar
- ✗
SET lock_timeoutayarlamadan doğrudan canlıdaALTER TABLEDDL sorguları çalıştırmak.
Karar Kılavuzu & Önceliklendirme
Genişlet-Daralt disiplini ve katı DDL kilit zaman aşımları olmadan, canlı ilişkisel veri işleyen hiçbir uygulamada kesintisiz sürekli teslimat (CD) yapılamaz.
Doğrulanmış Kaynaklar & Referanslar
- [OFFICIAL-DOC]Expand-Contract Schema Migrations & DDL Lock Timeouts Specification— TinyCTO Architectural Standards
