Ana içeriğe geç

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.
Srujana Maddula
Srujana Maddula

Ücretsiz Hesabınızı Oluşturun

Alıştırma and program your progress.

Google ile devam edinDevam ederek, Kullanım Koşullarımızı ve Gizlilik Politikamızı kabul etmiş ve verilerinizin ABD'de saklandığını onaylamış olursunuz.

İ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. 

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_id yukarı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. 

  • Ö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.

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.

CREATE TABLE sales(
    city_id         int not null,
    sales_year      date not null,
    total_sales     int,
    sales_profits   int
) PARTITION BY RANGE (sales_year);

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, 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.

CREATE TABLE employee(
    firstname VARCHAR(25) NOT NULL,
    username VARCHAR(16) NOT NULL,
    email VARCHAR(35),
    salary INT,
    joined DATE NOT NULL
)
PARTITION BY RANGE( YEAR(joined) ) (
    PARTITION p1 VALUES LESS THAN (2000),
    PARTITION p2 VALUES LESS THAN (2010),
    PARTITION p3 VALUES LESS THAN (2020)
);

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:

create partition function sales_by_year (date)
as range right for values 
('2024-01-01', '2024-02-01', '2024-03-01', ‘2024-04-01’);

Bölüm şeması:

CREATE PARTITION SCHEME sales_filegroup
AS PARTITION sales_by_year
TO (fg01, fg02, fg03, fg04);

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 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.

CREATE TABLE employees (
    emp_id INT NOT NULL,
    name VARCHAR(30),
    hired DATE NOT NULL DEFAULT '2024-01-01',
    job_id INT,
    location_id INT
)
PARTITION BY HASH(location_id)
PARTITIONS 4;

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 Maddula

Yazar

Srujana Maddula

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.

Konular

İlgili