Sharding: Büyük bir veritabanını birden fazla makinede saklama işlemidir. Tek bir makine veya veritabanı sunucusu, yalnızca sınırlı miktarda veriyi depolayabilir ve işleyebilir. Veritabanı sharding, normalde aynı tablo veya koleksiyonda tutulacak kayıtları bölme ve bunları parça olarak bilinen birden çok makineye dağıtma işlemidir. Sharding, yeni parçalar olarak işlev görebilecek daha fazla makine ekleyerek tabanınızı yatay olarak ölçeklendirmenize olanak tanıdığından, özellikle büyük miktarda veriyle çalıştığınız durumlarda kullanışlıdır. Shardingin amacı, verileri ve iş yükünü birden çok sunucuya dağıtmaktır, böylece her sunucu genel veri ve iş yükünün daha küçük bir bölümünü handle edebilir. Her sunucu, daha az miktarda veriyle çalışırken sorguları ve güncellemeleri daha verimli bir şekilde işleyebildiğinden, veritabanının performansını ve ölçeklenebilirliğini geliştirmeye yardımcı olabilir.
Sharding Neden Önemlidir ?
Bir uygulama büyüdükçe, uygulama kullanıcılarının sayısı ve depoladığı veri miktarı da zamanla artar. Veri hacmi çok artarsa ve çok fazla kullanıcı aynı anda bilgileri okumak veya kaydetmek için uygulamayı kullanmaya çalışırsa veritabanı bir dar boğaz haline gelir. Uygulama yavaşlar ve müşteri deneyimini etkiler. Veritabanı parçalama, parçalar arasındaki daha küçük veri kümelerinin paralel olarak işlenmesini sağladığından bu sorunu çözmenin yöntemlerinden biridir.
Sharding Avantjları Nelerdir ?
- Yanıt süresini iyileştirme: Tek bir büyük veritabanından veri çekmek daha uzun sürer. Doğru verileri almak için bir çok satırda arama yapılması gerekmektedir. Bu nedenle shardlara ayrılmış bir veritabından sorgu çekmek daha az zaman alır.
- Toplam hizmet kesintisinden kaçınma: Tek bir büyük veritabanını barındıran bilgisayar hata verirse bu veritabanına bağlı uygulamada hata verir. Veritabanına ait shardları farklı makinalara dağıtırsak bu durumu bir nebze önlemiş oluruz.
- Verimli Ölçeklendirme: Sürekli büyüyen tek bir veritabanı belli bir süre sonunda depolama kapasitesine ulaşır.
Database Sharding Çeşitleri
Range-Based Sharding
Bu yaklaşımda veriler, User Id veya timestamp(zaman damagası) gibi bir key-value göre bölümlenir ve veriler, key value aralığına göre parçalar arasında dağıtılır. Örneğin, 1-1000 aralığındaki tüm User Idler bir parçada(shard) depolanabilirken, 1001 - 2000 aralığındaki User Idler başka bir parçada(shard) depolanabilir.
Hash - Based Sharding
Bu yaklaşımda, verileri anahtar değerine göre parçalar arasında dağıtmak için bir karma işlevi kullanılır. Örneğin, kullanıcı kimliği 123 olan tüm veriler bir parçada depolanırken, kullanıcı kimliği 456 olan veriler başka bir parçada depolanabilir.
Directory-Based Sharding
Bu yaklaşımda, anahtar değerleri verilerin depolandığı belirli parçaya map etmek için merkezi bir directory kullanılır. Directory, bir veri parçasının hangi parçaya ait olduğunu belirlemek için kullanılabilir ve veriler uygun parçadan alınabilir.
Partitioning
Bir veritabanında Sharding(parçalama) olarak da bilinen 𝗵𝗼𝗿𝗶𝘇𝗼𝗻𝘁𝗮𝗹 𝗽𝗮𝗿𝘁𝗶𝘁𝗶𝗼𝗻𝗶𝗻𝗴(yatay), bir tablonun satırlarını daha küçük tablolara bölmeyi ve bunları farklı veritabanı örneklerinde depolamayı içerir.
Öte yandan, 𝘃𝗲𝗿𝘁𝗶𝗰𝗮𝗹 𝗽𝗮𝗿𝘁𝗶𝘁𝗶𝗼𝗻𝗶𝗻𝗴, bir tablonun sütunlarını ayrı tablolara bölmeyi içerir. Bu, bir tablodaki sütun sayısını azaltmak ve yalnızca az sayıda sütuna erişen sorguların performansını artırmak için yapılır.
Genel olarak, yatay bölümleme bir veritabanını ölçeklendirmek için kullanılırken, dikey bölümleme belirli sorguların performansını artırmak için kullanılır.
Veritabanı sharding, horizontal partitioning gibidir. Her iki işlem de veritabanını birden çok benzersiz satır grubuna böler. Partitioning , tüm veri gruplarını aynı bilgisayarda depolarken, veritabanı sharding bu grupları farklı bilgisayarlara yayar.
Hiç yorum yok:
Yorum Gönder