Postgresql Citus

Citus, PostgreSQL veritabanı yönetim sistemi için geliştirilmiş bir uzantıdır ve yüksek performanslı, ölçeklenebilir veritabanları oluşturmak için kullanılır. Citus, PostgreSQL veritabanının işlevlerini genişletir ve verileri birçok farklı düğüme bölerek birden çok sunucu üzerinde paralel olarak işleme imkanı sağlar.

Citus, genellikle büyük ölçekli uygulamalarda kullanılır, özellikle de yüksek trafikli web siteleri ve veri analitiği uygulamaları gibi. Citus, veritabanı boyutunun artması durumunda ölçeklenebilirliği korur ve bu da yüksek performanslı veri işleme için önemlidir.

Citus, veritabanı yönetimi için birçok özellik sunar, örneğin; yüksek kullanılabilirlik, yedekleme ve geri yükleme, veritabanı güvenliği ve performans izleme gibi. Ayrıca Citus, açık kaynaklı bir yazılımdır ve PostgreSQL topluluğu tarafından geliştirilmiştir.

Citus Microsoft tarafından satın alınmış ve Microsoft çatısı altına almıştır.

Citusun logical replication dan farkı nedir ?

Citus ve logical replication, PostgreSQL veritabanı yönetim sistemi için farklı özelliklerdir.

Citus, yüksek performanslı ve ölçeklenebilir veritabanları oluşturmak için kullanılan bir PostgreSQL uzantısıdır. Citus, PostgreSQL veritabanının işlevlerini genişletir ve verileri birçok farklı düğüme bölerek birden çok sunucu üzerinde paralel olarak işleme imkanı sağlar. Citus, ölçeklenebilirliği koruyarak veritabanı boyutunun artması durumunda yüksek performanslı veri işleme için önemlidir.

Logical replication ise, PostgreSQL veritabanlarında verilerin bir veritabanından başka bir veritabanına kopyalanması için kullanılan bir özelliktir. Bu, veri yedekleme, yüksek kullanılabilirlik, veri entegrasyonu ve raporlama gibi senaryolarda yaygın olarak kullanılır. Logical replication, verilerin tek tek kayıtlarının kopyalanmasını sağlar, böylece kaynak ve hedef veritabanları arasındaki farklılıkları yönetmek için esnek bir yapıya sahiptir.

Citus ve logical replication arasındaki fark, Citus’un ölçeklenebilir veritabanlarının oluşturulması için kullanılmasıdır, oysa logical replication veri kopyalama ve senkronizasyonu için kullanılır. Yani Citus veritabanının ölçeklendirilmesi için kullanılırken, logical replication ise veri senkronizasyonu için kullanılır.

citus’un partition farkı nedir?

 

Citus ve Partitioning (bölütleme), PostgreSQL veritabanı yönetim sistemi için farklı özelliklerdir.

Partitioning, büyük veri kümelerini daha yönetilebilir parçalara ayırmak için kullanılan bir yöntemdir. PostgreSQL’de partitioning özelliği, bir tablonun farklı bölümlere ayrılmasını sağlar. Bu bölümler farklı kriterlere göre ayrılabilir, örneğin tarih aralığı, coğrafi bölge, müşteri, ürün kategorisi gibi. Bu şekilde, veriler daha küçük, daha kolay yönetilebilir parçalara ayrılır ve sorgu performansı artar.

Citus’un partitioning özelliği ise, PostgreSQL’deki partitioning özelliğini genişleterek birden fazla düğümde bölütleme yapmayı sağlar. Bu sayede, veriler paralel olarak birden fazla sunucuda işlenebilir ve sorgu performansı artırılabilir. Citus, partitioning özelliği sayesinde verileri birbiriyle ilişkili gruplara ayırarak, ölçeklenebilirliği ve performansı artırır.

Bu nedenle, Citus’un partitioning özelliği, PostgreSQL’deki partitioning özelliğine benzer bir işlevi yerine getirir, ancak birden fazla düğümde verileri bölütleme kabiliyeti sayesinde ölçeklenebilirlik ve performans açısından daha fazla avantaj sağlar.

Citus’da sık kullanılan bazı kavramlar

Worker Node: Citus kümesindeki bir veya daha fazla veritabanı sunucusu. Veritabanı kümenizdeki her bir worker node, verilerin depolandığı ve sorguların yürütüldüğü PostgreSQL veritabanısı sunucusunu çalıştırır.

Coordinator Node: Citus kümesindeki yönetici düğümü. Coordinator, kümedeki verilerin nerede depolandığını izler ve gelen sorguları yönlendirir. Her Citus kümesinde yalnızca bir Coordinator node olabilir.

Shard: Verilerin, bir veya daha fazla Worker node’da saklandığı parçalara verilen isim. Bir Shard genellikle bir veya daha fazla tablodaki verileri içerir.

Sharding Key: Verileri bölme ve bir veya daha fazla shard’a dağıtma işleminde kullanılan bir sütun veya sütunlar kümesidir. Sharding Key, sorguların verileri doğru shard’larda aramasını sağlar.

Distributed SQL: Verilerin birden fazla Worker node’da saklandığı dağıtılmış bir veritabanı sistemi üzerinde SQL sorgularını yürütme yöntemidir. Citus, PostgresSQL veritabanına yapılan bazı değişikliklerle (örneğin, verilerin shard’lara bölünmesi) dağıtılmış SQL işleme desteği ekler.

Replication: Bir Worker node’daki verilerin diğer Worker nodelara kopyalanmasıdır. Citus, yerel veritabanı replikasyonu veya mantıksal replikasyon gibi farklı replikasyon yöntemlerini kullanabilir.

 

Citus Nasıl kurulur?

Citus, için birden fazla sunucu ve bu sunucu üzerinde postgresql yüklü olması gerekiyor.

apt-get install postgresql-14 

Postgresql kurulumunu iki makine üzerinde yaptık sıra citus kurulumda.

apt-get update -y

apt-get -y install postgresql-14-citus-10.2

Kurulumlar tamamlandıktan sonra postgresql.conf üzerinde aşağıdaki değişiklikleri yapıyoruz.

vim /etc/postgresql/14/main/postgresql.conf


listen_addresses = '*' 
shared_preload_libraries = 'citus' 

Yukarıdaki değişiklikleri yaptıktan sonra pg_hba.conf üzerinde değişiklikleri yapmayı unutmayınız.. Yapılmadığı durumda sunucular kendi aralarında haberleşmeyecek ve citus nodelar arasında dağıtım yapmayacaktır.

Değişiklik yapıldıktan sonra postgresql servisini restart ediyoruz.

systemctl restart postgresql-14@main

Postgresql e bağlanarak veritabanı oluşturduktan sonra extension oluşturuyoruz.

create database frk;

Frk veritabanına bağlanıyoruz.

\c frk

create extension citus ;

Citus nodelarımızı ekliyoruz.

SELECT citus_add_node('192.168.242.151', 5432);

SELECT citus_add_node('192.168.242.152', 5432);

Tablomuzu oluşturuyoruz ve içerisine veri ekliyoruz.

CREATE TABLE personel(id serial primary key,adi text, soyadi text, bölümü text,ise_baslangic_tarihi date);
INSERT INTO personel VALUES (1,'Faruk','ERDEM','Veritabani','2012-09-09');
INSERT INTO personel VALUES (2,'Faruk','ERDEM','Veritabani','2012-09-10');
INSERT INTO personel VALUES (3,'Faruk','ERDEM','Veritabani','2012-09-11');
INSERT INTO personel VALUES (4,'Faruk','ERDEM','Veritabani','2012-09-12');
INSERT INTO personel VALUES (5,'Faruk','ERDEM','Veritabani','2012-09-13');

Aşağıdaki komutlar yardımı ile diğer node  dağıtıyoruz.

SELECT create_distributed_table('personel', 'id');

 SELECT truncate_local_data_after_distributing_table($$public.personel$$)

Tablomuzu distributed tablo olmus mu kontrol edelim.

Tablomuzun shardlarını kontrol edelim.

select*from citus_shards;

Citus tablomuza index eklemek için İndex Nedir başlığının altındaki indexlere tıklayarak index atabilirsiniz.

Sorguların costlarını görmek için Çalıştırma Planı (Execution Plan)( * EXPLAIN ‘ i anlamak) başlıklı yazıya tıklayarak detayları görebilirsiniz.


Yukarıdaki örnekte gördüğünüz gibi farklı bir tablo üzerinde sorgu çalıştırdığımızda ilgili sunucudaki kayıtı getirdiğini görüyoruz.

 

Loading