PostgreSQL’de Döküman Depolama

Bu yazımda PostgreSQL’de Döküman Depolama konusundan bahsedeceğim. Kısa süre önce karşıma, JSON döküman depolamada MongoDB yerine PostgreSQL veritabanını nasıl kullanabiliriz sorusu çıktı. Kategorize ederken Postgresql veritabanını sürekli ilişkisel veritabanı olarak tanımladığımız için, unstructured yada semi-structured data’yı PostgreSQL’de tutamayız gibi bir izlenim var. Ancak durum böyle değil. Döküman depolama işlemi için PostgreSQL veritabanını, document based veritabanı olarak da kullanabiliyoruz.

PostgreSQL ve JSON-JSONB Datatypes

PostgreSQL, 9.2 versiyonu ile birlikte JSON data tipini desteklemeye başladı. Bu sürümle birlikte, PostgreSQL kullanıcıları JSON veri türlerini kullanarak JSON belgelerini depolama, sorgulama ve değiştirme yeteneğine kavuşmuştur. JSON desteği ile PostgreSQL veritabanında daha esnek ve çeşitli veri tipleriyle çalışma imkanı sağlanmıştır. Bu sayede PostgreSQL daha modern uygulamalar geliştirilmesine de imkan sağlamıştır.

JSON (Javascript Object Notation) : JSON veri depolama, organize etme ve taşımada yaygın olarak kullanılan bir formattır. Özellikle web uygulamalarında kullanılır. JSON datayı key-value şeklinde tutar. Örnek bir JSON dosyası aşağıdaki gibidir. Küme parantezlerinin içi yeni bir obje demektir. Ayrıca Value değeri, içinde birden çok değeri virgül ile ayırarak dizi formatında da depolanabilir.

{
“Name”: “Veysel”,
“Age”: 35,
“Emails”: [“veysel@vt.com.tr”, “veysely@vte.com.tr”]
}

Postgresql’de JSON ve JSONB olmak üzere iki farklı data tipi vardır. JSONB(JSON Binary) data tipi, JSON datasının daha etkili tutulmasını sağlar. Ayrıca JSON dökümanlarımız üzerindeki indexleme ihtiyaçları için de JSONB data tipini kullanabiliriz. JSON data tipinde ise, PostgreSQL veriyi plain text olarak depolar.

JSON datayı depolarken bir key için birden fazla Value değeri mevcutsa bile dökümanı olduğu gibi veritabanına yazar. Ancak JSONB bir key değeri için yalnızca bir Value değeri tutar. Birden fazla değer varsa bile, veritabanına o key’in en son Value değerini yazar. Ayrıca var ise white space karakterleri de depolamaz.

PostgreSQL’de JSON ve JSONB Kullanımı

Bir tablo oluştururken Table Create SQL cümlesi içinde diğer veri tipleri nasıl kullanılıyor ise JSON tiplerini de o şekilde kullanarak tablo oluştururuz.

Örnek : Postgresql Veritabanında CustomersA ve CustomersB tablolarını oluşturup, birer kayıt ekledim. Daha sonra aynı kayıtları white space koyarak ekledim ve sonuçlar aşağıdaki gibi.

PostgreSQL'de Döküman Depolama
PostgreSQL'de Döküman Depolama

Burda dikkat edeceğimiz nokta, insert işlemi sırasında PostgreSQL’in JSON datasını plain text olarak depoladığı için daha hızlı yazma işlemi yaptığıdır. JSONB formatında ise veri Binary formatta depolanır. Şimdi iki adet white space içeren kayıt ekleyip, select ederek dökümanların veritabanında nasıl tutulduğunu görelim.

PostgreSQL'de Döküman Depolama

Gördüğümüz gibi JSON tipine dökümanı nasıl verirsek öyle depoladı.

PostgreSQL'de Döküman Depolama

Ancak JSONB tipinde, white space’ler kaldırıldı. Dikkat edeceğimiz bir diğer nokta da Okuma işlemi sırasında JSONB data tipinin daha hızlı sonuç döndüreceğidir. Özellikle indexleme işlemleri kullanıldığı zaman bu performans daha da artar.

PostgreSQL’de JSON Operatörleri

PostgreSQL’de Döküman Depolama sırasında, JSON içinde yer alan field’lar üzerinde işlem yapabilmek için JSON operatörlerini kullanırız.

-> ile JSON döküman içindeki bir field’ın değerini sorgulayabiliriz.

->> ile JSON içindeki bir alanı “” işaretleri olmadan text formatında alabiliriz.

? ve ?| bir key ve dizinin döküman içinde var olup olmadığını kontrol edebiliriz.

PostgreSQL'de Operatörler

Sonuç olarak, PostgreSQL’de Döküman Depolama işlemi mongodb’de olduğu kadar basittir aslında. Performans benchmark sonuçları için epey araştırma yaptım ancak, sadece döküman depolama özelinde postgreSQL’de yük oluşturan herhangi bir case bulamadım. İlerleyen günlerde bu case’i deneyimleme şansım olursa burda paylaşacağım.

Postgresql veritabanı hakkında daha fazla yazıya burdan erişebilir veya Veritabanı Eğitimleri Youtube Kanalımı takip edebilirsiniz. İyi Çalışmalar

Veysel YUKSEL
Latest posts by Veysel YUKSEL (see all)

Veysel YUKSEL

RDBMS ve NoSQL veri tabanı yönetimi ve Big Data teknolojileri.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir