Turkcell | Geleceği Yazanlar

GELECEĞİ YAZANLAR BLOG

Yeni Blog Yaz

Açık Kaynak Kodlu İlişkisel Veri Tabanı Yazılımı PostgreSQL

Fahri Kaan Göktuna - 22 Mart 2020

PostgreSQL 1986 yılında Berkeley University tarafından POSTGRES adında 30 yılı aşkın süredir aktif olarak geliştirilen açık kaynak kodlu ilişkisel bir veri tabanı çözümüdür.

PostgreSQL yazılımcılar topluluğu tarafından kabul görmüş gelişmiş bir yazılım mimarisine, veri bütünlüğüne, genişletilebilir ve esnetilebilir bir yazılıma sahiptir. 

Aşağıda PostgreSQL 'nin sahip olduğu, son güncel versiyonuyla birlikte oluşan özelliklerinin bazılarını görebilirsiniz.

1.     Veri Tipleri (Data Types)

  • Basit Veri Tipleri: Integer, Numeric, String, Boolean
  • Yapısal Veri Tipleri: Date/Time, Array, Range, UUID
  • Doküman Bazlı Veri Tipleri: JSON/JSONB, XML, Key-value (Hstore)
  • Geometrik Veri Tipleri: Point, Line, Circle, Polygon
  • Özelleştirilmiş Veri Tipleri: Composite, Custom Types

            PostgreSQL veri tipleri açısından diğer ilişkisel veri tabanlarına kıyasla oldukça fazla veri setine sahiptir. PostgreSQL kaynak kodu gereği Object-Oriented geliştirildiğinden dolayı PostgreSQL içerisindeki her şey tip objedir (Veri tipleri dahil). Örneğin diğer ilişkisel veri tabanlarında pek sık karşılaşmadığımız JSON ve JSONB tipleri sayesinde PostgreSQL' i İlişkisel Veri tabanının doğası gereği getirdiği ACID (Atomicity, Consistency, Isolation, and Durability) özellikleri kaybetmeden oldukça performanslı bir şekilde "NoSql Document-DB" bir veri tabanı gibi kullanabilirsiniz.

2. Data Bütünlüğü (Data Integrity)​

Tekillik- UNIQUE, NOT NULL
Birincil Anahtarlar- Primary Keys
Yabancı Anahtarlar- Foreign Keys
Dışarda bırakılan Kısıtlamalar- Exclusion Constraints
Açık Kilitler - Explicit Locks, Advisory Locks

Bütün ilişkisel veri tabanlarında olduğu gibi veri tutarlılığı ve bütünlüğü PostgreSQL tarafından sağlanmaktadır. Transaction yönetimi özelinde PostgreSQL’ i diğer ilişkisel veri tabanlarından ayıran bir özellik ise “Transaction Isolation” seviyelerinde PostgreSQL' in "Dirty Read" 'i yani “Read UnCommitted” datayı desteklememesidir. Eğer diğer ilişkisel veri tabanlarından PostgreSQL’ e geçişi düşünüyorsanız transaction yönetimi seviyesinde karşılaşacağınız önemli noktalardan birisi budur.

3. Eşzamanlılık ve Performans (Concurrency and Performance)

İndeksleme İşlemleri- Indexing: B-tree, Multicolumn, Expressions, Partial
Gelişmiş İndeksleme: GiST, SP-Gist, KNN Gist, GIN, BRIN, Covering indexes, Bloom filters

PostgreSQL çeşitli indeks tiplerini sağlamaktadır. (B-tree, Hash, GiST ve GIN). Her bir indeks tipi farklı arama algoritmasını kullanır. Dolayısıyla siz ihtiyacınıza göre indekslerinizin tiplerini değiştirebilirsiniz. Örnek verecek olursak elinizde çoklu dil seçenekli uygulama ayarlarını tuttuğunuz bir tablonuz olsun. Burada dil kolonuna indeks tanımladınız böylelikle kullanacağınız indeks tipinin “Hash” indeks olması size avantaj sağlayacaktır. “Hash” indeks tipleri, sadece indeksi kolondaki değerle hashleyip saklar. Dolayısıyla tablodaki kolona gelecek language=tr, language=en gibi eşitlik içeren sorgularınızda indeks size performanslı bir şekilde dönüş sağlayacaktır. Bunun yanı sıra PostgreSQL “Partial Index”, “Covering Index”, “Unique Index”, “Order By Index” gibi diğer ilişkisel veri tabanlarının sağladığı indeksleme avantajlarını da sağlar.

4.Güvenilirlik ve Acil Kurtarma (Reliability and Disaster Recovery)

  • Tablo Alanları - Tablespaces

PostgreSQL’ de “TableSpaces” veri tabanı nesnelerinizi disk üzerinde farklı yerlerde saklamanızı sağlar. Bunun şöyle bir faydası olabilir, örneğin PostgreSQL Server’ını kurduğunuz sunucudaki diskte yeterli yer kalmadıysa, farklı bir disk bölümü üzerinde “tablespace” yaratılıp sistem disk üzerindeki yapılandırmaları tamamlanıncaya kadar PostgreSQL’ deki nesnelerinizi bu farklı disk üzerinde konumlandırabilirsiniz.

 
5. Güvenlik (Security)

  • Kimlik Doğrulama- Authentication: GSSAPI, SSPI, LDAP, SCRAM-SHA-256, Certificate etc.
  • Geliştirilmiş Erişim Kontrol Sistemi- Robust access-control system
  • Kolon ve satır bazlı güvenlik- Column and row-level security
  • Çok faktörlü kimlik doğrulama işlemleri- Multi-factor authentication with certificates and an additional method

PostgreSQL’ nin güvenlik açısından sağladığı avantajlardan birisi de “Authentication” ve sunucu temelli erişim kontrol mekanizmasıdır. Sunucu temelli erişim kontrol sistemi PostgreSQL Sunucusu üzerine hangi istemci adreslerinin erişim sağlayabileceği ve buradaki kullanıcıların o istemci adresleriyle nasıl onaylanacağı konusudur. Her veri tabanı “pg_hba.conf” isimin konfigürasyon dosyasında bu konfigürasyonu yapar. Veri tabanına erişimde bulunacak her istemci adresi bu konfigürasyon dosyasında tanımlanmalıdır. Aksi halde istemciler “User authentication failed” hata mesajıyla karşılaşacaktır.

6. Genişletebilirlik (Extensibility)

  • Saklı Yordamlar- Stored functions and procedures
  • Prosedürel Diller- Procedural Languages: PL/PGSQL, Perl, Python etc.
  • SQL/JSON yol ifadeleri- SQL/JSON path expressions
  • Yabancı Veri Örtüleri- Foreign data wrappers
  • PostgreSql Uzantıları - Extensions

PostgreSQL' nin açık kaynak kodlu genişletebilir bir yazılım olduğundan bahsetmiştik. PostgreSQL' in geliştiriciler tarafından en fazla sevilen özelliklerinden birisi de; Prosedürel Dil geliştirirken, sadece PostgreSQL'nin diline bağlı kalmamanızdır. PostgreSQL “Perl”, “Python”, “Java”, “Ruby” vb. gibi birçok dille geliştirmeye destek vermektedir. 

Turkcell uygulamaları için geliştirdiğimiz BPM (Business Process Management - Süreç Altyapısı) ürünü MSSQL veri tabanı ile çalışıyordu ve uygulama ihtiyacı olarak MSSQL tarafında 2 adet “User-Scalar” fonksiyonumuz vardı. Bu fonksiyonlar CLR çağrısı aracıyla .Net DLL çağrısı yapıp, veri tabanında “Binary” olarak tutulan veriyi, “Gzip” aracılığı ile ayıklanıp XML' e dönüştürüp geri dönüyordu. Diğer fonksiyonda bu fonksiyonun tam tersi işlemi gerçekleştiriyordu. Aynı ihtiyacı PostgreSQL tarafında da karşılamamız gerekti. Biz çözüm olarak Python ile bir Prosedürel fonksiyon geliştirdik ve “Gzip” ve XML dönüşüm işlemleri Python kodu aracılığıyla PostreSQL' e yaptırdık.

Turkcell’ de Açık Kaynak Kod Yazılım ve PostgreSQL

Son 1 yıldır Turkcell içerisinde açık kaynak kodlu yazılımlara geçiş ile ilgili büyük adımlar atılmaya başlandı. Bunun örneklerinden biri de Turkcell tarafından geliştirilen bir süreç altyapısı ürününü kapalı kutu ilişkisel veri tabanından PostgreSQL' e taşıma kararı idi.

Turkcell Teknoloji olarak, Açık Kaynak Kodlu Yazılımlara geliştirim ve kullanım anlamında destek sağlamak için şirket içerisinde Açık Kaynak Kodu destekleyen ve teşvik eden bir topluluk kurduk. Amacımız bu topluluğu elimizden geldiğince geliştirip, büyütmek ve Turkcell olarak Açık Kaynak Kodlu yazılımlara destek veren öncü kurumların başında gelmek olacaktır.

Bu nedenle açık kaynak kodun daha geniş kitlelere duyurulması noktasında Geleceği Yazanlar sitesi üzerinden bilgilerimizi sizlerle paylaşmak istedik.

 

3 Cevap

Murat Önder Boyluoğlu

29 Nisan 2020

Bilgilendirici bir içerik teşekkür ederim.

İsa İmadoğlu

08 Mayıs 2020

PostgreSQL'i kendi projelerimde de kullanmayı düşünüyordum, bu açıklayıcı makale sayesinde içim biraz daha ısındı. Yazı için teşekkür ederim.

kurth4cker

03 Haziran 2020

Makale çok güzel. Çok teşekkürler. Fakat bir sorum var:

Ben PostreSQL 'yi tam olarak nasıl kullanabilirim. Bilgisayarıma postresql ve postresql-11 paketlerini kurdum ama nasıl kullanabileceğimi bilmiyorum. Acaba kaynak önerebilir misiniz?

Yorum yapmak için Giriş Yapın ya da Üye olun.