Veri tabanı sharding, büyük ölçekli veri tabanlarını daha küçük parçalara bölmek (shard) ve bu parçaları farklı fiziksel sunucularda veya veri tabanlarında depolamak anlamına gelir. Sharding, büyük veri hacimleri ve yüksek trafiğe sahip uygulamalarda performansı artırmak ve ölçeklenebilirliği sağlamak için kullanılır. Farklı sharding stratejileri, veri tabanını nasıl böleceğinizi ve verileri hangi kriterlere göre dağıtacağınızı belirlemenize yardımcı olur.
Veritabanı parçalama, verilerin performansı artırmak ve büyük miktardaki verilerin tek bir veritabanı üzerindeki etkisini azaltmak için birden fazla veritabanı örneğine veya parçaya bölündüğü, veritabanlarının yatay ölçeklenmesi için kullanılan bir tekniktir.
Sharding'i bir örnek üzerinden açıklayalım:
Pizzayı farklı dilimler halinde alırsınız ve bu dilimleri arkadaşlarınızla paylaşırsınız. Parçalama olarak da bilinen veri bölümleme, Pizza dilimlerini paylaşma konseptiyle aynı şekilde çalışır.
- Her bir parça/bölüm bir " parça " olarak bilinir ve her parçanın orijinal veritabanıyla aynı veritabanı şeması vardır.
- Verileri, her satırın yalnızca bir parçada görünecek şekilde dağıtıyoruz.
- Bir uygulamanın ölçeklenebilirliğini artırmak için iyi bir mekanizma .
Parçalama Yöntemleri
1. Anahtar Tabanlı Parçalama
Bu teknik , karma tabanlı parçalama olarak da bilinir . Burada, müşteri kimliği, müşteri e-postası, bir istemcinin IP adresi, posta kodu vb. gibi bir varlığın değerini alırız ve bu değeri karma işlevinin bir girdisi olarak kullanırız. Bu işlem , verileri depolamak için hangi parçayı kullanmamız gerektiğini belirlemek için kullanılan bir karma değeri üretir .
- Verilerin doğru sırada ve tutarlı bir şekilde yerleştirildiğinden emin olmak için, hash fonksiyonuna girilen değerlerin hepsinin aynı sütundan (parça anahtarı) gelmesi gerektiğini aklımızda tutmamız gerekir.
- Temel olarak, parça anahtarları birincil anahtar veya tek tek satırlar için benzersiz bir tanımlayıcı gibi davranır.
Örneğin:
3 adet veritabanı sunucunuz var ve her isteğin bir uygulama kimliği var ve her yeni uygulama kaydedildiğinde bu kimlik 1 artırılıyor.
Verilerimizin hangi sunucuya yerleştirileceğini belirlemek için, bu uygulama id'leri 3 numaralı olanlara bir modüler işlem uygularız. Daha sonra kalan, verilerimizi depolayacağımız sunucuyu tanımlamak için kullanılır.
Anahtar Tabanlı Parçalamanın Avantajları :
- Öngörülebilir Veri Dağılımı:
- Anahtar tabanlı bölümlendirme, verileri bölümler arasında dağıtmanın öngörülebilir bir yolunu sağlar.
- Her farklı anahtar değeri belirli bir parçayla ilişkilendirilir ve bu sayede verilerin tekdüze ve tutarlı bir şekilde dağıtılması garanti altına alınır.
- Optimize Edilmiş Aralık Sorguları:
- Sorgular anahtar değer aralıklarını içeriyorsa, anahtar tabanlı parçalama bu aralık sorgularını verimli bir şekilde ele alacak şekilde optimize edilebilir.
- Bu, özellikle ardışık anahtar değerleri aralığını kapsayan işlemlerle uğraşırken faydalıdır.
Anahtar Tabanlı Parçalamanın Dezavantajları :
- Eşit Olmayan Veri Dağıtımı: Parçalama anahtarı iyi dağıtılmamışsa, parçalar arasında eşit olmayan veri dağıtımına neden olabilir
- Belirli Anahtarlarla Sınırlı Ölçeklenebilirlik: Belirli anahtarlar yüksek trafiğe maruz kalırsa veya veri kümesi belirli anahtar aralıklarına doğru yoğun bir şekilde eğilirse, anahtar tabanlı parçalama işleminin ölçeklenebilirliği sınırlı olabilir.
- Karmaşık Anahtar Seçimi: Etkili anahtar tabanlı parçalama için uygun bir parçalama anahtarı seçmek çok önemlidir.
2. Yatay veya Aralık Tabanlı Parçalama
Bu yöntemde, verileri her kayıttaki belirli bir değerin aralığına göre farklı parçalara ayırarak böleriz. Diyelim ki çevrimiçi müşterilerinizin adları ve e-posta bilgileri içeren bir veritabanınız var. Bu bilgileri iki parçaya bölebilirsiniz.
- Bir parçada, adı AP ile başlayan müşterilerin bilgilerini tutabilirsiniz
- Başka bir bölümde ise diğer müşterilerin bilgileri tutuluyor.
Menzil Tabanlı Parçalamanın Avantajları:
- Ölçeklenebilirlik: Yatay veya aralık tabanlı parçalama, verileri birden fazla parçaya dağıtarak kesintisiz ölçeklenebilirlik sağlar ve büyüyen veri kümelerine uyum sağlar.
- Gelişmiş Performans: Verilerin parçalar arasında dağıtılması, paralellik yoluyla sorgu performansını artırır ve her parçanın işlediği daha küçük veri alt kümeleriyle daha hızlı işlemler sağlar.
Menzil Tabanlı Parçalamanın Dezavantajları:
- Parçalar Arası Karmaşık Sorgulama: Birden fazla parçayı içeren sorguları koordine etmek zor olabilir.
- Dengesiz Veri Dağıtımı: Kötü yönetilen veri dağıtımı, parçalar arasında dengesiz iş yüklerine yol açabilir.
3. Dikey Parçalama
Bu yöntemde, tablodan tüm sütunu ayırırız ve bu sütunları yeni ayrı tablolara koyarız. Veriler bir bölümden diğerine tamamen bağımsızdır. Ayrıca, her bölüm hem ayrı satırları hem de sütunları tutar. Bir varlığın farklı özelliklerini farklı makinelerdeki farklı parçalara ayırabiliriz.
Örneğin:
Twitter'da kullanıcıların bir profili, takipçi sayısı ve kendi gönderdiği bazı tweet'leri olabilir. Kullanıcı profillerini bir shard'a, takipçileri ikinci shard'a ve tweet'leri üçüncü bir shard'a yerleştirebiliriz.
Dikey Parçalamanın Avantajları:
- Sorgu Performansı: Dikey bölümlendirme, her bölümün belirli bir sütun alt kümesine odaklanmasına izin vererek sorgu performansını iyileştirebilir. Bu özelleştirme, yalnızca kullanılabilir sütunların bir alt kümesini içeren sorguların verimliliğini artırır.
- Basitleştirilmiş Sorgular: Belirli bir sütun kümesi gerektiren sorgular basitleştirilebilir, çünkü bunların yalnızca ilgili sütunları içeren bölümle etkileşime girmesi gerekir.
Dikey Parçalamanın Dezavantajları:
- Sıcak Nokta Potansiyeli: Çok erişilen sütunlar içeriyorsa belirli parçalar sıcak nokta haline gelebilir ve bu da iş yüklerinin eşit olmayan şekilde dağılmasına yol açabilir.
- Şema Değişikliklerindeki Zorluklar: Sütun ekleme veya çıkarma gibi şemada değişiklik yapmak, dikey olarak parçalanmış bir sistemde daha zorlayıcı olabilir. Değişiklikler birden fazla parçayı etkileyebilir ve dikkatli koordinasyon gerektirebilir.
4. Dizin Tabanlı Parçalama
Bu yöntemde, orijinal veritabanı için bir arama hizmeti veya arama tablosu oluşturur ve sürdürürüz. Temel olarak arama tablosu için bir parça anahtarı kullanırız ve veritabanında bulunan her varlık için eşleme yaparız . Bu şekilde hangi veritabanı parçalarının hangi verileri tuttuğunu takip ederiz.
Arama tablosu, belirli verilerin nerede bulunabileceğine dair statik bir bilgi kümesi tutar. Yukarıdaki görüntüde, teslimat bölgesini bir parça anahtarı olarak kullandığımızı görebilirsiniz:
- İlk olarak istemci uygulaması verinin bulunduğu veritabanı bölümünü (shard) bulmak için arama servisine sorgu gönderir.
- Arama servisi parçayı döndürdüğünde o parçayı sorgular/günceller.
Dizin Tabanlı Parçalamanın Avantajları:
- Esnek Veri Dağıtımı: Dizin tabanlı bölümlendirme, merkezi dizinin verilerin bölüm konumlarına eşlenmesini dinamik olarak yönetebildiği ve güncelleyebildiği esnek veri dağıtımına olanak tanır.
- Verimli Sorgu Yönlendirmesi: Sorgular, dizinde saklanan bilgiler kullanılarak uygun parçaya verimli bir şekilde yönlendirilebilir. Bu, iyileştirilmiş sorgu performansıyla sonuçlanır.
- Dinamik Ölçeklenebilirlik : Sistem, uygulama mantığında değişiklik gerektirmeden, parçaları ekleyerek veya kaldırarak dinamik olarak ölçeklenebilir.
Dizin Tabanlı Parçalamanın Dezavantajları:
- Merkezi Arıza Noktası: Merkezi dizin tek bir arıza noktasını temsil eder. Dizin kullanılamaz hale gelirse veya sorunlar yaşarsa, tüm sistemi bozabilir, veri erişimini ve sorgu yönlendirmesini etkileyebilir.
- Artan Gecikme : Merkezi bir dizin üzerinden sorgu yönlendirme, diğer parçalama stratejilerine kıyasla potansiyel olarak artan gecikmeye yol açabilecek ek bir katman sunar.
Eşit veri dağıtımı için veritabanı bölümlendirmesini optimize etme yolları
İşte eşit veri dağıtımı için veritabanı bölümlendirmesini optimize etmenin bazı basit yolları:
- Tutarlı Karma Değer Kullanın : Bu, kayıtları anahtar değerlerine göre farklı parçacıklara atayan bir karma işlevi kullanarak verilerin tüm parçacıklar arasında daha eşit bir şekilde dağıtılmasına yardımcı olur.
- İyi Bir Parçalama Anahtarı Seçin : İyi dengelenmiş bir parçalama anahtarı seçmek çok önemlidir. Sıcak noktalar oluşturmayan bir anahtar, verilerin tüm sunuculara eşit şekilde dağılmasını sağlar.
- Dikkatli Olun : Aralık tabanlı parçalama kullanıyorsanız, bir parçanın diğerlerinden daha fazla veriyle aşırı yüklenmemesi için aralıkların düzgün bir şekilde tanımlandığından emin olun.
- Düzenli Olarak İzleyin ve Yeniden Dengeleyin : Veri dağılımını takip edin ve gerektiğinde veri arttıkça düzensiz yükleri önlemek için parçaları yeniden dengeleyin.
- Parçalama Mantığını Otomatikleştirin : Verileri otomatik olarak dağıtan ve parçalar arasında dengeyi korumak için parçalamayı yöneten otomasyon araçlarını veya yerleşik veritabanı özelliklerini uygulayın.
Veritabanı parçalamaya alternatifler
Aşağıda veritabanı parçalanmasına bazı alternatifler listelenmiştir:
- Dikey Ölçekleme : Veritabanını bölmek yerine, daha fazla yükü idare etmek için daha fazla CPU, bellek veya depolama ekleyerek mevcut sunucunuzu yükseltebilirsiniz. Ancak bunun sınırlamaları vardır çünkü bir sunucuyu yalnızca belirli bir ölçüde ölçekleyebilirsiniz.
- Çoğaltma : Veritabanınızın kopyalarını birden fazla sunucuda oluşturabilirsiniz. Bu, yük dengelemeye yardımcı olur ve kullanılabilirliği garanti eder, ancak çoğaltmalar arasında senkronizasyon sorunlarına yol açabilir.
- Bölümleme : Birden fazla sunucuya bölmek yerine, bölümleme aynı sunucu içindeki verileri böler. Verileri daha küçük bölümlere bölerek büyük veri kümeleri için sorgu performansını iyileştirir.
- Önbelleğe Alma : Sık erişilen verileri bir önbellekte (Redis veya Memcached gibi) depolayarak, ana veritabanınızdaki yükü azaltır ve parçalamaya gerek kalmadan performansı artırırsınız.
- İçerik Dağıtım Ağları ( CDN'ler) : Okuma ağırlıklı iş yükleri için İçerik Dağıtım Ağı (CDN) kullanmak, veri erişiminin bir kısmını birincil veritabanınızdan kaldırarak parçalama ihtiyacını azaltabilir.
Sistem Tasarımında Parçalamanın Avantajları
Parçalama, sistem tasarımında pek çok avantaj sunar, örneğin:
- Performansı Artırır: Yükü birden fazla sunucuya dağıtarak her sunucunun daha az iş kaldırabilmesini sağlar, bu da daha hızlı yanıt süreleri ve genel olarak daha iyi performans anlamına gelir.
- Ölçeklenebilirlik : Parçalama, verileriniz büyüdükçe ölçeklemeyi kolaylaştırır. Sistemin performansını etkilemeden artan veri yükünü yönetmek için daha fazla sunucu ekleyebilirsiniz.
- Gelişmiş Kaynak Kullanımı: Veriler dağıtıldığında daha az sunucu kullanılır ve bu da bir sunucunun aşırı yüklenmesi olasılığını azaltır.
- Hata İzolasyonu : Bir parça (veya sunucu) arızalanırsa, tüm sistem çökmez, bu da daha iyi hata izolasyonuna yardımcı olur.
- Maliyet Verimliliği : Büyük ve pahalı bir sunucuya yatırım yapmak yerine daha küçük ve daha ucuz sunucular kullanabilirsiniz. Sistem büyüdükçe, parçalama maliyetleri kontrol altında tutmaya yardımcı olur.
Sistem Tasarımında Parçalamanın Dezavantajları
Parçalama, sistem tasarımında bazı dezavantajlara sahiptir, örneğin:
- Artan Karmaşıklık : Birden fazla parçayı yönetmek ve sürdürmek, tek bir veritabanıyla çalışmaktan daha karmaşıktır. Dikkatli planlama ve yönetim gerektirir.
- Yeniden Dengeleme Zorlukları : Veri dağıtımı eşitsiz hale gelirse, parçaların yeniden dengelenmesi (sunucular arasında veri taşıma) zor ve zaman alıcı olabilir.
- Parçalar Arası Sorgulamalar : Birden fazla parçadan veri gerektiren sorgular daha yavaş ve daha karmaşık olabilir ve bu da performansı etkileyebilir.
- Operasyonel Yük : Parçalama ile daha fazla izleme, yedekleme ve bakıma ihtiyaç duyacaksınız, bu da operasyonel yükü artıracaktır.
- Olası Veri Kaybı : Eğer bir parça arızalanırsa ve düzgün bir şekilde yedeklenmezse, o parçada depolanan verilerin kaybolma riski daha yüksektir.
Çözüm
Parçalama, uygulamanızın tek veritabanının büyük miktarda büyüyen veriyi idare edemediği/depolayamadığı durumlarda harika bir çözümdür. Parçalama, veritabanını ölçeklendirmeye ve uygulamanın performansını iyileştirmeye yardımcı olur. Ancak, sisteminize biraz karmaşıklık da ekler. Yukarıdaki yöntemler ve mimariler, her parçalama tekniğinin avantajlarını ve dezavantajlarını açıkça göstermiştir.
Hiç yorum yok:
Yorum Gönder