Veri Bölümleme Nedir? Yeni Başlayanlar İçin Eksiksiz Rehber
Bu rehber, veri bölümlemeyi basit terimlerle açıklar; türleri, kullanım alanları, araçları ve uygulama stratejilerini ele alarak veritabanı performansını optimize etmenize yardımcı olur.
İster müşteri odaklı uygulamalar geliştiriyor olun ister karmaşık analitik hatları çalıştırıyor olun, bir şey netleşir: verileri nasıl depoladığınız ve eriştiğiniz performansı belirleyebilir.
Veriler düşünülerek yapılandırıldığında sistemlerin ne kadar sorunsuz çalıştığını bizzat gördüm ve burada veri bölümleme devreye giriyor. Sorgu hızını, depolama verimliliğini ve ölçeklenebilirliği ciddi şekilde iyileştirebilen tekniklerden biridir.
Bu yazıda veri bölümlenmeyi, mevcut türlerini ve yol boyunca edindiğim en iyi uygulamaları açıklayacağım.
Veri Bölümleme Nedir?
Veri bölümleme, büyük veri kümelerini bölümler adı verilen daha küçük, yönetilebilir parçalara ayırma tekniğidir. Her bölüm, verinin bir alt kümesini içerir ve birden fazla düğüm veya sunucuya dağıtılır. Bu bölümler mantıksal olarak aynı veri kümesine ait olsalar da tekil tablolar gibi depolanabilir, sorgulanabilir ve yönetilebilir.
Veri bölümleme, veritabanı performansını ve ölçeklenebilirliğini artırır. Örneğin, bir veri noktasını tüm tablo içinde aramak, onu belirli bir bölümde aramaktan daha uzun sürer ve daha fazla kaynak kullanır. Bu nedenle veriler bölümler halinde depolanır.
Veri Bölümleme Türleri
Veri bölümleme, her biri kendine özgü strateji ve faydalara sahip çeşitli türleri kapsar. Bu bölümde, en yaygın türleri ele alıyorum.
Yatay bölümleme
Tüm verileri tek bir tabloda saklamak yerine, yatay bölümleme veriyi satırlara böler; yani farklı satır kümeleri bölümler olarak saklanır.
Yatay bölümlemenin tüm bölümleri aynı sütun setini içerir ancak farklı satır gruplarına sahiptir.
Örnek: Diyelim ki üç farklı ülkedeki birden çok eyalet için bir hava durumu veri kümeniz var. Bunu, satırları her ülkeye göre ayırarak üç tabloya bölebilirsiniz.
Sıcaklık
Eyalet
Ülke
Mevsim
-30° F
Alaska
USA
Kış
48.2° F
Queensland
Australia
Yaz
100° F
Andhra Pradesh
India
Yaz
35° F
California
USA
Kış
96° F
Texas
USA
Yaz
62° F
Tasmania
Australia
Kış
Ülkeye göre yatay bölümleme:
Sıcaklık
Eyalet
Ülke
Mevsim
-30° F
Alaska
USA
Kış
35° F
California
USA
Kış
35° F
California
USA
Kış
Sıcaklık
Eyalet
Ülke
Mevsim
48.2° F
Queensland
Australia
Yaz
62° F
Tasmania
Australia
Kış
Sıcaklık
Eyalet
Ülke
Mevsim
100° F
Andhra Pradesh
India
Yaz
Dikey bölümleme
Dikey bölümleme veriyi sütunlara göre böler; böylece her bölüm aynı sayıda satır içerir ancak daha az sütun barındırır.
Bölüm anahtarı veya birincil sütun her bölümde bulunur ve mantıksal ilişkiyi korur.
Dikey bölümleme, hassas bilgilerin normal verilerden ayrı saklanması gerektiğinde yaygındır. Hassas sütunların bir bölümde, standart verilerin ise başka bir bölümde tutulmasını sağlar.
Bir diğer yaygın kullanım, sık güncellenen sütunları tek bir bölümde, diğerlerini ayrı bir bölümde gruplamaktır.
Örnek: Aşağıdaki tabloda çalışan telefon numarası ve maaş sütunları gizliyse, tabloyu buna göre bölümleyelim.
Aralık bölümleme, veriyi belirli bir sütun için değer aralığına göre böler.
Genellikle, her bölümde anahtar sütun için alt ve üst sınır bulunur ve bu aralığa düşen bir kayıt o bölüme atanır.
Örnek: Diyelim ki satış verileri 2021 ile 2023 arasında mevcut. Bunu yıla göre bölümleyebiliriz; böylece 2021–2022 arası satışlar bir bölüme, 2022–2023 arası satışlar başka bir bölüme düşer.
Product_id
Tarih
Kâr
z0yu9h
2021-03-17
$100K
f8o5pj
2022-04-04
$234K
z006yu
2022-09-13
$789K
a6u895
2021-07-23
$237K
g68w90
2022-02-26
$2345K
Bölüm 1:
product_id
Tarih
Kâr
z0yu9h
2021-03-17
$100K
a6u895
2021-07-23
$237K
Bölüm 2:
product_id
Tarih
Kâr
f8o5pj
2022-04-04
$234K
z006yu
2022-09-13
$789K
Karma (hash) bölümleme
Bölüm anahtarına bir karma (hash) fonksiyonu uygulanır ve çıktı, hangi kaydın hangi bölümde saklanacağını belirler. Bu teknikte bölüm sayısı önceden belirlenir.
Karma değerinin bölüm sayısına bölümünden kalan, ilgili kaydın hangi bölümde saklanacağını belirler. Bunu bir örnekle görelim:
Örnek: Kimliği z0yu9h olan ürün için hash(‘z0yu9h’) = 101 ve bölüm sayısı = 4 ise, 101%4 = 1 olur. Dolayısıyla bu kayıt birinci bölümde saklanır.
Bu şekilde, bölüm anahtarı sütunu için karma değerleri hesaplanır, bölüm sayısına bölünür ve sonuç nihai bölümü belirler.
Liste bölümleme
Prosedür aralık bölümlemeye benzer, ancak veriyi bir değer aralığına göre bölmek yerine, liste bölümleme veriyi önceden tanımlanmış bir değer kümesine göre böler.
Örnek olarak sıcaklık tablosunu tekrar ele alalım.
Sıcaklık
Eyalet
Ülke
Mevsim
30° F
Alaska
USA
Kış
48.2° F
Queensland
Australia
Yaz
100° F
Andhra Pradesh
India
Yaz
35° F
California
USA
Kış
96° F
Texas
USA
Yaz
62° F
Tasmania
Australia
Kış
Yukarıdaki veride ‘Mevsim’ sütunu [‘winter’, ‘summer’] değer listesini içerir. Dolayısıyla mevsime göre liste bölümleme şöyle görünür:
Bölüm 1:
Sıcaklık
Eyalet
Ülke
Mevsim
30° F
Alaska
USA
Kış
35° F
California
USA
Kış
62° F
Tasmania
Australia
Kış
Bölüm 2:
Sıcaklık
Eyalet
Ülke
Mevsim
48.2° F
Queensland
Australia
Yaz
100° F
Andhra Pradesh
India
Yaz
96° F
Texas
USA
Yaz
Bileşik bölümleme
Bileşik bölümleme, iki bölümleme tekniğinin birleşimidir. Bir tablo önce bir stratejiyle bölünür, her bölüm daha sonra başka bir teknikle yeniden bölünür.
Artık farklı bölümleme stratejilerini değerlendirdiğimize göre, veri bölümlemenin ne zaman faydalı olduğuna bakalım.
Dağıtık veritabanları
Dağıtık sistemler, fiziksel olarak ayrı sunucularda bulunan ancak ağ üzerinden birbirine bağlı düğümler koleksiyonudur. Örnekler arasında Apache Cassandra, Amazon DynamoDB ve Google Bigtable bulunur.
Bu sistemler, veriyi düğümler arasında düzenlemek ve dağıtmak için içsel olarak veri bölümlemeyi kullanır.
OLAP işlemleri
OLAP, çok boyutlu veriyi küpler olarak temsil eder ve kullanıcıların veriyi farklı açılardan keşfetmesine olanak tanır. Bu küpler önceden birleştirilmiş verileri temsil etse de, alttaki veri hâlâ büyüktür; bu nedenle sorguların veri bölümleme ile daha da optimize edilmesi gerekir.
Örneğin, küp bölümleme (bir veri bölümleme tekniği) uygulamak, veriyi belirli kriterlere göre daha küçük küplere böler. Veriyi sorguladığınızda, arama alakasız küpler atlanarak belirli bir küpte yapılır ve G/Ç işlemleri azalır.
Benzer şekilde, boyut bölümleme düzey, hiyerarşi veya sütuna göre veriyi ayırmak için uygulanabilir.
Günlük (log) yönetimi
Günlükler, bir sistemde gerçekleşen olaylar, işlemler ve operasyonlara ilişkin bilgiler içerir. Hataları, bug’ları, uç durumları ve hatta başarı mesajlarını izlemek için kullanılırlar.
Günlük bölümleme, hata ayıklama sürecini hızlandırır ve gerekli bilgilere daha hızlı ulaşmanızı sağlar. Örneğin, günlükleri zaman aralığına göre bölümlediyseniz, onlara tarih, hafta, ay veya yıla göre kolayca erişebilirsiniz.
Makine öğrenimi hatları
Makine öğrenimi kullanım senaryolarında, veriler eğitim, doğrulama ve test kümelerine bölünür. Bu yaklaşım, aşırı uyumu önlemek için test setinden gelen içgörülerin eğitim sırasında modele ortaya çıkmamasını sağlar.
Ayrıca, eğitim verisi çok büyükse, tek bir makine tüm veriyi işleyip modele besleyemez. Bu nedenle, veriler parçalara ayrılır ve veri bölümleme yoluyla modele aktarılır.
Veri Bölümleme Araçları
Veri bölümleme hem SQL hem de NoSQL veritabanlarında uygulanabilir. Bu bölümde bunları tartışalım.
SQL veritabanları
PostgreSQL
PostgreSQL, aralık, liste ve karma bölümleme için yerleşik destek sunar. Örneğin, aşağıdaki sorgu her mali yıl için satış kârlarına ve toplam satışlara verimli erişim sağlamak üzere her yıl için bir bölüm oluşturur.
MySQL, aralık, liste, karma ve anahtar bölümleme gibi farklı yatay bölümleme türlerini destekler. Şu anda (sürüm 8.4) dikey bölümlemeyi desteklemez.
Aşağıdaki MySQL sorgusu, çalışan verilerini işe başlama tarihlerine göre p1, p2 ve p3 olmak üzere üç gruba böler. 2000’den önce işe başlayanların tümü p1 bölümüne düşer. 2000 ile 2010 arasında başlayanlar p2 bölümüne, 2010 ile 2020 arasında başlayanlar ise p3 bölümüne girer.
CREATETABLE employee(
firstname VARCHAR(25)NOTNULL,
username VARCHAR(16)NOTNULL,
email VARCHAR(35),
salary INT,
joined DATENOTNULL)PARTITIONBY RANGE(YEAR(joined))(PARTITION p1 VALUES LESS THAN (2000),PARTITION p2 VALUES LESS THAN (2010),PARTITION p3 VALUES LESS THAN (2020));Altyapı:
Microsoft SQL Server
SQL Server, bölüm fonksiyonları ve bölüm şemaları aracılığıyla bölümleme özellikleri sunar. Bir bölüm fonksiyonu verinin nasıl bölüneceğini belirtirken, bölüm şeması bölümün hangi dosya grubunda saklanacağını belirler.
Aşağıdaki sorgularda:
Fonksiyon adı: sales_by_year
Şema adı: sales_filegroup
Dosya grubu adları: fg01, fg02, fg03, fg04
Bölüm fonksiyonu:
createpartitionfunction sales_by_year (date)as range rightforvalues('2024-01-01','2024-02-01','2024-03-01', ‘2024-04-01’);Altyapı:
Sorguda range right belirttiğimiz için, her sınır tarihi bir sonraki bölüme dahildir.
SQL Server kullanıyorsanız, bu SQL Server eğitimi bölümlemeli veriyi yönetmeye yönelik temel kavramlar ve araçları adım adım açıklar. Daha yapılandırılmış bir öğrenme yolu için, SQL Server Fundamentals öğrenme yolu performanslı SQL veritabanları oluşturmak için gereken temel özellikleri tanıtır.
NoSQL veritabanları
Amazon DynamoDB
DynamoDB bölümlemeyi dahili olarak otomatik olarak yönetir. Bir öğeyi DynamoDB tablosuna yazdığınızda, istek bir yönlendiriciden geçer. Yönlendirici bölüm anahtarını ayrıştırır ve bir karma fonksiyonu uygular. Karma fonksiyonunun çıktısı, kaydın hangi bölümde saklanacağını belirler.
Bu sürecin tamamı DynamoDB içinde otomatikleştirilmiştir; kullanıcı, karma fonksiyonu veya bölümlerin nasıl yönetildiği konusunda endişelenmek zorunda değildir.
Mongodb
MongoDB, veriyi sharding kavramı aracılığıyla sunucular arasında dağıtır. Veri, düğümler arası dengesiz dağılımları önlemek için dikkatle seçilmesi gereken bir parça (shard) anahtarına göre bölümlemeye tabi tutulur.
Genellikle, parça anahtarının yüksek kartlılığa sahip olması ve sorgularda sık kullanılan sütun olması gerekir. Bu MongoDB mülakat soruları sharding dahil neredeyse tüm önemli konuları kapsar.
Apache Cassandra
Cassandra bölümleyicisi, bir kümedeki hangi düğümün belirli bir bölümü saklaması gerektiğini belirleyen bir karma algoritmasıdır. Bölüm anahtarı, bir belirteç (token) üretmek için algoritmadan geçirilir. Bu belirteç daha sonra düğümlere atanan belirteç değerleriyle karşılaştırılır. Son olarak, veri belirteçle eşleşen düğümde saklanır.
Yaygın bölümleme algoritmaları arasında Murmur3Partitioner, RandomPartitioner ve ByteOrderedPartitioner bulunur.
Veri Bölümleme Nasıl Uygulanır?
Şimdi, veri bölümlemeyi doğru şekilde uygulamak için gerekli adımları tartışalım.
Adım 1: Veriyi ve erişim kalıplarını anlayın
Uygulamanızın veritabanını nasıl sorguladığını, hangi verilere sık erişildiğini, verinin boyutunu ve performans darboğazlarını kapsamlı şekilde değerlendirin. Bu içgörüler, bölümleme için net hedefler tanımlamanıza ve veri işlemlerinde sıkça yer alan temel sütunları belirlemenize yardımcı olur.
Adım 2: Bir bölümleme tekniği seçin
Daha önce yaygın teknikleri ele aldık; aralarında nasıl karar vereceğiniz şöyle:
Yatay bölümleme: Tek bir tabloda saklanacak milyonlarca ve milyarlarca satırınız olup bellek sorunlarına yol açacaksa yatay bölümlemeyi seçmelisiniz. Farklı satır kümelerini farklı tablolarda saklar.
Dikey bölümleme: Bir sütun grubu sıklıkla erişiliyor, diğerleri ise ara sıra sorgulanıyorsa, sütunları erişim kalıplarına göre ayrı ayrı depolamak için dikey bölümleme uygulayabilirsiniz.
Hibrit yaklaşım: Hem satır sayısını azaltmanız hem de belirli bir sütun alt kümesi için sorguları optimize etmeniz gereken daha büyük veri kümeleri olduğunda hibrit bir yaklaşımı seçmelisiniz. Hem yatay hem de dikey bölümlemenin avantajlarını birleştirir.
Adım 3: Bölümleri oluşturun
Aşağıda, karma bölümleme kullanarak bölümler oluşturmak için bir örnek SQL sorgusu yer alıyor.
Yukarıdaki kodda, ‘location_id’ sütunu karma fonksiyonuna geçirilir ve çıktı, kaydın hangi bölüme atanacağını belirler. partitions 4 kod satırı, oluşturulması gereken toplam bölüm sayısını belirtir.
Bu kullanışlı SQL Temelleri Cheat Sheet sayfasını yer imlerine ekleyerek bölümleri uygularken temel SQL sözdizimine hızlıca başvurabilirsiniz.
Adım 4: Bölümleri izleyin ve optimize edin
Veri işlemlerinizi sürekli izleyin ve bölümlerin güncel ve geçerli olduğundan emin olun.
Uygulama ölçeklendikçe, daha fazla bölüm eklemeniz veya değişen talepleri karşılamak için hibrit bir yaklaşım gibi farklı bir yöntem seçmeniz gerekebilir.
Bölüm boyutunun ve stratejisinin, veritabanında sık gerçekleştirilen işlemlere fayda sağladığından emin olun.
Verinin bölümler arasında eşit dağıldığından emin olun; aksi halde yeniden dengeleme gerekebilir.
Veri Bölümleme İçin Zorluklar ve Dikkat Edilecekler
Yazılım dünyasında her optimizasyonda olduğu gibi, bunun da ödünleri ve zorlukları vardır. Göz önünde bulundurmanız gerekenler şunlardır:
Bölüm kayması (skew): Bölüm kayması, bazı bölümlerin daha fazla veri ve işlem yükü alırken diğerlerinin sıklıkla boşta kalmasıdır. Bunu önlemek için, veriyi tüm bölümlere eşit dağıtan doğru bölüm anahtarını ve stratejiyi seçin.
Bakım yükü:Veri büyüdükçe, mevcut bölümleme stratejilerini yeniden değerlendirmeniz ve mevcut veriye uygun olduklarından emin olmanız gerekir. Değilse, yeniden bölümleme yapmanız veya bölümleri birleştirmeniz gerekebilir.
Veri taşımaları: Verinizi yeni bir mimariye taşırken, bölümlerin yeni ortamla uyumlu olmasını sağlamak için ekstra özen gerekir. Ayrıca, veriyi bölümler arasında taşımak, parçalarda tutarlılığı yönetmek gibi karmaşıklıkları içerir.
Zor öğrenme eğrisi: Veri bölümleme bir sistem veya bulut mimarisine karmaşıklık katar. Sorgulamak, taşımak veya analiz etmek doğrudan değildir; bu da yeni başlayanlar için dik bir öğrenme eğrisiyle sonuçlanır.
Veri Bölümleme İçin En İyi Uygulamalar
Gördüğünüz gibi, veri hacmi arttıkça veri bölümleme karmaşıklaşır. Ancak bu uygulamaları hayata geçirmek, performansı etkilemeden verimliliği artırmasını sağlar.
Bölümleri sorgu kalıplarıyla hizalayın:Doğru bölümleme stratejisi ve bölüm anahtarını seçmek, veritabanı performansını önemli ölçüde iyileştirebilir. Veritabanınızdaki en yaygın veri işlemlerini ve sorgu kalıplarını anlayın ve hem sık sorgulanan hem de eşit veri dağılımını sağlayan bir bölüm anahtarı seçin.
Düzenli izleme: Günümüzde uygulamalar dinamik ve değişen trendler ile talepler doğrultusunda sürekli evrim geçiriyor. Bu nedenle, bölümlerinizi mevcut erişim kalıplarıyla uyumlu olacak şekilde düzenli olarak izlemek ve gerekirse yeniden bölümlemek önemlidir.
Fazla yükü en aza indirin: Büyük ölçekte bölümleri manuel olarak yönetmek karmaşıktır. Ancak Apache Cassandra ve Amazon DynamoDB gibi NoSQL veritabanları, fazla ek iş gerektirmeden süreci otomatikleştirir. Ayrıca bazı otomasyon araçları, veri ölçeklendikçe bölümleri ayarlar; ihtiyaçlarınıza göre yeniden bölümleme veya bölüm birleştirme yapar.
Sonuç
Etkili veri bölümleme, verileriniz büyüdükçe performansı ve ölçeklenebilirliği korumak için kritik öneme sahiptir. Doğru stratejiyle, sorgu gecikmesini azaltabilir, depolamayı optimize edebilir ve bakımı kolaylaştırabilirsiniz. Ölçülebilir etkisi olan pratik bir adımdır.
Bölümlemenin dağıtık sistemlerin ölçeklenmesini nasıl mümkün kıldığını daha derinlemesine incelemek için şu Kafka bölümleri rehberine göz atın. İlişkisel yapının bölümleme kararlarını nasıl etkilediğini anlamak için de bu ilişkisel veritabanları kursu ile başlayın.
Srujana, Bilgisayar Bilimleri alanında dört yıllık dereceye sahip serbest çalışan bir teknoloji yazarıdır. Veri bilimi, bulut bilişim, geliştirme, programlama, güvenlik ve daha birçok konuyu yazmak onun için doğal bir süreçtir. Klasik edebiyata ve yeni yerler keşfetmeye tutkuyla bağlıdır.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
İster müşteri odaklı uygulamalar geliştiriyor olun ister karmaşık analitik hatları çalıştırıyor olun, bir şey netleşir: verileri nasıl depoladığınız ve eriştiğiniz performansı belirleyebilir.
Veriler düşünülerek yapılandırıldığında sistemlerin ne kadar sorunsuz çalıştığını bizzat gördüm ve burada veri bölümleme devreye giriyor. Sorgu hızını, depolama verimliliğini ve ölçeklenebilirliği ciddi şekilde iyileştirebilen tekniklerden biridir.
Bu yazıda veri bölümlenmeyi, mevcut türlerini ve yol boyunca edindiğim en iyi uygulamaları açıklayacağım.
Veri Bölümleme Nedir?
Veri bölümleme, büyük veri kümelerini bölümler adı verilen daha küçük, yönetilebilir parçalara ayırma tekniğidir. Her bölüm, verinin bir alt kümesini içerir ve birden fazla düğüm veya sunucuya dağıtılır. Bu bölümler mantıksal olarak aynı veri kümesine ait olsalar da tekil tablolar gibi depolanabilir, sorgulanabilir ve yönetilebilir.
Veri bölümleme, veritabanı performansını ve ölçeklenebilirliğini artırır. Örneğin, bir veri noktasını tüm tablo içinde aramak, onu belirli bir bölümde aramaktan daha uzun sürer ve daha fazla kaynak kullanır. Bu nedenle veriler bölümler halinde depolanır.
Veri Bölümleme Türleri
Veri bölümleme, her biri kendine özgü strateji ve faydalara sahip çeşitli türleri kapsar. Bu bölümde, en yaygın türleri ele alıyorum.
Yatay bölümleme
Tüm verileri tek bir tabloda saklamak yerine, yatay bölümleme veriyi satırlara böler; yani farklı satır kümeleri bölümler olarak saklanır.
Yatay bölümlemenin tüm bölümleri aynı sütun setini içerir ancak farklı satır gruplarına sahiptir.
Sıcaklık
Eyalet
Ülke
Mevsim
-30° F
Alaska
USA
Kış
48.2° F
Queensland
Australia
Yaz
100° F
Andhra Pradesh
India
Yaz
35° F
California
USA
Kış
96° F
Texas
USA
Yaz
62° F
Tasmania
Australia
Kış
Ülkeye göre yatay bölümleme:
Sıcaklık
Eyalet
Ülke
Mevsim
-30° F
Alaska
USA
Kış
35° F
California
USA
Kış
35° F
California
USA
Kış
Sıcaklık
Eyalet
Ülke
Mevsim
48.2° F
Queensland
Australia
Yaz
62° F
Tasmania
Australia
Kış
Sıcaklık
Eyalet
Ülke
Mevsim
100° F
Andhra Pradesh
India
Yaz
Dikey bölümleme
Dikey bölümleme veriyi sütunlara göre böler; böylece her bölüm aynı sayıda satır içerir ancak daha az sütun barındırır.
Bölüm anahtarı veya birincil sütun her bölümde bulunur ve mantıksal ilişkiyi korur.
Dikey bölümleme, hassas bilgilerin normal verilerden ayrı saklanması gerektiğinde yaygındır. Hassas sütunların bir bölümde, standart verilerin ise başka bir bölümde tutulmasını sağlar.
Bir diğer yaygın kullanım, sık güncellenen sütunları tek bir bölümde, diğerlerini ayrı bir bölümde gruplamaktır.
Emp_id
Emp_name
Unvan
Emp_email
Emp_phone
Emp_salary
z0yu9h
Alex
Veri bilimci
[email protected]
+101 890 456
250K
f8o5pj
Adam
Veri mühendisi
[email protected]
+630 789 365
230K
z006yu
Matt
Veri analisti
[email protected]
+857 342 937
166K
a6u895
Elina
Operasyon mühendisi
[email protected]
+892 494 782
190K
g68w90
Joseph
Yazılım mühendisi
[email protected]
+852 603 389
210K
Emp_idyukarıdaki tabloda benzersiz tanımlayıcıdır, bu yüzden tüm bölümlerde bulunur.Bölüm 1:
Emp_id
Emp_name
Unvan
Emp_email
z0yu9h
Alex
Veri bilimci
[email protected]
f8o5pj
Adam
Veri mühendisi
[email protected]
z006yu
Matt
Veri analisti
[email protected]
a6u895
Elina
Operasyon mühendisi
[email protected]
g68w90
Joseph
Yazılım mühendisi
[email protected]
Bölüm 2:
Emp_id
Emp_phone
Emp_salary
z0yu9h
+101 890 456
250K
f8o5pj
+630 789 365
230K
z006yu
+857 342 937
166K
a6u895
+892 494 782
190K
g68w90
+852 603 389
210K
Aralık bölümleme
Aralık bölümleme, veriyi belirli bir sütun için değer aralığına göre böler.
Genellikle, her bölümde anahtar sütun için alt ve üst sınır bulunur ve bu aralığa düşen bir kayıt o bölüme atanır.
Product_id
Tarih
Kâr
z0yu9h
2021-03-17
$100K
f8o5pj
2022-04-04
$234K
z006yu
2022-09-13
$789K
a6u895
2021-07-23
$237K
g68w90
2022-02-26
$2345K
Bölüm 1:
product_id
Tarih
Kâr
z0yu9h
2021-03-17
$100K
a6u895
2021-07-23
$237K
Bölüm 2:
product_id
Tarih
Kâr
f8o5pj
2022-04-04
$234K
z006yu
2022-09-13
$789K
Karma (hash) bölümleme
Bölüm anahtarına bir karma (hash) fonksiyonu uygulanır ve çıktı, hangi kaydın hangi bölümde saklanacağını belirler. Bu teknikte bölüm sayısı önceden belirlenir.
Karma değerinin bölüm sayısına bölümünden kalan, ilgili kaydın hangi bölümde saklanacağını belirler. Bunu bir örnekle görelim:
z0yu9holan ürün içinhash(‘z0yu9h’) = 101ve bölüm sayısı = 4 ise, 101%4 = 1 olur. Dolayısıyla bu kayıt birinci bölümde saklanır.Bu şekilde, bölüm anahtarı sütunu için karma değerleri hesaplanır, bölüm sayısına bölünür ve sonuç nihai bölümü belirler.
Liste bölümleme
Prosedür aralık bölümlemeye benzer, ancak veriyi bir değer aralığına göre bölmek yerine, liste bölümleme veriyi önceden tanımlanmış bir değer kümesine göre böler.
Örnek olarak sıcaklık tablosunu tekrar ele alalım.
Sıcaklık
Eyalet
Ülke
Mevsim
30° F
Alaska
USA
Kış
48.2° F
Queensland
Australia
Yaz
100° F
Andhra Pradesh
India
Yaz
35° F
California
USA
Kış
96° F
Texas
USA
Yaz
62° F
Tasmania
Australia
Kış
Yukarıdaki veride ‘Mevsim’ sütunu
[‘winter’, ‘summer’]değer listesini içerir. Dolayısıyla mevsime göre liste bölümleme şöyle görünür:Bölüm 1:
Sıcaklık
Eyalet
Ülke
Mevsim
30° F
Alaska
USA
Kış
35° F
California
USA
Kış
62° F
Tasmania
Australia
Kış
Bölüm 2:
Sıcaklık
Eyalet
Ülke
Mevsim
48.2° F
Queensland
Australia
Yaz
100° F
Andhra Pradesh
India
Yaz
96° F
Texas
USA
Yaz
Bileşik bölümleme
Bileşik bölümleme, iki bölümleme tekniğinin birleşimidir. Bir tablo önce bir stratejiyle bölünür, her bölüm daha sonra başka bir teknikle yeniden bölünür.
Bölümleme stratejileri teknik mülakatlarda sıkça konuşulur—2025 için en iyi DBA mülakat sorularına göz atın.
Veri Bölümlemenin Kullanım Alanları
Artık farklı bölümleme stratejilerini değerlendirdiğimize göre, veri bölümlemenin ne zaman faydalı olduğuna bakalım.
Dağıtık veritabanları
Dağıtık sistemler, fiziksel olarak ayrı sunucularda bulunan ancak ağ üzerinden birbirine bağlı düğümler koleksiyonudur. Örnekler arasında Apache Cassandra, Amazon DynamoDB ve Google Bigtable bulunur.
Bu sistemler, veriyi düğümler arasında düzenlemek ve dağıtmak için içsel olarak veri bölümlemeyi kullanır.
OLAP işlemleri
OLAP, çok boyutlu veriyi küpler olarak temsil eder ve kullanıcıların veriyi farklı açılardan keşfetmesine olanak tanır. Bu küpler önceden birleştirilmiş verileri temsil etse de, alttaki veri hâlâ büyüktür; bu nedenle sorguların veri bölümleme ile daha da optimize edilmesi gerekir.
Örneğin, küp bölümleme (bir veri bölümleme tekniği) uygulamak, veriyi belirli kriterlere göre daha küçük küplere böler. Veriyi sorguladığınızda, arama alakasız küpler atlanarak belirli bir küpte yapılır ve G/Ç işlemleri azalır.
Benzer şekilde, boyut bölümleme düzey, hiyerarşi veya sütuna göre veriyi ayırmak için uygulanabilir.
Günlük (log) yönetimi
Günlükler, bir sistemde gerçekleşen olaylar, işlemler ve operasyonlara ilişkin bilgiler içerir. Hataları, bug’ları, uç durumları ve hatta başarı mesajlarını izlemek için kullanılırlar.
Günlük bölümleme, hata ayıklama sürecini hızlandırır ve gerekli bilgilere daha hızlı ulaşmanızı sağlar. Örneğin, günlükleri zaman aralığına göre bölümlediyseniz, onlara tarih, hafta, ay veya yıla göre kolayca erişebilirsiniz.
Makine öğrenimi hatları
Makine öğrenimi kullanım senaryolarında, veriler eğitim, doğrulama ve test kümelerine bölünür. Bu yaklaşım, aşırı uyumu önlemek için test setinden gelen içgörülerin eğitim sırasında modele ortaya çıkmamasını sağlar.
Ayrıca, eğitim verisi çok büyükse, tek bir makine tüm veriyi işleyip modele besleyemez. Bu nedenle, veriler parçalara ayrılır ve veri bölümleme yoluyla modele aktarılır.
Veri Bölümleme Araçları
Veri bölümleme hem SQL hem de NoSQL veritabanlarında uygulanabilir. Bu bölümde bunları tartışalım.
SQL veritabanları
PostgreSQL
PostgreSQL, aralık, liste ve karma bölümleme için yerleşik destek sunar. Örneğin, aşağıdaki sorgu her mali yıl için satış kârlarına ve toplam satışlara verimli erişim sağlamak üzere her yıl için bir bölüm oluşturur.
MySQL
MySQL, aralık, liste, karma ve anahtar bölümleme gibi farklı yatay bölümleme türlerini destekler. Şu anda (sürüm 8.4) dikey bölümlemeyi desteklemez.
Aşağıdaki MySQL sorgusu, çalışan verilerini işe başlama tarihlerine göre
p1,p2vep3olmak üzere üç gruba böler. 2000’den önce işe başlayanların tümüp1bölümüne düşer. 2000 ile 2010 arasında başlayanlarp2bölümüne, 2010 ile 2020 arasında başlayanlar isep3bölümüne girer.Microsoft SQL Server
SQL Server, bölüm fonksiyonları ve bölüm şemaları aracılığıyla bölümleme özellikleri sunar. Bir bölüm fonksiyonu verinin nasıl bölüneceğini belirtirken, bölüm şeması bölümün hangi dosya grubunda saklanacağını belirler.
Aşağıdaki sorgularda:
sales_by_yearsales_filegroupfg01,fg02,fg03,fg04Bölüm fonksiyonu:
Bölüm şeması:
Burada, dosyalar veriyi şu şekilde saklar:
fg01- ‘2024-01-01’ tarihinden önceki tarihler,fg02- ‘2024-01-01’ ile ‘2024-01-31’ arasıfg03- ‘2024-02-01’ ile ‘2024-02-29’ arasıfg04- ‘2024-03-01’ ile ‘2024-03-31’ arasıSorguda
range rightbelirttiğimiz için, her sınır tarihi bir sonraki bölüme dahildir.SQL Server kullanıyorsanız, bu SQL Server eğitimi bölümlemeli veriyi yönetmeye yönelik temel kavramlar ve araçları adım adım açıklar. Daha yapılandırılmış bir öğrenme yolu için, SQL Server Fundamentals öğrenme yolu performanslı SQL veritabanları oluşturmak için gereken temel özellikleri tanıtır.
NoSQL veritabanları
Amazon DynamoDB
DynamoDB bölümlemeyi dahili olarak otomatik olarak yönetir. Bir öğeyi DynamoDB tablosuna yazdığınızda, istek bir yönlendiriciden geçer. Yönlendirici bölüm anahtarını ayrıştırır ve bir karma fonksiyonu uygular. Karma fonksiyonunun çıktısı, kaydın hangi bölümde saklanacağını belirler.
Bu sürecin tamamı DynamoDB içinde otomatikleştirilmiştir; kullanıcı, karma fonksiyonu veya bölümlerin nasıl yönetildiği konusunda endişelenmek zorunda değildir.
Mongodb
MongoDB, veriyi sharding kavramı aracılığıyla sunucular arasında dağıtır. Veri, düğümler arası dengesiz dağılımları önlemek için dikkatle seçilmesi gereken bir parça (shard) anahtarına göre bölümlemeye tabi tutulur.
Genellikle, parça anahtarının yüksek kartlılığa sahip olması ve sorgularda sık kullanılan sütun olması gerekir. Bu MongoDB mülakat soruları sharding dahil neredeyse tüm önemli konuları kapsar.
Apache Cassandra
Cassandra bölümleyicisi, bir kümedeki hangi düğümün belirli bir bölümü saklaması gerektiğini belirleyen bir karma algoritmasıdır. Bölüm anahtarı, bir belirteç (token) üretmek için algoritmadan geçirilir. Bu belirteç daha sonra düğümlere atanan belirteç değerleriyle karşılaştırılır. Son olarak, veri belirteçle eşleşen düğümde saklanır.
Yaygın bölümleme algoritmaları arasında
Murmur3Partitioner,RandomPartitionerveByteOrderedPartitionerbulunur.Veri Bölümleme Nasıl Uygulanır?
Şimdi, veri bölümlemeyi doğru şekilde uygulamak için gerekli adımları tartışalım.
Adım 1: Veriyi ve erişim kalıplarını anlayın
Uygulamanızın veritabanını nasıl sorguladığını, hangi verilere sık erişildiğini, verinin boyutunu ve performans darboğazlarını kapsamlı şekilde değerlendirin. Bu içgörüler, bölümleme için net hedefler tanımlamanıza ve veri işlemlerinde sıkça yer alan temel sütunları belirlemenize yardımcı olur.
Adım 2: Bir bölümleme tekniği seçin
Daha önce yaygın teknikleri ele aldık; aralarında nasıl karar vereceğiniz şöyle:
Adım 3: Bölümleri oluşturun
Aşağıda, karma bölümleme kullanarak bölümler oluşturmak için bir örnek SQL sorgusu yer alıyor.
Yukarıdaki kodda, ‘location_id’ sütunu karma fonksiyonuna geçirilir ve çıktı, kaydın hangi bölüme atanacağını belirler.
partitions 4kod satırı, oluşturulması gereken toplam bölüm sayısını belirtir.Bu kullanışlı SQL Temelleri Cheat Sheet sayfasını yer imlerine ekleyerek bölümleri uygularken temel SQL sözdizimine hızlıca başvurabilirsiniz.
Adım 4: Bölümleri izleyin ve optimize edin
Veri Bölümleme İçin Zorluklar ve Dikkat Edilecekler
Yazılım dünyasında her optimizasyonda olduğu gibi, bunun da ödünleri ve zorlukları vardır. Göz önünde bulundurmanız gerekenler şunlardır:
Veri Bölümleme İçin En İyi Uygulamalar
Gördüğünüz gibi, veri hacmi arttıkça veri bölümleme karmaşıklaşır. Ancak bu uygulamaları hayata geçirmek, performansı etkilemeden verimliliği artırmasını sağlar.
Sonuç
Etkili veri bölümleme, verileriniz büyüdükçe performansı ve ölçeklenebilirliği korumak için kritik öneme sahiptir. Doğru stratejiyle, sorgu gecikmesini azaltabilir, depolamayı optimize edebilir ve bakımı kolaylaştırabilirsiniz. Ölçülebilir etkisi olan pratik bir adımdır.
Bölümlemenin dağıtık sistemlerin ölçeklenmesini nasıl mümkün kıldığını daha derinlemesine incelemek için şu Kafka bölümleri rehberine göz atın. İlişkisel yapının bölümleme kararlarını nasıl etkilediğini anlamak için de bu ilişkisel veritabanları kursu ile başlayın.