Veritabanı seçerken nelere dikkat etmeliyim? Veritabanı nedir? Desktop database -
Server database, esneklik,Güclü performans, Ölceklenebilirlik (Scalability), Özel
bilgi/egitim gereklidir, pahalılık, zor kullanım gibi bazı kriterler.
Database Secimi
Öncelikle konuya tamamen yeni olanlara yönelik olarak Database nedir sorusunun
cevabini verelim:
Database (türkcesi Veritabani ama bundan böyle Database kelimesini kullanacagim):
Database, icerigi kolaylikla erisilebilir, yönetilebilir ve güncellenebilir sekilde düzenlenen
bir data toplulugudur.En cok taninan Database tipi ise birkac farkli yoldan yeniden
düzenlenebilen ve erisilebilen data olan relational Databse yani Iliskisel Databasedir.
Burada karsimiza günümüzde cok kullanilan ve aslinda Database denilince aslinda
Relational Database kastedilen bir terim ortaya cikmaktadir :
Iliskisel bir Database, database tablolarini yeniden düzenlemeden birkac farkli yoldan
erisilebilen ya da yeniden derlenen datayi teskil eden düzenli-tanimli tablolardan olusan
bir data toplulugudur.Iliksisel Database 1970 yilinda E.F:Codd tarafindan gelistirilmistir.
Iliskisel Databasee olan standart kullanici ve uygulama programi arabirimi Structured
Query Language (Yapisal Sorgulama Dili, kisaca SQL).SQL ifadeleri hem interaktif
sorgular (query) icin hem de raporlar icin data elde etmek icin kullanilir.
Buraya kadar kafalarda olusan mantiksal ve fiziksel kavramlari örneklerle aciklamaya
calisalim :
Database tablolardan (table) olusur.Tablolar ise alanlardan (column) olusur.Temelde
string ve sayi olma üzere degisik alan tipleri vardir.Bir Databasede birden fazla tablo
olabildigi gibi bir tablonun da birden fazla alani olabilir.Bir sistemde ayni isimde bir
Database, o Databasede ayni isimde bir tablo ve o tabloda ayni isimde bir alan olabilir.
Bu kavramlar asagidaki sekil üzerinde daha anlasilir olacaktir :
Desktop Database Server DatabaseAslinda Databaseleri genel olarak iki kisma ayirabiliriz.Birincisi Desktop Database ve
ikincisi Server Database.Desktop Databaselere örnek :
Microsoft Access
FoxPro
FileMaker Pro
Paradox
Desktop Databaselerin avantajlari :
Desktop databaseler pahali degildirler
Desktop databaseler kullanici dostudur (user-freindly).
Desktop databaseler web cözümlerini destekler.
Bunlari söyledikten sonra, Server Database leri kim kullanir ki o zaman? sorusuna
Desktop Databaselerin dezavantajlarini siralayarak cevap verelim :
Desktop Databaseler genelde bir kullanici desteklerler.Düreticilerin
demeclerine ragmen genelde desktop databaseler ayni anda sadece bir kisinin databasei
degistirmesine izin verirler.Cok kullanicili bir ortamda desktop Databasei kullanmak cok
kötü sonuclar dogurabilir.Genel olarak söylenen eger Databasei birden fazla kisi
kullanacaksa Server Database kullanilmasi tercih edilmelidir.
Desktop Databaselerin güvenligi zayiftir. Cogu desktop Databasei basit bir sifre
mekanizmasina sahiptir.Eger güvenlik ve log tutma özelliklerini istiyorsaniz kesinlikle
Server Database kullanmalisiniz.
Desktop databases are not designed for the Internet. Eger basit olarak datanizi
internete acmak istiyorsaniz bir desktop Databasei yeterli gelebilir.Fakat, internet
kullanicilarinin datayi degistirebildigi ve yeni datanin girebildigi interaktif bir sistem
olusturmak istiyorsaniz server tabanli bir Database kullanmaniz gerekmektedir.
Server Databaseler ise gercekten daha büyük imkanlar sunmaktadir.Baslica dünyada en
cok kullanilan ve tanilan Server Databaseler sunlardir :
Oracle
Informix
MS-SQLServer
Sybase
DB2
MySQL
PostgresqlServer Databaselerin genel olarak avantajlari ya da sagladiklari yararlar sunlardir :
Esneklik. Desktop kuzenlerinin tam tersine, server tabali databaseler onlara
yüklediginiz her data yönetim probleminin üstesinden gelebilirler.Programcilar cok
severler cünkü Database merkezli özel uygulamalarin hizli gelisimini saglayan programcidostu uygulama programci arabirimleri (Application Programmer Interface, yani API)
vardir.Hatta Oracle, Informix, Sybase, DB2 gibi Databaseler farkli platformlari (Isletim
Sistemleri) destekjlemektedir.
Güclü performans. Server tabanli Databaseleristediginiz kadar güclü
olabilirler.Önemli Databaseler sizin kurabileceginiz cok uygun donanimlarda cok verimli
bir sekilde calisacaktir.Modern Databaseler birden fazla yüksek hizli islemcilerle, cluster
sunucularla, yüksek bandgenisligine sahip aglarla ve hata toleransli depolama
teknolojisiyle (fault tolerant storage technology )calisabilirler.
Ölceklenebilirlik (Scalability). Bu özellik öncekiyle cok yakindir.istenildigi sekilde
gerekli donanimlari artirarak gerekli kullanici sayisi veya disk alani genisletilebilir.
Tabi hersey bir anda tozpembe degil, Server Databaselerin de dezavantajlari vardir :
Özel bilgi/egitim gereklidir. Server tabanli Databaseler tabii ki oturdunuz yerden
ögrenilecek birsey degildir.Donanim ve yazilima yatirima baslamadan önce gerekli özel
egitimi almaniz tavsiye edilir.Bu egitim bu önemli yatirimda ihtiyaclari ortaya koyamada
faydali olacaktir ve gerekli altyapiyla etkili bir büyüme ve gerceklestirme stratejisi
saglayacaktir.
Pahalidir. Server tabanli Databasele saglanan yararlar tabii ki size maddi maliyeti
vardir.Öncelikle bircok Databasein bagli oldugu pahali yüksek performansli sistemleri
satin almak icin önemli bir doananim yatirimi yapmaniz gerekecektir.Daha sonra , basit
tek islemicili bir sistem icin 3000$ ile 15000$ arasinda lisans parasi ödemeye hazir
olmaniz gerekir.
Son kullanicilar icin zordur. Genel olarak , satin almadiginiz müddetce son
kullanicilariniz kullanici dostu arabirimlere sahip olmayacaktir ve kullanicilariniz SQL
ögrenmesi icin tabii ki sabir göstermeniz gerekir.Desktop Databaseler genelde server
tabanli Databaseler icin iyi birer arabirimdir.Örnek olarak , bircok organizasyon server
tabali Databaselere ulasmak icin bilinen kullanici dostu arabirim olan Microsoft Accessi
kullanmaktadir.
Simdi asil konumuza gelelim ve Database secerken gözönünde bulundurmamiz gereken
noktalara deginelim. Diyelim ki siz bir Uygulama gelistireceksiniz , bu bir web
uygulamasi, ögrenci isleri programi, taksitli satis programi ya da su faturasi tahsilat
programi olabilir.Herseyden önce ihtiyaclarinizi ortaya koymaniz gerekir.Bu aslinda en zor
olan kisimdir.Cünkü teorik olarak ihtiyaclarinizi belirledikten sonra bir de pratikte ortaya
cikan ihtiyaclar bazen sizi zor durumda birakabilir.Bunun icin en kötü durumda faktörü
ve datanin ve sistemin (kullanici acisindan) büyüme faktörü gözönünde buludurulmalidir.
Konuyu daha fazla uzatmadan bir Databasee karar verebilmek icin gerekli olan sorular
genel olarak sunlardir :
Hangi platformlari (isletim Sistemlerini) destekliyor?
Destekledigi arabirimler neler (odbc, jdbc, DBD, native)?
Database ne derecede güvenli? Backup/Restore (Yedekleme/Yedek Dönme) imkani sunuyor mu?
Lisans Stratejisi nedir?
Warm Backup özelligi var mi?
Transaction Destegi var mi?
Trigger destegi var mi?
Support (Destek)u var mi ve ne kadar güvenilebilir?
Administration (Yönetim ve bakimi) kolay mi?
Mirroring destegi var mi?
Replication özelligi var mi?
Parallel Server (Clustering) özelligi var mi?
Lojiksel olarak limitleri nelerdir?
Bu sorulari cogaltmak tabii ki mümkün.
Bu sorularin detaylarina girmek sanirim yazinin genel amacina uygun olacaktir.
Hangi platformlari (isletim Sistemlerini) destekliyor?
Aslinda öncelikle Databaseimizi hangi Isletim Sistemi üzerinde calistirmak istedigimiz
önemli.Diyelim ki Database Serverin Linux üzerinde calismasini istiyorsak ve bu tek
secenegimiz ise, otomatik olarak MS-SQL Serveri elemis oluyoruz cünkü MS-Sqlserver
sadece Windows platformunu desteklemektedir.Ayrica bazi Databaselerin belirli Isletim
Sistemlerini desteklemedigini göz önünde bulundurmak gerekir.En cok kullanilan Isletim
Sistemleri : HP-UX, AIX, Linux, Solaris, Windows NT, Windows 2000, Windows XP, Digital
UNIX, Open BSD, FreeBSD vs.
Destekledigi arabirimler neler (odbc, jdbc, DBD, native)?
Uygulamamizla dogrudan alakali olan bir nokta, cünkü kullandigimiz programlama dilinin
destekledigi baglanti türlerini Databaseimizin de desteklemesi gerekir.Örnegin bir
Databasein ODBC sürücüsü yoksa o Databasele Herhangi bir Visual Basic-ODBC tabanli
bir program yazamayiz.
Örnegin perl ile bir program yazacaksak mutlaka o Databasein DBD sürücülerinin üretici
tarafindan saglanmasi gerekmektedir.Ayni sekilde java uygulamalari icin de bu durum
gecerlidir.
Databasein güvenlik stratejileri?
Düsünün ki bir bankacilik uygulamasi gelistiriyorsunuz , bu durumda Databasede
tutulacak bilgilerin güvenligi ve gizliligi sizin icin cok önemlidir.Fakat bir web
uygulamasinda cok da önemli olmayabilir.Burada dikkat etmemiz gereken diger bir özellik ise Databasein kendi icinde saglamis
oldugu güvenlik stratejisidir.Mesela tablo bazinda belirli kisilere yetkilendirme yapilabiliyor
mu?
Buna informixten bir örnek verecek olursak :
grant select,update on table fatura to mehmet; mehmet kullanicisina fatura tablosu
üzerinde select (okuma) ve update (kayit degistirme) yetkisi vermektedir.
Mesela Oracleda yeni cikan bir özellik ise column (alan) bazinda belirli kullanicilara
yetkiler verilebiliyor.
Backup/Restore (Yedekleme/Yedek Dönme) imkani sunuyor mu?
Cok önemli uygulamalarda yedek alma islemi cok önemlidir ve de online yani Database
aktifken yapilabiliyor olmasi gerekir.Düsünün bir fabrikada 7/24 saat üretim yapiliyor ve
databasein her an Online olmasi gerekiyor.Bu durumda sececeginiz Databasein online
backup alma özelligi mutlaka olmasi gerekir (warm backup).Diyelim ki Database online
iken backup ya da dump özelligi var, peki alinan yedegin data tutarliligi bu durumda var
mi?
Düsünün ki yedek basladiginda bir memur fatura tahsilati yapiyor ve islemin
yarisindayken (yani bilgilerin bir kismi Databasee kaydedilmis durumda) yedek
bitiyor.Herhangi bir crash (Sistemin ya da Databasein hata verip datalarin bozulmasi)
durumunda o yedegi restore (yedegi dönme) ettik, bu durumda datalar tutarsiz olacaktir.
Diger önemli bir nokta ise aldiginiz backuptan sadece bir tablo restore edilebiliyor mu?Bu
durum da cok karsilasilan bir durumdur, mesela birisi sql le calisirken yanlislikla bir
tablonun tamamini ya da belli bir kismini sildiginde tek care yedekten geri dönmektir.
Lisans Stratejisi nedir?
Öncelikle open source olan Databaselerin ücretsiz oldugu herkes tarafindan
bilinmektedir.Diger ücretli olan (commercial) Databaselerde ise herbirinin degisik lisans
stratejileri vardir.Örnegin concurrent (ayni andaki kullanici sayisi) lisansi ya da named
(yani toplam kullanici sayisi) lisanslar mevcuttur.Bir de cpu sayisina bagli olanlar da var.
Ortalama olarak her 6 ayda bir yeni sürüm ciktigini kabul edersek, versiyon
güncellemelerinin ücretli olup olmadigi ve de güncellemenin ne kadar sürdügü de büyük
önem kazanmaktadir.
Transaction Destegi var mi?
Transaction, Database anlaminda begin ile commit arasinda yapilan islemin tamamina
transaction denir.Transaction destegi temel olarak verilerin bütünlügü ve tutarliligi icin
önemlidir.
Diyelim ki bir internet kullanicisi bir alisveris sitesinde ürünleri gezmektedir ve belirli
ürünleri sepete eklemekte ya da sepetten cikarmaktadir.Zamanla bu bilgilerin bir kismi
tablolara yazilmis olabilir.Diyelim ki kullanici alisverisi sonlandirmak icin devam etti ve
kredi karti bilgilerini girdigi yerde alisveristen vazgecti ve baglantisini kopardi, iste budurumda o ana kadar yaptigi bütün data hareketlerinin geri döndürülmesi (rollback)
gerekir, bu da transaction destegi ile mümkündür.
Diger bir örnek de mesela Databaseimiz aktifken birden elektrikler kesildi ve Serveri
yeniden baslattik ve Databasei start ettik.Kesinti aninda yarim kalan bütün islemler o
sekilde birakilmaz tabii ki, yarim kalan (Database dilinde commit olmamis ) bütün
transactionlar rollback edilir.Bu sekilde Database tutarli bir duruma geri döndürülmüs
olur.
Transactionin cok önemli olmasi sebebiyle artik cogu Databasein bu destegi vardir.Ancak
cok kritik uygulamalarinizda bu konunun daha detayina inerek Databasei incelemekte
fayda var.
Trigger destegi var mi?
Trigger, bir Databasede belirli bir tablodaki bir satir degismesi gibi belirli bir islem
gerceklestiginde otomatik olarak bir islemi baslatan bir dizi SQl ifadesidir.Bir trigger bir
olaydan (insert, delete ya da update ifadelerin belirtilen tabloda olusmasi) ve bir
hareketten (ilgili prosedür) olusur.Triggerlar degisen ya da eklenilen bir datanin tutarliligi
icin kullanilir.Mesela basit olarak sirket tablosuna yeni bir kayit eklendiginde (insert) git
log tablosuna sirket nosunu ve o anki tarih ve zamani kaydet (insert).
Support (Destek)u var mi ve maliyeti nedir?
Gelistirdiginiz uygulamalariniz ne kadar kaliteli olursa olsun, kullandiginiz Databasein
destegi yoksa ya da cok zayifsa bu pek iyi bir durum degildir.Örnegin uygulamanizin cok
spesifik bir ayrintisinda eger Databasede bir bug ortaya ciktiysa ve siz yeni bir versiyon
ya da gecici bir cözüm bulamiyorsaniz sistem kullanilamaz haldedir ve proje
basarisizdir!!
Oracledan bir örnek vereyim , 1 yillik destek anlasmasi lisans ücretinin %20 sidir ve
genelde Databaseinizin down oldugu durumlarda birkac saat icinde bir cozüm
sunarlar.Informixte de bu durum asagi yukari aynidir.
Postgresql ve MYSQLde ise commercial support veren kurumlar disinda newsgrouplara
baglisiniz ve cogunlukla soru ya da sorunlariniza cok hizli cevaplar alabilirsiniz, fakat
hicbir zaman size garanti yoktur.Sanssiz bir sekilde bir bug ortaya cikmis ise bir sonraki
versiyonu beklemeniz gerekir ya da o bugin olmadigi bir diger versiyona gecmeniz
gerekir ki bu da zaman ve ugrasi demektir.
Administration (Yönetim ve bakimi) kolay mi?
Aslinda en iyi Database bir anlamda isteklerinize %100 cevap veren ama ayni zamanda
administration yani yönetimi ya da bakimi olan Databasedir.
Diger önemli bir nokta ise yönetimi ve bakimi icin gerekli altyapi ve egitim ve bütün
bunlarin maliyetidir.Örnegin Oraclein yönetimi belki de en zor olanidir , bu sebepten
dolayi da egitimleri cok pahali ve de fazladir.
Informixin administationu ise daha kolaydir fakat görsel yönetim programlari o kadar iyi
degildir.Postgresql ve MySqlin ise dökümanlari bol olmasina ragmen egitimleri cok fazla
yaygin degildir.Görsel yönetim programlari da her ikisi icin de mevcuttur.Örnegin MySQL
icin MySQL Control Center ve Postgresql icin pgadmin, tora gibi.Mirroring destegi var mi?
Mirroring aynalama demektir ve güvenlik stratejisinin bir parcasi olabilir.Databasein
mirror destegi olmasi bir avantajdir ve datalarinizin Disk üzerinde 2 kez kaydedilmesi
demektir ve birisinin bozulmasi halinde diger kopyasindan online devam
edebilmektedir.Güvenligin yani sira performans acisindan da faydalidir, cünkü bir read
(okuma) isleminde paralel yani her iki kopaydan ayni anda okuyabilmektedir , bu da hiz
demektir.
Bildigim kadariyla Postgresql ve MySQLde mirroring özelligi kendi bünyesinde yoktur..
Replication özelligi var mi?
Replication , Database server bazinda kopyalama demektir.Örnegin 1000 tane subesi
olan bir banka düsünün ve her subede 50 kullanici olsa toplam 50000 kullanici demektir
ve ayni saatler icerisinde sadece bir Servera erismeleri biraz garip olurdu sanirim (böyle
bir durumu düsünemiyorum bilen varsa lütfen mail atsin).Bunun icin en azindan birden
fazla Database farkli yerlerde fakat merkezi bir Databasede olusan bir degisim diger
bütün databaselere zamanla iletilir.
Bir hesaba bütün diger subelerden erisilebildigine göre Databasedeki kayitlarin bir kere
ayni olmasi gerekmektedir.Bu durumda farkli sehirlerde replike edilen birden fazla server
dusunursek ve her birinin üzerinde bir Database calisirsa ve bütün bunlar replike edilirse
yükler dagilmis ve performans artmis olur.Özet olarak bir Databasein replike edilmesi
demek o Databasedeki degisiklikler birebir diger Databaselere aktarilmasi demektir.
Replicationun sagladigi bir avantaj da bir Databasein ariza görmesi halinde (down) diger
Databasein durumu idare edebilmesidir.
Parallel Server (Clustering) özelligi var mi?
Bu özellik daha cok büyük Databaseler icin gecerlidir.Bir Server düsünün o anki
teknolojiyle donanim olarak maximum seviyede donatilmis fakat toplam kullanici sayisini
kaldiramiyor, ya da basit olarak bir Databasei 2 server üzerinde calistirmak istiyorum ya
da bir Databasede bir ariza olustugunda otomatik olarak diger Database durumu idare
etsin istiyorsam Databasein Parallel Server özelligi olmasi gerekir.
Oracle, Informix , DB2 ve MS-Sqlserver in parallel özellikleri var fakat normal Database
lisansindan ayri bir fiyatla satilmaktadir.Postgresql ve MySql in ise böyle bir özelligi
yoktur.
Lojiksel olarak limitleri nelerdir?
Her Databasein kendi mimarisi vardir ve buna bagli olarak da bazen teorik de olsa
limitleri vardir.Bir tablodaki column (alan) sayisi, bir tablonun maximum alacagi satir
sayisi, bir Databasein maximum kullanabildigi alan, bir alanin maximum büyüklügü gibi
faktörler büyük Database (>100Gb)ler icin önemlidir.
Simdi birkac Databasein limitlerini vermeye calisalim:
PostgreSQLAsagidaki bilgiler aynen http://www.ca.postgresql.org/users-lounge/limitations.html
adresinden alinmistir.
Bir Databasein maximum büyüklügü sinirsiz(60GB databaseler mevcut)
Bir tablonun maximum büyüklügü 64 TB bütün Isletim Sistemlerinde
Bir satirin maximum büyüklügü sinirsiz 7.1 ve sonrasi versiyonlarda
Bir alan icin maximum büyüklük 1GB 7.1 ve sonrasi versiyonlarda
Bir tablodaki maximum satir sayisi sinirsiz
Bir tablodaki maximum alan sayisi 1600
Bir tablodaki maximum index sayisi sinirsiz
Tabii ki bunlar sinirsiz degildirler, fakat eldeki disk alanina ve hafiza/swap alanina
bagimlidir.Bu degerler normalin disinda büyük olursa performans sorunu yasanabilir.
Oracle
Bir tablodaki maxiumum index sayisi sinirsiz
Maximum icice altsorgu (nested queries) sayisi 255
Maximum Database useri 65525
Bir tablodaki maximum alan sayisi 1000
Bir tablodaki maximum satir sayisi sinirsiz
Maximum Tablespace sayisi 64K
Maximum block sayisi 16Kb
Kaynak : http://download-uk.oracle.com/docs/html/A97297_01/ch1_admin.htm#i92495
Informix
Maximum Database büyüklügü 2 Terabyte
Maximum alan sayisi 32000
Maximum tablo sayisi 2^31-1
MySQL
http://www.mysql.com/doc/en/Features.html :Büyük Databaseler olusturmak mümkündür.50 milyon kayit iceren bazi Databaseler
kullaniyoruz ve 60000 tablo ve yaklasik 5 milyar satir sayisi olan kullanicilar biliyoruz.Bir
tabloda maxiumum 32 index kullanilabilir.Her bir index 1 ile 16 arasinda alandan
olusabilir.Maximum index genisligi ise 500 bytedir(bu MySQL Serveri derlemekle
degistirilebilir).Bir indexi CHAR ya da VARCHAR olarak kullanabilirsiniz.
Maxiumum tablo büyüklügü 4Gb (3.22) 3.23 versiyonuyla birlikte myIsam tablo tipinde 8
milyon Tb yani 2^63 büyüklügünde bir tablo mümkündür.
Maximum alan büyüklügü 4Gb (long text ya da long blob)
Server database, esneklik,Güclü performans, Ölceklenebilirlik (Scalability), Özel
bilgi/egitim gereklidir, pahalılık, zor kullanım gibi bazı kriterler.
Database Secimi
Öncelikle konuya tamamen yeni olanlara yönelik olarak Database nedir sorusunun
cevabini verelim:
Database (türkcesi Veritabani ama bundan böyle Database kelimesini kullanacagim):
Database, icerigi kolaylikla erisilebilir, yönetilebilir ve güncellenebilir sekilde düzenlenen
bir data toplulugudur.En cok taninan Database tipi ise birkac farkli yoldan yeniden
düzenlenebilen ve erisilebilen data olan relational Databse yani Iliskisel Databasedir.
Burada karsimiza günümüzde cok kullanilan ve aslinda Database denilince aslinda
Relational Database kastedilen bir terim ortaya cikmaktadir :
Iliskisel bir Database, database tablolarini yeniden düzenlemeden birkac farkli yoldan
erisilebilen ya da yeniden derlenen datayi teskil eden düzenli-tanimli tablolardan olusan
bir data toplulugudur.Iliksisel Database 1970 yilinda E.F:Codd tarafindan gelistirilmistir.
Iliskisel Databasee olan standart kullanici ve uygulama programi arabirimi Structured
Query Language (Yapisal Sorgulama Dili, kisaca SQL).SQL ifadeleri hem interaktif
sorgular (query) icin hem de raporlar icin data elde etmek icin kullanilir.
Buraya kadar kafalarda olusan mantiksal ve fiziksel kavramlari örneklerle aciklamaya
calisalim :
Database tablolardan (table) olusur.Tablolar ise alanlardan (column) olusur.Temelde
string ve sayi olma üzere degisik alan tipleri vardir.Bir Databasede birden fazla tablo
olabildigi gibi bir tablonun da birden fazla alani olabilir.Bir sistemde ayni isimde bir
Database, o Databasede ayni isimde bir tablo ve o tabloda ayni isimde bir alan olabilir.
Bu kavramlar asagidaki sekil üzerinde daha anlasilir olacaktir :
Desktop Database Server DatabaseAslinda Databaseleri genel olarak iki kisma ayirabiliriz.Birincisi Desktop Database ve
ikincisi Server Database.Desktop Databaselere örnek :
Microsoft Access
FoxPro
FileMaker Pro
Paradox
Desktop Databaselerin avantajlari :
Desktop databaseler pahali degildirler
Desktop databaseler kullanici dostudur (user-freindly).
Desktop databaseler web cözümlerini destekler.
Bunlari söyledikten sonra, Server Database leri kim kullanir ki o zaman? sorusuna
Desktop Databaselerin dezavantajlarini siralayarak cevap verelim :
Desktop Databaseler genelde bir kullanici desteklerler.Düreticilerin
demeclerine ragmen genelde desktop databaseler ayni anda sadece bir kisinin databasei
degistirmesine izin verirler.Cok kullanicili bir ortamda desktop Databasei kullanmak cok
kötü sonuclar dogurabilir.Genel olarak söylenen eger Databasei birden fazla kisi
kullanacaksa Server Database kullanilmasi tercih edilmelidir.
Desktop Databaselerin güvenligi zayiftir. Cogu desktop Databasei basit bir sifre
mekanizmasina sahiptir.Eger güvenlik ve log tutma özelliklerini istiyorsaniz kesinlikle
Server Database kullanmalisiniz.
Desktop databases are not designed for the Internet. Eger basit olarak datanizi
internete acmak istiyorsaniz bir desktop Databasei yeterli gelebilir.Fakat, internet
kullanicilarinin datayi degistirebildigi ve yeni datanin girebildigi interaktif bir sistem
olusturmak istiyorsaniz server tabanli bir Database kullanmaniz gerekmektedir.
Server Databaseler ise gercekten daha büyük imkanlar sunmaktadir.Baslica dünyada en
cok kullanilan ve tanilan Server Databaseler sunlardir :
Oracle
Informix
MS-SQLServer
Sybase
DB2
MySQL
PostgresqlServer Databaselerin genel olarak avantajlari ya da sagladiklari yararlar sunlardir :
Esneklik. Desktop kuzenlerinin tam tersine, server tabali databaseler onlara
yüklediginiz her data yönetim probleminin üstesinden gelebilirler.Programcilar cok
severler cünkü Database merkezli özel uygulamalarin hizli gelisimini saglayan programcidostu uygulama programci arabirimleri (Application Programmer Interface, yani API)
vardir.Hatta Oracle, Informix, Sybase, DB2 gibi Databaseler farkli platformlari (Isletim
Sistemleri) destekjlemektedir.
Güclü performans. Server tabanli Databaseleristediginiz kadar güclü
olabilirler.Önemli Databaseler sizin kurabileceginiz cok uygun donanimlarda cok verimli
bir sekilde calisacaktir.Modern Databaseler birden fazla yüksek hizli islemcilerle, cluster
sunucularla, yüksek bandgenisligine sahip aglarla ve hata toleransli depolama
teknolojisiyle (fault tolerant storage technology )calisabilirler.
Ölceklenebilirlik (Scalability). Bu özellik öncekiyle cok yakindir.istenildigi sekilde
gerekli donanimlari artirarak gerekli kullanici sayisi veya disk alani genisletilebilir.
Tabi hersey bir anda tozpembe degil, Server Databaselerin de dezavantajlari vardir :
Özel bilgi/egitim gereklidir. Server tabanli Databaseler tabii ki oturdunuz yerden
ögrenilecek birsey degildir.Donanim ve yazilima yatirima baslamadan önce gerekli özel
egitimi almaniz tavsiye edilir.Bu egitim bu önemli yatirimda ihtiyaclari ortaya koyamada
faydali olacaktir ve gerekli altyapiyla etkili bir büyüme ve gerceklestirme stratejisi
saglayacaktir.
Pahalidir. Server tabanli Databasele saglanan yararlar tabii ki size maddi maliyeti
vardir.Öncelikle bircok Databasein bagli oldugu pahali yüksek performansli sistemleri
satin almak icin önemli bir doananim yatirimi yapmaniz gerekecektir.Daha sonra , basit
tek islemicili bir sistem icin 3000$ ile 15000$ arasinda lisans parasi ödemeye hazir
olmaniz gerekir.
Son kullanicilar icin zordur. Genel olarak , satin almadiginiz müddetce son
kullanicilariniz kullanici dostu arabirimlere sahip olmayacaktir ve kullanicilariniz SQL
ögrenmesi icin tabii ki sabir göstermeniz gerekir.Desktop Databaseler genelde server
tabanli Databaseler icin iyi birer arabirimdir.Örnek olarak , bircok organizasyon server
tabali Databaselere ulasmak icin bilinen kullanici dostu arabirim olan Microsoft Accessi
kullanmaktadir.
Simdi asil konumuza gelelim ve Database secerken gözönünde bulundurmamiz gereken
noktalara deginelim. Diyelim ki siz bir Uygulama gelistireceksiniz , bu bir web
uygulamasi, ögrenci isleri programi, taksitli satis programi ya da su faturasi tahsilat
programi olabilir.Herseyden önce ihtiyaclarinizi ortaya koymaniz gerekir.Bu aslinda en zor
olan kisimdir.Cünkü teorik olarak ihtiyaclarinizi belirledikten sonra bir de pratikte ortaya
cikan ihtiyaclar bazen sizi zor durumda birakabilir.Bunun icin en kötü durumda faktörü
ve datanin ve sistemin (kullanici acisindan) büyüme faktörü gözönünde buludurulmalidir.
Konuyu daha fazla uzatmadan bir Databasee karar verebilmek icin gerekli olan sorular
genel olarak sunlardir :
Hangi platformlari (isletim Sistemlerini) destekliyor?
Destekledigi arabirimler neler (odbc, jdbc, DBD, native)?
Database ne derecede güvenli? Backup/Restore (Yedekleme/Yedek Dönme) imkani sunuyor mu?
Lisans Stratejisi nedir?
Warm Backup özelligi var mi?
Transaction Destegi var mi?
Trigger destegi var mi?
Support (Destek)u var mi ve ne kadar güvenilebilir?
Administration (Yönetim ve bakimi) kolay mi?
Mirroring destegi var mi?
Replication özelligi var mi?
Parallel Server (Clustering) özelligi var mi?
Lojiksel olarak limitleri nelerdir?
Bu sorulari cogaltmak tabii ki mümkün.
Bu sorularin detaylarina girmek sanirim yazinin genel amacina uygun olacaktir.
Hangi platformlari (isletim Sistemlerini) destekliyor?
Aslinda öncelikle Databaseimizi hangi Isletim Sistemi üzerinde calistirmak istedigimiz
önemli.Diyelim ki Database Serverin Linux üzerinde calismasini istiyorsak ve bu tek
secenegimiz ise, otomatik olarak MS-SQL Serveri elemis oluyoruz cünkü MS-Sqlserver
sadece Windows platformunu desteklemektedir.Ayrica bazi Databaselerin belirli Isletim
Sistemlerini desteklemedigini göz önünde bulundurmak gerekir.En cok kullanilan Isletim
Sistemleri : HP-UX, AIX, Linux, Solaris, Windows NT, Windows 2000, Windows XP, Digital
UNIX, Open BSD, FreeBSD vs.
Destekledigi arabirimler neler (odbc, jdbc, DBD, native)?
Uygulamamizla dogrudan alakali olan bir nokta, cünkü kullandigimiz programlama dilinin
destekledigi baglanti türlerini Databaseimizin de desteklemesi gerekir.Örnegin bir
Databasein ODBC sürücüsü yoksa o Databasele Herhangi bir Visual Basic-ODBC tabanli
bir program yazamayiz.
Örnegin perl ile bir program yazacaksak mutlaka o Databasein DBD sürücülerinin üretici
tarafindan saglanmasi gerekmektedir.Ayni sekilde java uygulamalari icin de bu durum
gecerlidir.
Databasein güvenlik stratejileri?
Düsünün ki bir bankacilik uygulamasi gelistiriyorsunuz , bu durumda Databasede
tutulacak bilgilerin güvenligi ve gizliligi sizin icin cok önemlidir.Fakat bir web
uygulamasinda cok da önemli olmayabilir.Burada dikkat etmemiz gereken diger bir özellik ise Databasein kendi icinde saglamis
oldugu güvenlik stratejisidir.Mesela tablo bazinda belirli kisilere yetkilendirme yapilabiliyor
mu?
Buna informixten bir örnek verecek olursak :
grant select,update on table fatura to mehmet; mehmet kullanicisina fatura tablosu
üzerinde select (okuma) ve update (kayit degistirme) yetkisi vermektedir.
Mesela Oracleda yeni cikan bir özellik ise column (alan) bazinda belirli kullanicilara
yetkiler verilebiliyor.
Backup/Restore (Yedekleme/Yedek Dönme) imkani sunuyor mu?
Cok önemli uygulamalarda yedek alma islemi cok önemlidir ve de online yani Database
aktifken yapilabiliyor olmasi gerekir.Düsünün bir fabrikada 7/24 saat üretim yapiliyor ve
databasein her an Online olmasi gerekiyor.Bu durumda sececeginiz Databasein online
backup alma özelligi mutlaka olmasi gerekir (warm backup).Diyelim ki Database online
iken backup ya da dump özelligi var, peki alinan yedegin data tutarliligi bu durumda var
mi?
Düsünün ki yedek basladiginda bir memur fatura tahsilati yapiyor ve islemin
yarisindayken (yani bilgilerin bir kismi Databasee kaydedilmis durumda) yedek
bitiyor.Herhangi bir crash (Sistemin ya da Databasein hata verip datalarin bozulmasi)
durumunda o yedegi restore (yedegi dönme) ettik, bu durumda datalar tutarsiz olacaktir.
Diger önemli bir nokta ise aldiginiz backuptan sadece bir tablo restore edilebiliyor mu?Bu
durum da cok karsilasilan bir durumdur, mesela birisi sql le calisirken yanlislikla bir
tablonun tamamini ya da belli bir kismini sildiginde tek care yedekten geri dönmektir.
Lisans Stratejisi nedir?
Öncelikle open source olan Databaselerin ücretsiz oldugu herkes tarafindan
bilinmektedir.Diger ücretli olan (commercial) Databaselerde ise herbirinin degisik lisans
stratejileri vardir.Örnegin concurrent (ayni andaki kullanici sayisi) lisansi ya da named
(yani toplam kullanici sayisi) lisanslar mevcuttur.Bir de cpu sayisina bagli olanlar da var.
Ortalama olarak her 6 ayda bir yeni sürüm ciktigini kabul edersek, versiyon
güncellemelerinin ücretli olup olmadigi ve de güncellemenin ne kadar sürdügü de büyük
önem kazanmaktadir.
Transaction Destegi var mi?
Transaction, Database anlaminda begin ile commit arasinda yapilan islemin tamamina
transaction denir.Transaction destegi temel olarak verilerin bütünlügü ve tutarliligi icin
önemlidir.
Diyelim ki bir internet kullanicisi bir alisveris sitesinde ürünleri gezmektedir ve belirli
ürünleri sepete eklemekte ya da sepetten cikarmaktadir.Zamanla bu bilgilerin bir kismi
tablolara yazilmis olabilir.Diyelim ki kullanici alisverisi sonlandirmak icin devam etti ve
kredi karti bilgilerini girdigi yerde alisveristen vazgecti ve baglantisini kopardi, iste budurumda o ana kadar yaptigi bütün data hareketlerinin geri döndürülmesi (rollback)
gerekir, bu da transaction destegi ile mümkündür.
Diger bir örnek de mesela Databaseimiz aktifken birden elektrikler kesildi ve Serveri
yeniden baslattik ve Databasei start ettik.Kesinti aninda yarim kalan bütün islemler o
sekilde birakilmaz tabii ki, yarim kalan (Database dilinde commit olmamis ) bütün
transactionlar rollback edilir.Bu sekilde Database tutarli bir duruma geri döndürülmüs
olur.
Transactionin cok önemli olmasi sebebiyle artik cogu Databasein bu destegi vardir.Ancak
cok kritik uygulamalarinizda bu konunun daha detayina inerek Databasei incelemekte
fayda var.
Trigger destegi var mi?
Trigger, bir Databasede belirli bir tablodaki bir satir degismesi gibi belirli bir islem
gerceklestiginde otomatik olarak bir islemi baslatan bir dizi SQl ifadesidir.Bir trigger bir
olaydan (insert, delete ya da update ifadelerin belirtilen tabloda olusmasi) ve bir
hareketten (ilgili prosedür) olusur.Triggerlar degisen ya da eklenilen bir datanin tutarliligi
icin kullanilir.Mesela basit olarak sirket tablosuna yeni bir kayit eklendiginde (insert) git
log tablosuna sirket nosunu ve o anki tarih ve zamani kaydet (insert).
Support (Destek)u var mi ve maliyeti nedir?
Gelistirdiginiz uygulamalariniz ne kadar kaliteli olursa olsun, kullandiginiz Databasein
destegi yoksa ya da cok zayifsa bu pek iyi bir durum degildir.Örnegin uygulamanizin cok
spesifik bir ayrintisinda eger Databasede bir bug ortaya ciktiysa ve siz yeni bir versiyon
ya da gecici bir cözüm bulamiyorsaniz sistem kullanilamaz haldedir ve proje
basarisizdir!!
Oracledan bir örnek vereyim , 1 yillik destek anlasmasi lisans ücretinin %20 sidir ve
genelde Databaseinizin down oldugu durumlarda birkac saat icinde bir cozüm
sunarlar.Informixte de bu durum asagi yukari aynidir.
Postgresql ve MYSQLde ise commercial support veren kurumlar disinda newsgrouplara
baglisiniz ve cogunlukla soru ya da sorunlariniza cok hizli cevaplar alabilirsiniz, fakat
hicbir zaman size garanti yoktur.Sanssiz bir sekilde bir bug ortaya cikmis ise bir sonraki
versiyonu beklemeniz gerekir ya da o bugin olmadigi bir diger versiyona gecmeniz
gerekir ki bu da zaman ve ugrasi demektir.
Administration (Yönetim ve bakimi) kolay mi?
Aslinda en iyi Database bir anlamda isteklerinize %100 cevap veren ama ayni zamanda
administration yani yönetimi ya da bakimi olan Databasedir.
Diger önemli bir nokta ise yönetimi ve bakimi icin gerekli altyapi ve egitim ve bütün
bunlarin maliyetidir.Örnegin Oraclein yönetimi belki de en zor olanidir , bu sebepten
dolayi da egitimleri cok pahali ve de fazladir.
Informixin administationu ise daha kolaydir fakat görsel yönetim programlari o kadar iyi
degildir.Postgresql ve MySqlin ise dökümanlari bol olmasina ragmen egitimleri cok fazla
yaygin degildir.Görsel yönetim programlari da her ikisi icin de mevcuttur.Örnegin MySQL
icin MySQL Control Center ve Postgresql icin pgadmin, tora gibi.Mirroring destegi var mi?
Mirroring aynalama demektir ve güvenlik stratejisinin bir parcasi olabilir.Databasein
mirror destegi olmasi bir avantajdir ve datalarinizin Disk üzerinde 2 kez kaydedilmesi
demektir ve birisinin bozulmasi halinde diger kopyasindan online devam
edebilmektedir.Güvenligin yani sira performans acisindan da faydalidir, cünkü bir read
(okuma) isleminde paralel yani her iki kopaydan ayni anda okuyabilmektedir , bu da hiz
demektir.
Bildigim kadariyla Postgresql ve MySQLde mirroring özelligi kendi bünyesinde yoktur..
Replication özelligi var mi?
Replication , Database server bazinda kopyalama demektir.Örnegin 1000 tane subesi
olan bir banka düsünün ve her subede 50 kullanici olsa toplam 50000 kullanici demektir
ve ayni saatler icerisinde sadece bir Servera erismeleri biraz garip olurdu sanirim (böyle
bir durumu düsünemiyorum bilen varsa lütfen mail atsin).Bunun icin en azindan birden
fazla Database farkli yerlerde fakat merkezi bir Databasede olusan bir degisim diger
bütün databaselere zamanla iletilir.
Bir hesaba bütün diger subelerden erisilebildigine göre Databasedeki kayitlarin bir kere
ayni olmasi gerekmektedir.Bu durumda farkli sehirlerde replike edilen birden fazla server
dusunursek ve her birinin üzerinde bir Database calisirsa ve bütün bunlar replike edilirse
yükler dagilmis ve performans artmis olur.Özet olarak bir Databasein replike edilmesi
demek o Databasedeki degisiklikler birebir diger Databaselere aktarilmasi demektir.
Replicationun sagladigi bir avantaj da bir Databasein ariza görmesi halinde (down) diger
Databasein durumu idare edebilmesidir.
Parallel Server (Clustering) özelligi var mi?
Bu özellik daha cok büyük Databaseler icin gecerlidir.Bir Server düsünün o anki
teknolojiyle donanim olarak maximum seviyede donatilmis fakat toplam kullanici sayisini
kaldiramiyor, ya da basit olarak bir Databasei 2 server üzerinde calistirmak istiyorum ya
da bir Databasede bir ariza olustugunda otomatik olarak diger Database durumu idare
etsin istiyorsam Databasein Parallel Server özelligi olmasi gerekir.
Oracle, Informix , DB2 ve MS-Sqlserver in parallel özellikleri var fakat normal Database
lisansindan ayri bir fiyatla satilmaktadir.Postgresql ve MySql in ise böyle bir özelligi
yoktur.
Lojiksel olarak limitleri nelerdir?
Her Databasein kendi mimarisi vardir ve buna bagli olarak da bazen teorik de olsa
limitleri vardir.Bir tablodaki column (alan) sayisi, bir tablonun maximum alacagi satir
sayisi, bir Databasein maximum kullanabildigi alan, bir alanin maximum büyüklügü gibi
faktörler büyük Database (>100Gb)ler icin önemlidir.
Simdi birkac Databasein limitlerini vermeye calisalim:
PostgreSQLAsagidaki bilgiler aynen http://www.ca.postgresql.org/users-lounge/limitations.html
adresinden alinmistir.
Bir Databasein maximum büyüklügü sinirsiz(60GB databaseler mevcut)
Bir tablonun maximum büyüklügü 64 TB bütün Isletim Sistemlerinde
Bir satirin maximum büyüklügü sinirsiz 7.1 ve sonrasi versiyonlarda
Bir alan icin maximum büyüklük 1GB 7.1 ve sonrasi versiyonlarda
Bir tablodaki maximum satir sayisi sinirsiz
Bir tablodaki maximum alan sayisi 1600
Bir tablodaki maximum index sayisi sinirsiz
Tabii ki bunlar sinirsiz degildirler, fakat eldeki disk alanina ve hafiza/swap alanina
bagimlidir.Bu degerler normalin disinda büyük olursa performans sorunu yasanabilir.
Oracle
Bir tablodaki maxiumum index sayisi sinirsiz
Maximum icice altsorgu (nested queries) sayisi 255
Maximum Database useri 65525
Bir tablodaki maximum alan sayisi 1000
Bir tablodaki maximum satir sayisi sinirsiz
Maximum Tablespace sayisi 64K
Maximum block sayisi 16Kb
Kaynak : http://download-uk.oracle.com/docs/html/A97297_01/ch1_admin.htm#i92495
Informix
Maximum Database büyüklügü 2 Terabyte
Maximum alan sayisi 32000
Maximum tablo sayisi 2^31-1
MySQL
http://www.mysql.com/doc/en/Features.html :Büyük Databaseler olusturmak mümkündür.50 milyon kayit iceren bazi Databaseler
kullaniyoruz ve 60000 tablo ve yaklasik 5 milyar satir sayisi olan kullanicilar biliyoruz.Bir
tabloda maxiumum 32 index kullanilabilir.Her bir index 1 ile 16 arasinda alandan
olusabilir.Maximum index genisligi ise 500 bytedir(bu MySQL Serveri derlemekle
degistirilebilir).Bir indexi CHAR ya da VARCHAR olarak kullanabilirsiniz.
Maxiumum tablo büyüklügü 4Gb (3.22) 3.23 versiyonuyla birlikte myIsam tablo tipinde 8
milyon Tb yani 2^63 büyüklügünde bir tablo mümkündür.
Maximum alan büyüklügü 4Gb (long text ya da long blob)