Veritabanı Paylaşımını Anlamak İçin Bir Astar
Yayınlanan: 2022-11-05Bir web sitesi oluşturmak, İnternet'teki varlığınızı kurarken ilk adımdır. Uzun vadede gelişmek için sitenizin büyümeye uyum sağlayacak şekilde ölçeklendirilebildiğinden de emin olmalısınız. Ve ilk adımlardan biri, sizinle ölçeklenebilen bir veritabanı uygulamaktır. Aksi takdirde, yavaş sorgu performansı ve veritabanı kesintileri yaşama riskiniz vardır.
Bu gönderi, verileriniz için yüksek ölçeklenebilirlik ve kullanılabilirlik elde etmek için veritabanı parçalamayı nasıl kullanabileceğinizi tartışacaktır. Ayrıca, parçalamanın dezavantajlarına ve kullanabileceğiniz farklı parçalama mimarilerine de değineceğiz.
Veritabanı Parçalama Nedir?
Sharding, tabloları diğer veritabanı sunucuları arasında dağıtan bir optimizasyon tekniğidir. Her ikisinin de verileri daha küçük alt kümelere ayırmayı içermesi anlamında bölümleme gibidir. Aradaki fark, parçalamanın bu alt kümeleri farklı sunuculara dağıtırken, bunları tek bir veritabanında depolamasıdır. Bu sunucular, tüm parçalar için benzer bir performans düzeyi elde etmek için aynı veritabanı motorunu ve donanım türünü kullanır.
Sharding, işlem darboğazlarını ve tek hata noktalarını ortadan kaldırarak hiçbir şey paylaşmayan bir mimari gerçekleştirmeyi amaçlar.
Parçalamayı iki şekilde uygulayabilirsiniz - yatay ve dikey. Yatay parçalama tabloyu satırlara göre bölerken dikey parçalama tabloları sütunlara göre böler.
Bu bağlamda, parçalama, büyük tabloları daha küçük olanlara bölen bölümleme gibidir.
Yatay parçalama, çoğu sorgunun bir kerede veri (ad, adres, e-posta vb.) döndüren bir müşteri veritabanı gibi bir satır alt kümesi döndürdüğü veritabanları için etkilidir.
Dikey parçalama, sorguları tek sütun döndüren veritabanları için etkilidir. Örneğin, müşteri veritabanı müşterinin adını veya e-postasını ayrı olarak verdiyse, adı ve e-postayı farklı kümelere ayırabilirsiniz.
Veritabanı Parçalamanın Faydaları
Aşağıda, veritabanı parçalamanın avantajlarından bazıları verilmiştir.
Geliştirilmiş Yatay Ölçekleme
Veritabanınızı dikey veya yatay olarak ölçeklendirebilirsiniz. Dikey ölçeklendirme, performansı artırmak için sunucuya daha fazla merkezi işlem birimi (CPU) ve rasgele erişim belleği (RAM) eklenmesi anlamına gelir. Dikey ölçeklendirme, küçük ve orta ölçekli veritabanları için yararlı bir çözümdür. Ancak verileriniz büyüdükçe dikey ölçeklendirme mümkün olmaz. Tek bir sunucuya ekleyebileceğiniz çok fazla güç var.
Yatay ölçekleme daha esnektir. Sisteminize daha fazla sunucu ekleyerek veritabanınızı gerektiği gibi ölçeklendirmenizi sağlar. Bu sunucuların her biri, farklı veritabanı parçalarına kaynak sağlar. Bu, iş yükünü dağıtır ve sistemin daha fazla isteği işleme kapasitesini geliştirir.
Daha Hızlı Sorgu Yanıt Süreleri
Parçaların yalnızca birkaç satırı ve sütunu vardır. Bu nedenle, veritabanı sorgularını işlemek daha az zaman alır. Buna karşılık, paylaşılmamış bir veritabanının sorgusu, yüzlerce hatta binlerce satırda arama yapılmasını gerektirebilir.
Kesinti Durumlarında Artan Güvenilirlik
Veritabanı kesintileri, yanlışlıkla veri silme, bağlantı hataları ve siber güvenlik saldırıları gibi çeşitli nedenlerle meydana gelir. Parçalama, kesintilerin etkilerini en aza indirir. Her parça özerk olduğundan, yalnızca etkilenen parça kapalı kalma süresiyle karşı karşıya kalır. Örneğin, dört parçanız varsa ve bunlardan birinde kesinti yaşıyorsanız, işlemlerin yalnızca yüzde 25'i etkilenecektir.
Sharding'in Dezavantajları
Parçalama, bir veritabanının güvenilirliğini ve kullanılabilirliğini artırsa da, onu uygulamak karmaşıktır. Yanlış parçalama mimarisini kullanmak performansı yavaşlatabilir ve veri kaybına neden olabilir.
Tüm parçalar arasında dengeli bir veri dağıtımına izin veren bir parçalama tekniği seçtiğinizden emin olun. Bu denge olmadan, bir parça verinin çoğunu depolarken diğer parçalar neredeyse boş kaldığında meydana gelen veritabanı erişim noktaları oluşturma riskini taşırsınız. Bu, tek parçaya yazma verimini azaltır.
Bunu çözmek için dengesiz parçayı daha da fazla bölümlendirebilirsiniz, ancak bu süreç zorludur ve siz veri taşırken veritabanınızı çökertebilir.
Parçalamanın bir başka dezavantajı, farklı parçalarda birden çok tablo içeren SQL birleştirmelerinin çok yavaşlayıp performansı düşürmesidir. Ancak doğru mimari ile bu sorunun önüne geçebilirsiniz.
Parçalama Mimarileri
Üç mimariyi kullanarak parçalama uygulayabilirsiniz:
- Anahtar tabanlı parçalama
- Aralık tabanlı parçalama
- Dizin tabanlı parçalama
Seçtiğiniz mimari, kullanım durumunuza bağlıdır.
Anahtar Tabanlı Parçalama
Anahtar veya karma tabanlı parçalama mimarisinde, bir veritabanı uygulaması bir parçayı bulmak için parça anahtarı kullanır. Bir karma işlevi, parçalama anahtarı değerini özetler ve çıktı, verileri belirli bir parçaya eşler. Basit bir karma işlevi, anahtarın modülü ve parça sayısı olabilir.
Karma işlevi, birden fazla parçalama anahtarı alabilir. Bu nedenle, anahtar tabanlı parçalama, paylaşılan anahtarlara sahip olabilecek veri kayıtları için uygundur. Verileri algoritmik olarak dağıtmak, bir parçanın diğerinden daha fazla veri içerdiği veritabanı etkin noktaları oluşturma olasılığını en aza indirir.
Bununla birlikte, dağıtım yalnızca karma işlevine dayandığından, verileri mantıksal olarak birlikte gruplamak imkansızdır. Bu nedenle, birden çok parçadan veri gerektiren veritabanı işlemleri, her bir parçadan veri okunmasını gerektirdiğinden verimsiz olabilir.
Menzil Tabanlı Parçalama
Aralık tabanlı parçalama, belirli bir değer aralığına bağlı olarak bir veritabanının parçalanmasını içerir.
Hangi parçaya değer atanacağını belirlemek için bir parçalama anahtarı kullanır. Veritabanı uygulaması, bir arama tablosundaki parçalama anahtarına karşılık gelen parçayı kontrol eder ve verileri depolar. Bu nedenle, aralık tabanlı parçalamanın tasarlanması ve uygulanması kolaydır.
Örneğin, bir kullanıcı veritabanındaki kullanıcı kimliği değerini, parçalama anahtarı olarak kullanabilirsiniz. 0-2.000 arası kimlikleri olan kullanıcıları bir parçada, 2.000 ile 4.000 arasındaki kullanıcıları başka bir parçada vb. depolayabilirsiniz.
Aralık tabanlı parçalama, veritabanı etkin noktalarına neden olabilir. Kullanıcı kimliklerinizin çoğunun 2.001 ile 4.000 arasında yer aldığı bir kullanıcı veritabanı düşünün. Süreç onları tek bir parçaya atar ve zamanla bir dengesizlik yaratır. Bu nedenle, aralık tabanlı parçalama, eşit olarak dağıtılmış veriler için en iyi sonucu verir.
Dizin Tabanlı Parçalama
Dizin tabanlı parçalama, mantıksal olarak ilgili verileri aynı parçada gruplar. Veritabanındaki her varlık için bir eşleme listesi içeren bir arama tablosu kullanır. Her eşleme bir veritabanı parçasına karşılık gelir.
Dizin tabanlı parçalama, parçalara dinamik olarak veri ekleyebildiğiniz için aralık tabanlı veya anahtar tabanlı parçalamaya göre daha esnektir. İzlenecek parçalama işlevi veya içinde kalacak değerler aralığı yoktur. Bu esneklik, veritabanı verimliliğini artırır: İlgili verileri tek bir parçada depolayabilirsiniz; bu, ortak sorguların yürütülmesinin daha az zaman aldığı anlamına gelir.
Örneğin, dizin tabanlı parçalama kullandıysanız ve kullanıcıları konumlarına göre gruplandırdıysanız, belirli bir yerden kullanıcıları alıyorsanız, yalnızca tek bir parçayı sorgularsınız.
Kinsta ile Veritabanı Paylaşımı
Çoğu modern veritabanı motoru, veritabanı parçalama desteği sağlar. Bu veritabanı motorlarından biri, MySQL'in ticari olarak desteklenen bir çatalı olan MariaDB'dir. IBM, GitHub ve Wikimedia gibi şirketler tarafından benimsenen yüksek performanslı açık kaynaklı bir veritabanı sistemidir. Aynı zamanda Kinsta'daki yüksek performanslı sunucu yığınının bir parçasıdır.
MariaDB, örümcek depolama motoru aracılığıyla yerleşik parçalama özellikleri sunar. Örümcek depolama motoru, bölümleme ve genişletilmiş mimari (XA) işlemlerini destekleyen bir küme oluşturma motorudur. Farklı örneklerden uzak tablolara aynı örnekteymiş gibi davranmanıza olanak tanır. Örümcek depolama motorunda bir tablo oluşturduğunuzda, tablo uzak MariaDB sunucusundaki başka bir tabloya bağlanır. Bağlantı kurulduktan sonra, depolama motoru bağlantıyı aynı işlemin parçası olan tüm tablolarla paylaşır.
Özet
Veritabanı parçalama, tabloları daha küçük alt kümelere bölen ve bunları parça adı verilen farklı sunuculara dağıtan bir ölçekleme tekniğidir. Anahtar tabanlı parçalama, aralık tabanlı parçalama ve dizin tabanlı parçalama gibi çeşitli yollarla parçalama uygulayabilirsiniz.
Parçalama, bir veritabanının ölçeklenebilirliğini, güvenilirliğini ve kullanılabilirliğini iyileştirirken, uygulanması çok karmaşıktır. Ayrıca, bir parça oluşturduğunuzda, veritabanını parçalanmamış durumuna geri döndürmek kolay değildir. Bu nedenle, optimizasyon için parçalamayı yalnızca diğer ölçeklenebilirlik seçeneklerinin çalışmadığından emin olduğunuzda kullanın.
İşletmeniz ister kâr amacı gütmeyen bir kuruluş isterse kurumsal düzeyde bir girişim olsun, Kinsta'nın uzman çözümleri site barındırma endişelerinizi ortadan kaldırarak en önemli şeye odaklanmanızı sağlar.