Veritabani Mimarisi
"Iliskilendirilmis tablolar" ve bunlarin tamamina verilen isim "Iliskilendirilmis Veritabani" kismini bir onceki yazimizda ele almistik.Simdi de veritabani tasarimlari konumuzun ikinci kismi olan -veriatabani mimarileri- uzerine konusalim :
Temel olarak iki adet "veritabani mimarisi" vardir:
# Yerlesik model (Standalone Model)
# Istemci/Sunucu model (Client/server Model)
Yerlesik Model Veritabanlari
Yerlesik Model Veritabani modelinde,veritabani ve veritabani motoru ayni makine uzerinde yerlesik dosya sistemi icerisinde yer almaktadir.Sadece bir tek kullanici veritabanina erisebilir.(Ayni anda iki kisi veritabanina erisemez.)...
Genelde makine ag sistemlerine baglanmaz.Zaten veritabaninin kendisi ag kullanicilarina destek vermez.Veritabani icindeki bilgiler diger makinelere paylastirilamaz.Her kullanici "lokal" olarak kendi verisini duzenleyebilir.Bu tip veritabanlarina ornek dBase ve DBM verilebilir.
Istemci/Sunucu Modeli Veritabanlari
Bu tip veritabanlari biraz once aciklanan, "Yerlesik Model Veritabani Sisteminden" devir alinan sinirlamalari kaldirmasi amaciyla gelistirilmislerdir. Yapisi bir "yemek restoranin" isleyis sistemi ile benzerlikler gosterir :
"Gelen tum musteriler garsondan servis almak icin istekte bulunurlar..."
Sistem isleyisinin anahtar kelimesi budur.
"Istegi alan garson,istegin yapisina gore sef veya barmenden yardim almak isteyecektir.Musteriler servisin nasil ele alindigini bilmek durumunda veya kaygisi icinde degildirler.Bu istegin karsilanmasi icin kac kisi calismistir bu durumda istegi yapan musteriyi pek ilgilendirmez.Ayni anda gelen butun musterilerden,garson sorumludur.Eger garson herkesi memnun edecek kadar verimli ise,belirli bir zaman dilimi icinde gelen istekleri isleyecek ve sonuclarini musteriye ulastiracaktir."
Burada sozu edilen garson ile istemci/sunucu iliskisindeki sunucu temsil edilmektedir.Sunucu kaynaklari ne kadar guclu ise,musteriler programlarin calismasi sirasinda,CPU'nun(Central Processsor Unit veya turkcesi islemci ) calismasi icin gecen sureyi anlamiyacaklardir...
Baska bir ornek vermek gerekirse,amazon.com'dan bir kitap almaya calistiginizi dusunelim.Bu noktada istemci programiniz -web tarayiciniz veya browser olarak ta tabir ediliyor- amazon.com web sunucusuna bir "istek" te bulunur.Bu istek "web sunucu" tarafindan kendi ic sisteminde artik bir "istemci" olarak tabir edebilecegimiz baska bir programa gecirilir.Bu program yardimiyla "veritabaninda" sorgulama yapilarak "donen cevap" tekrar istegin yapildigi "web sunucusuna" bildirilir.Gelen bilgiyi isleyen web sunucusu bunu direkt olarak kullanicinin tarayicisina gondercektir. (Tabii ki amazon.com'un arada ne gibi islemler yaptigini bilemeyiz .)
Simdi anlatilan butun konulari toparlayalim ve bir ozet cikaralim:
# Performans : Veritabani verimi "normalizasyon" islemi ile buyuk oranda artacaktir.
# Cok Kullanicili-Cevre : Sisteme yapilacak isteklerde bizi sinirlayan iki unsur vardir.Satin alinan lisansin sinirlari ve donanim kaynaklari...
# Kullanilabilirlik : Ag tabanli olarak , gelen butun istekler "canli" olarak degerlendirilecek ve erisilebilir(iznimizin oldugu) butun veri sunulacaktir.Veriye ne zaman ve hangi noktadan erismek istediginiz size kalmistir...
# Guvenlik : Cok kullanilicili bir sistemde guvenlik,sistem yoneticilerinin ilk kaygi duyduklari konudur.iyi organize edilmis guvenlik semalarinin hazirlanmasi gereklidir.Bazi durumlarda veritabanlarinin kendileride size bu konuda yardimci olmaktadir.
Ornegin MySQL veritabani sistemi kendi icinde bulunan verilerin hicbirine direkt olarak erismenize,her ne sart altinda olursaniz olun izin vermez.Bu durumda "isletim sistemi" seviyesinde bir guvenlik hatti saglanmis olmaktadir.
# Guvenilirlik : (reliability) Yazilim konusunda "guvenilirlik" o uygulamanin ne siklikla "coktugune" bakilarak karar verilen bir olgudur.Bu durumda veritabani guvenilirligi de, "servisin verilmesi sirasinda ortaya cikan ve tekrar bilgisayari baslatmayi gerektiren uygulama kilitlenmeleri" olarak adlandirilabilir.
MySQL veritabani serveri, cocuk (yardimci) prosesleri hazir bulundurarak ve gelen yeni istekleri bunlara kaydirarak,calisir.Cok nadiren de olsa bu cocuk proseslerden birinin "olmesi" halinde serverin tamamini da yaninda cekebilmektedir.Bu durumda bir verinin kaybolmamasi icin "kurtarma araclari" bu veritabinin yaninda kullanima sunulmustur...
Son Soz : Istemci/sunucu tipi veritabani sistemleri hem kurulmasi zor hemde yonetilmesi pahalli sistemlerdir.Simdi gorecegimiz MySQL sistemi ise bu kategoride olmasina ragmen saatler icinde uygulamaya sokulabilir ve yonetilemsi de cok zor degildir.
Neden MySQL?
MySQL "iliskisel veritabani sistemi" (RDBMS Related Database Management System) ucretsiz olarak tum dunyada kullanilabilen bir yazilimdir.Cok yeni olarak "Acik Kaynak Kod" topluluguna katilmistir.Bu topluluga katilmadan once bile ucretsiz olarak dagitilmaktaydi.(MySQL'i para kazanamak icin kullanmiyorsaniz bir lisansa gereksiniminiz yoktu.Windows uzerindeki versiyonu ise shareware olarak sunuluyordu.)
Tek kurus odemeden boyle bir istemci/sunucu veritabnina sahip olmak onu yaristigi diger programlardan ustun kilan ozelligidir.Hemen faaliyete gecirilip uzerinde uygulamalar gelistirilebilir.
(MySQL veritabaninin sahip oldugu GPL lisansi sizi endiselendiriyorsa,her zaman icin gelistiricilerinden "ticari lisans" satin alabilirsiniz." Bunun icin http://www.mysql.com/ adresini ziyaret etmeniz yeterlidir.)
Ucretsiz olmasinin yanisira asagida siralanan bazi arti ozellikleri de icerisinde barindirmaktadir :
# "Acik Kaynak Kod" yapisi : MySQL veritabani yazilimi butun kaynak koduyla berber gelir.Bu su anlama gelmektedir,kaynak kodunu inceleyebilir ve uzerinde calisabilirsiniz.Tum bunlarin yaninda,elinizdeki bu kodu kendi ihtiyaclariniza gore tekrar yazip,uygulama sekline getirebilirsiniz.Acik kaynak kodlu sistemler icin tum dunya uzerinde,yuksek seviyeli "destek" hizmetini bulma sanisiniz cok yuksektir.
# SQL Destegi : MySQL adindaki "SQL" zaten onun SQL (Structured Query Language) destekledigini gostermektedir.Bununla berber her RDBMS sisteminde farkli SQL kodlama setleri kullanilmaktadir.MySQL kendi yapisina ve komutlarina sahiptir.Temeldeki butun SQL yapisi ise diger bveritabanin sistemlerinde oldugu gibi ayndir...
# Goz kamastiran performansi ve guvenilirligi : MySQL diger cogu veritabani sisteminden hizli ve guvenilirdir.Kendi sitesinde "benchmark" (karsilastirma) tablolarina bakabilirisiniz...
# Kolay Kullanim : Bu kadar guclu ozellikleri icinde barindirmasina ragmen kullanimi gercekten cok kolaydir.MySQL veritabani sistemi,isletim sisteminin yonettigi dosya sisteminde,tablolarin dosya ve klasirlerde saklanmasindan ote yapisi olan bir yazilimdir.Tabii ki bir tabloyu kaldrimak,gidip te ilgili klasorden tablonun yapisinin saklandigi dosyayi silmekle gerceklestirilememez.Bunun icin sistemle beraber bazi yonetim programlari da verilmektedir.
# Ucretsiz Destek Hizmeti : MySQL cok gelismis bir kullanici altyapisina sahiptir.Profosyenel bir destegi ucretsiz olarak "haber gruplari","eposta gruplari" ve "forumlar" yardimiyla almak hic te sanildigi kadar zor degildir.Bir cok ucuncu parti web sitesi ve bu sitelerin profosyonel kullanicilari bilgilerini ucretsiz olarak paylasmaktadir.
# Capraz Platform Ustunlugu : MySQL hem Unix hemde Windows altinda calisabilir...
MySQL Veritabani Sisteminin Yuklenmesi
Bu kadar anlatimdan sonra isterseniz biraz da uygulama yapalim ve once bu "veritabani yazilimini" bilgisyarimiza /sunucumuza yukleyelim.
MySQL'in Windows Isletim Sistemi Uzerine Yuklenmesi
Oncelikle bu yazilimin "daha onceden derlenmis" (binary) halinin (windows surumu) http://www.mysql.com/ web sitesinden indirilmesi gereklidir.Bu dosya buyuk ihtimal bir .zip dosyasi olarak bilgisyariniza ulasacak ve mysql-3.23.23-beta-win.zip gibi bir isimle hard diskinizde saklanacaktir.Bu sikistirlmis dosyayi winzip yardimiyla actiginizda setup.exe isminde bir dosya goreceksiniz.Bu dosyanin uzerine iki kez tiklayin ve uygulamayi calistirin.Ongorulen tum seceneklerle programin kurulum islemini tamamlayiniz.(Buyuk ihtimal C:MySQL dizinine kendisini kuracaktir.)
Server ve istemci programlari bu sekilde yuklendikten sonra serverin calistirilip, hizmete hazir hale getirilmesi gereklidir.Windows 95 kullanicilari bu isleme ek olarak, TCP/IP dosyalarini windows CD sinden ve Winsock 2 programini da Microsoft'un(R) sitesinden indirmelidirler.MySQL,istemci makineler ile TCP/IP ile konusmaktadir.
Butun calisabilir MySQL programlari bin isimli dizinde saklanmaktadir.Tipik bir kurulum yaptiysaniz bu dizin buyuk ihttimalle C:mysqlbinolacaktir.Bu programlarin buyuk cogunlugu (mysql.exe,mysqladmin.exe,mysqld.exe vb.) komut satirindan calisabilir olarak dizayn edilmislerdir .Bu su anlama gelmektedir :Bu programlarin uzerine iki defa tiklamakla bu uygulamalar calistirilamaz...
Not: winmysqladmin.exe isimli program windowsun grafik arabirimi ile calisabilir sekilde dizayn edilmistir.Bu guclu uygulama yukaridaki aciklamanin disindadir.Bu grafik arabirimli program ilk calistirildiginda sizden kullanici adi ve sifre girmenizi bekleyecektir.Bu ikili daha sonraki veritabani yonetim islemlerinde sizin kimliginizi onaylamak icin kullanilacaktir.Bu program daha sonra veritabani sitemini calistirmayi dener.Eger islem basarili olursa kendisini sag alt kosedeki "tray icon" alaninda saklayacaktir.
Windows NT ve 2000 kullanicilari bir secenege daha sahiptir.Bu secenek ile mysql servis olarak sistemde calistirilabilir.Bu sekilde yapilandirildigi zaman sistem her basladiginda mysql otomatik olarak servis vermeye hazir halde bulunacaktir.Bu islemi saglamak icin my-example.cnf dosyasini, C:MySQL dizininden C:my.cnf olacak sekilde kopyalamalisiniz.(Windows bazen .cnf uzantili dosyalari gizlemektedir.Bu konuda hazirlikli olmalisiniz...)
Bu dosya icerisinde mysql'in global ayarlari saklanmaktadir.Bu dosya acilis sirasinda servisin aktif hale getirilmesi icin okunmaktadir.Bundan sonra basitce winmysqladmin menusunden Install the Service secenegi secilerek yukleme yapilamalidir.(Tabii ki once MySQL'in calismasini durdurun.)
MySQL'in Linux Isletim Sistemi Uzerine Yuklenmesi
Linux kullanicilari iki secenege sahiptir.Bunlardan ilki yazilimi daha onceden derlenmis bir binary dosyasindan,ikincisi kaynak kodundan yuklemektir.Her iki secenek te de mecburen gidip http://www.mysql.com/ sitesinden programin yukeleme dosyalari download edilmelidir.
RPM paketleri seklinde yukleme yapmak istiyorsaniz, "sunucu", "istemci", "ek dosya ve kutuphaneler" ve "istemci paylasilan kutuphaneleri" paketlerinin sisteme kuruldugundan emin olunmalidir.
(Versiyon numaralari ve platform degisik olabilir.Genel olarak isimler degismeyecektir...)
# MySQL-3.23.23-1.i386.rpm
# MySQL-client-3.23.23-1.i386.rpm
# MySQL-devel-3.23.23-1.i386.rpm
# MySQL-shared-3.23.23-1.i386.rpm
RPM paketleri ile yukleme isleminin yapilmasi
>rpm -Uvh dosyaadi.rpm
Yukaridaki komut yardimiyla,aynen yukarida verilen listedeki siraya gore paketleri yuklerseniz herhangi bir problemle karsilasmazsiniz.
Ilk defa yuklendiginde ekranda asagida yazilan sekildeki gibi bir yazi belirecektir :
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
This is done with:
/usr/bin/mysqladmin -u root password 'new password'
See the manual for more instructions
Please Report any problems with the /usr/bin/mysqlbug script !
The latest information about MySQL is vaible on the web at http://www.mysql.com/
Support MySQL by buying support/licences at http://www.tcx.se/licence.html
Starting mysqld deamon with databases from /var/lib/mysql
RPM paketleri yukleme sirasinda /etc/rc.d/init.d/mysql dizininde bazi scriptler yaratarak,sistem her acildiginda otomatik olarak veritabanini baslamasini saglarlar.Bu scriptleri elle kontrol etmek icin asagidaki komutlari kullanabilirisiniz :
> /etc/rc.d/init.d/mysql start
> /etc/rc.d/init.d/mysql stop
Simdi MySQL-client,MySQL-devel ve MySQL-shared paketlerini yukleyerek, sistemin tamamen bilgisyariniza yuklenmesi islemini bitiriniz.
Kaynak kod ile yukleme isleminin yapilmasi
kaynak kdoundan yuklemekicin asagidkai proceduru izleyiniz :
> tar -zxvf mysql-3.22.32.tar.gz
> cd mysql-3.22.32
> ./configure --prefix=/usr
> make
make komutu bir sebeple basarili olamaz ise bunun nedeni buyuk ihtimalle hafizdan kaynaklaniyordur.Kaynaklari yuksek makinelerde bile bu durum bazen sorun yaratamaktadir.Bu durumda problem asagidaki proceduru uygulamakla giderilebilir.
>rm -f config.cache
>make clean
>./configure --prefix=/usr --with-low-memory
>make
Simdi basitce asagidaki komutlari girerek kurulumu baslatabiliriz.
> make install
> mysql_install_db
Simdi de sistem her basladiginda veritabani serverinin baslamasini saglamak icin iki adet script yazip bunlari sistemin acilisi sirasinda okunmasi icin ayarlayalim.
Ilk olarak acilis ta okunacak ve mysql'i calistiracak kucuk scripti yazalim.(Bu scripti turk-php.com dan download'ta edebilirsiniz.Yazinin sonundaki ornek dosyalar bolumunde ilgili linki bulacaksiniz.)
#!/bin/bash
/usr/bin/safe_mysqld &
Bu dosyayi ornegin "mysqlbaslat" olarak kayit edin.(Ayanen buradaki gibi isim verebilirisiniz.nasil olsa ismi scriptin ismi degil icindeki kod onemli :)
Simdi de severi kapatmak icin bir script yazalim.
#!/bin/bash
kill `cat /usr/var/$HOSTNAME.pid`
Bu dosyayi da ornegin "mysqlbitir" olarak kayit edin.
Simdi bu iki scripte asagidaki islemi uygulayak onlara "calistirilabilir" bir uygulama olarak davranilmasini saglayalim.
> chmod ug+x mysqlbaslat
> chmod ug+x mysqlbitir
Daha sonra bu scriptleri linux sisteminizin acilis klasorune koyarak her acilista otomatik calismalarini saglayabilirsiniz.
root kullanici hesabinin kurulmasi ve sifrenin belirlenmesi
Server sistemini kurup calistirmaya basladiktan sonra yapilacak ilk is root kullanici hesabinin guvenlige alinmasi yani "bos olan sifre degerinin" istenilen bir deger verilerek degisitirilmesidir.
Windows kullanicilari Ms-DOS komut satirina,linux kullanicilarida herhangi bir terminal acarak asagidaki komutlari uygulayabilirler.
Ilk olarak MySQL'in bin klasorune ulasin.Genelde C:mysqlbin olacaktir.Bu klasore gectikten sonra asagidaki komutu calistiriniz :
> mysqladmin -uroot password sifreniz
Burada "sifreniz" ile yazilan yere kendi sifrenizi yaziniz.
Kurulumun Test Edilmesi
Asagida gosterilen komutlari girerek mysql kurulumunu test edelim : (Kalin olarak yazilanlar komut,italik yazilanlar ise sistemin bu komutlar icin ciktisidir.)
> mysqlshow
Databases
mysql
test
> mysqlshow -uroot -p mysql
Enter password: ******
Database:mysql
tables
columns_priv
db
host
tables_priv
user
Bir sonraki makalede SQL diline giris yapacagiz ve temel bazi MySQL sorgu komutlarini inceleyecegiz.