PostgreSQL - Kurulum ve Çalıştırma Sonraki Sayfa

Veritabanı nedir?

http://www.m-w.com adresindeki Merriam-Webster sözlüğünde bir veritabanı :

“a usually large collection of data organized especially for

rapid search and retrieval (as by a computer)”

olarak tanımlanır.

Bir veritabanı yönetim sistemi (DBMS: DataBase Management System) library, uygulamalar ve yardımcı programların birleşmesinden oluşur ve verilerin saklanması ve yönetilmesi ile ilgili konulardaki ayrıntılardan veritabanı yöneticilerini kurtarır. Aynı zamanda, kayıtların güncellenmesi ve kayıtlar üzerinde araştırma yapılması da mümkündür.

Veritabanı yönetim sistemleri zamanla çok daha fazla özellikler kazanmaktadırlar.

Relational Database Modeli

Veritabanı yönetim sistemleri teorisi 1970’de  “A Relational Model of Data for Large Shared Data Banks”, (E. F. Codd) yazısı ile büyük bir ilerleme kaydetmiştir. Bu devrim niteliğindeki yazıda, Codd relation mantığını tanıtmış ve tabloların gerçek dünyadaki nesneleri göstermekte, nitelemekte nasıl kullanılabileceğini belirtmiştir.

Relational veritabanlarını tanımlayan bazı önemli kurallar vardır:

Öncelikle, tablolardaki kayıtlar matematiksel açıdan tuple olarak tanımlanırlar. Bir tuple tanımlanmış bir veri tipi olan bileşenlerden oluşan sıralı grup olarak tanımlanır. Tüm tuplelar aynı sayıda ve tipte bileşenlerden oluşur. Örnek vermek gerekirse,

{“inetconf7”, “istanbul”, “2001”}

{“inetconf5”, “ankara”, “1999”}

Örneğimizdeki her bir tuple da 3 bileşen var: Kaçıncı inetconf olduğu (string), hangi ilde yapıldığı (string) ve yıl (numeric). Relational veritabanlarında bu “kümeye” ya da tabloya eklenen tüm kayıtlar aynı biçemde olmalıdırlar, dolayısıyla aşağıdakilere izin verilmez:

{“inetconf6”, “istanbul”}

– eksik bileşen

{“inetconf6”, “istanbul”, “2000”}

- fazla bileşen

{2000, “inetconf6”, “istanbul”}

– yanlış bileşen tipleri (yanlış sırada)

Ayrıca tuple lardan oluşan bir tabloda aynı veriler bulunmaz.(no duplicate record). Dolayısıyla relational veritabanlarındaki herhangi bir tabloda birbiriyle tamamen aynı iki kayıt (row or record) bulunamaz.

Bu, çok gereksiz bir sınırlama olarak görünebilir. Örnek vermek gerekirse, aynı kullanıcının aynı malı iki kez sipariş etmesi görünürde engellenmiştir. Bunu da tabloya bir bileşen  ekleyerek çözebilirsiniz.

Bir kayıttaki her bir bileşen “atomik”, yani bir veri olmalıdır; başka bir kayıt ya da diğer bileşenlerin listesi olamaz. Aynı zamanda, daha önce de belirttiğimiz gibi, tablodaki bileşenlerin veri tipleri de üsttekilerle ve dolayısıyla tablo tanımlarındakilerle aynı olmalıdır. Diğer bir deyişle, veritabanı tarafından desteklenen veri tiplerinden biri olmalıdır.

Birbiriyle eş kayıtları ayırmak için kullanılan bileşenlere key denir.

Tablodaki bir kaydı diğer tüm kayıtlardan ayırmak için kullandımız bileşene, primary key adı verilir. Primary key, o kaydı “unique” yapar. Tüm relational veritabanlarında her bir tablo ya da relationda mutlaka primary key olmalıdır.

Relational veritabanı yapısını belirleyen son bir kural da “referential integrity” dir Veritabanında uygulama geliştiren programcılar yazdıkları kodun veritabanının bütünlüğünü bozmamasına dikkat etmelidirler. Uygun bir örnek bir müşteri kaydının silinmesi olabilir. Eğer müşteri tablosundan bir kayıt silinecekse, o kişinin siparis tablosundaki siparişlerinin de silinmesi gerekir. Aksi takdirde olmayan bir müşteriye ait siparişler veritabanında bulunacaktır.

ACID Transactions

Veritabanı transactionları konusunda, ACID, Atomic, Consistent, Isolation ve Durable sözcüklerinin baş harflerinden oluşur. Bir transaction ya işlenir (commit : Tüm işlemleri yerine getirilir) ya da iptal edilir (abort : Hiç bir  işlem yapılmaz).

PostgreSQL nedir?

PostgreSQL, veritabanları için relational modeli kullanan ve SQL standart sorgu dilini destekleyen bir veritabanı yönetim sistemidir.

PostgreSQL aynı zamanda iyi performans veren, güvenli ve geniş özellikleri olan bir DBMS’tir. Hemen hemen tüm UNIX ya da Unix türevi (Linux,  FreeBSD gibi) işletim sistemlerinde çalışır. Ayrıca NT çekirdekli tüm Windows sistemlerde de çalıştırılabilir. Tabii ki ücretsiz ve açık kodludur.

PostgreSQL diğer ticari ya da açık kodlu veritabanlarında bulabileceğiniz özelliklerin hemen hemen hepsini (ya da daha fazlasını) kapsar.

PostgreSQL özellikleri (PostgreSQL FAQ’da listelendiği gibi):

                        Transactions

                        Subselects

                        Views

                        Foreign key referential integrity

                        Sophisticated Locking

                        User-defined types

                        Inheritance

                        Rules

                        Multi-version concurrency control

6.5 sürümünden sonraki tüm sürümlerde PostgreSQL oldukça stable olmuştur. Her bir sürüme bol miktarda regression testleri uygulanmıştır.

 

7.X sürümü ile birlikte SQL92 standartlarına uyum daha da artmıştır ve row büyüklüğü sınırı kaldırılmıştır.

PostgreSQL’in güvenilirliği kanıtlanmıştır. Her bir sürümü defalarca kontrollerden geçirilmiş ve her bir beta sürümü en az bir aylık testlere tabi tutulmuştur. Geniş kullanıcı grubu ve kaynak koduna dünyanın her yerinden erişilebilir olması nedeniyle  olası hatalar çok çabuk kapatılmaktadır.

PostgreSQL’ in performansı her yeni sürümle birlikte artmaktadır. Son benchmarklar , PostgreSQL’ in belirli koşullarda diğer ticari veritabanları ile aynı performansı verdiğini göstermektedir.

PostgreSQL’in kısa bir geçmişi

PostgreSQL’in geçmişi 1977’de Kaliforniya’ daki Berkeley Üniversitesinde (UCB) yapılan çalışmalara dayanır. UCB’de 1977-1985 yılları arasında Ingres adı verilen relational veritabanı geliştirildi. Ingres UCB açısından oldukça verimli idi; akademik ve araştırma yapılan kurumlarda UNIX çalıştırılan sistemlerde oldukça başarılı oldu. Ticari pazara hizmet vermek amacıyla Ingres kodu Relational Technologies/Ingres Corporation tarafından satın alındı ve ilk ticari relational veritabanlarından biri oldu.

Ingres CA-INGRES II adını aldı ve Computer Associates firmasının bir ürünü oldu. Orijinal UCB kodundan bugünkü modern yapıya herhangi bir kod kaldığını söylemek zordur.

Aynı süreçte, Berkeley’deki relational veritabanı sunucusu üzerindeki çalışmalar  1986 – 1994 arasında devam etti ve bu veritabanı Postgres adını aldı. Bu kod ise Illustra tarafından satın alındı ve Informix olarak geliştirilmeye başlandı.

1994’te SQL özellikleri Postgres’e eklendi ve bu veritabanı Postgres95 adını aldı.

1996 yılında Postgres tanınmaya başlandı ve kod geliştirmesi için e-posta listesi açılmasından sonra bir çok gönüllü Postgres’i geliştirmek için çalışmaya başladı. Bu aşamadan sonra Postgres son kez adını değiştirdi ve adındaki “95” ekinin yerine daha uygun olan SQL konmasına karar verildi. Bunun nedeni Postgres’in artık SQL standartlarını desteklemesiydi. Böylece PostgreSQL doğdu.

Bugün, bir takım halinde çalışan geliştiriciler PostgreSQL’i Perl, Apache ve PHP gibi açık kodlu yazılımlar gibi geliştirmektedirler. Kullanıcılar kaynak koda erişebilmekte ve açıkların kapanmasına, kodun geliştirilmesine ve yeni önerilerle PostgreSQL’in geliştirilmesine yardımcı olmaktadırlar. Resmi PostgreSQL sürümleri www.PostgreSQL.org web sayfasından yayınlanır.

www.GreatBridge.com adresinde ticari sürüm yakın zamana kadar bulunuyordu. Ancak site kapandı. Yakın zamanda benim de içinde bulunduğum PostgreSQL web takımı tarafından bu sitenin yerini alacak yeni site devreye sokulacaktır.

PostgreSQL Mimarisi

PostgreSQL’in gücü, onun mimarisinden gelir. Ticari veritabanı sistemleri ile ortak olarak PostgreSQL sunucu-istemci ortamında kullanılabilir. Bu hem kullanıcılar hem de geliştiriciler açısında oldukça fazla yarar sağlar.

PostgreSQL kurulumunun kalbi veritabanı sunucu işlemidir (process). Postmaster olarak adlandırılır .Tek bir sunucu üzerinde çalışabilir. (PostgreSQL enterprise sınıfındaki ticari veritabanı sistemlerindeki gibi yükü birçok sunucuya henüz dağıtamamaktadır.)

Veritabanındaki bilgilere erişebilecek programlar sunucu tarafında çalışır. İstemci tarafındaki programlar, sunucu ile aynı makinede olsalar bile veriye direk olarak erişemezler.

İşte bu istemci – sunucu ayrımı uygulamaların ayrı ayrı makinelerde çalışmasına izin verir. İstemcilerimizi sunucudan ayırmak için bir ağ kurabilir, ve istemci uygulamalarınızı geliştirmek için kullanıcılara uygun bir ortam kullanabilirsiniz. Örnek vermek gerekirse, veritabanınızı UNIX ortamında çalıştırabilir ve istemci programlarını Microsoft Windows’da kodlayabilirsiniz.

Aşağıda tipik olarak dağıtılmış bir PostgreSQL uygulamasının şemasını görebilirsiniz:

Burada bir ağ ortamında sunucuya bağlanan bir çok istemci görülebilir. PostgreSQL için bunun bir TCP – IP ağı – yerel ağ ya da internet - olması gerekmektedir.

Her bir istemci, bu istemciden gelen erişim isteklerine spesifik olarak servis yapmak için yeni bir sunucu işlemi yaratan bir  ana veritabanı sunucu işlemine  (burada postmaster olarak gösterilir) bağlanır.

İstemci programları PostgreSQL’e özel bir mesaj protokolu kullanarak bağlanırlar. Buna rağmen istemciye uygulamanın çalışması için standart bir arayüz  sağlayan yazılım kurmak mümkündür. Bu Open DataBase Connection (ODBC) standardıdır. Bu, Access ve Excel gibi Microsoft Office ürünlerini de içeren programların PostgreSQL’ i veritabanı olarak kullanmalarına olanak sağlar. Bunlarla ilgili ayrıntılı bilgiyi http://techdocs.postgresql.org ya da resmi tek yansısı http://techdocs.oper.metu.edu.tr adresinde bulabilirsiniz. Excel’ den PostgreSQL’e veri aktarımı konusunda ayrıntılı yardım dökümanı çok yakında http://seminer.devrim.oper.metu.edu.tr adresinde bulunabilir.

PostgreSQL’in istemci-sunucu mimarisi iş gücünün bölünmesine yardımcı olur. Büyük miktarda veriyi tutabilecek ve erişebilecek şekilde düzenlenmiş bir sunucu makinesi güvenli bir veri deposu olarak kullanılabilir. Gelişmiş grafiksel uygulamalar istemciler için geliştirilebilir. Alternatif olarak, web tabanlı uygulamalar da istemci tarafındaki işlemlerinizi görebilir.

PostgreSQL Veritabanı Sınırları

Bilgileri saklamak için tablolar yaratıp onlara veri ekleyerek veritabanı kullanıldığında, hiç bir platformda sınırsız veri saklama lüksümüz olmadığı ortadadır. Tüm veritabanı sistemleri bir şekilde sınırlandırılmıştır, PostgreSQL’ in burada bir ayrıcalığı yoktur. Tek bir kolonda saklanabilecek veri miktarı, tabloda izin verilen en fazla kolon sayısı ve tablonun toplam sayısı; bunların hepsinin bir sınırı vardır.

Son PostgreSQL sürümleri tüm sınırlarda esneklik getirmiş, hatta bir kısmında da sınırları kaldırmıştır. Burada PostgreSQL 7.1.3 de kalan sınırlamalardan bahsedilecektir. http://www.postgresql.org adresinden sonraki sürümler için son bilgileri alabilirsiniz. Buradaki bilgi PostgreSQL geliştiricileri tarafından derlenen e-posta arşivleri ve PostgreSQL FAQ sayfalarından derlenmiştir.

Bir büyüklük için “sınırsız” denmişse, bunun anlamı buna PostgreSQL’in bir sınırlama koymamasıdır. Maximum büyüklük, boş disk alanı ya da sanal bellekle sınırlıdır. Sınıra yaklaşıldığında veritabanının performansı düşer. Örneğin, eldeki sanal belleği tamamen kullanacak kadar büyük alanlarda işlem yapılacaksa, PostgreSQL’in başarımı fiziksel açıdan çok kötü olacaktır (ya da bir işlem olmayacaktır!).

 

Tom Lane : “How much do you trust on PostgreSQL? Well, it depends on your kernel and hard disk!”

Burada bahsedilmeyen diğer sınırlamalar işletim sistemi ya da ağın veri iletme hızına bağlıdır. Örneğin, ODBC ile yapılan sorguların sürücüye  bağlı olan sınırları vardır. Hafıza ile ilgili sınırlamalar da vardır (çok büyük bir sorgunun sonucu gibi)



Sonraki Sayfa