|
|
Bu makalenin farkl� dillerde bulundu�u adresler: English Deutsch Francais Nederlands Russian Turkce |
Bob Smith <bob/at/linuxtoys.org> Yazar hakk�nda: Bob, Linux programc�s�d�r ve hobisi elektroniktir. Onun en son projelerini www.runtimeaccess.com'dan ve www.linuxtoys.org ana sayfas�ndan ��renebilirsiniz. T�rk�e'ye �eviri: �zcan G�ng�r <ozcangungor(at)netscape.net> ��erik: |
�al��an Bir ��lem ile Konu�mak�zet:
�al��ma An�nda Eri�im(Run Time Access), program�n�zdaki veri yap�lar�n� PostgreSQL'de tablolar olarak ya da sanal dosya sisteminde (/proc benzeri) bir dosya olarak alman�z� sa�layan k�t�phanedir. �AE kullanarak artalan s�recinize (daemon) ya da hizmetinize �e�itli y�netim aray�zleri ekleyebilirsiniz. �rne�in web, kabuk, SNP ya da �er�eve belle�i.
|
Yap� katarlar�nda verilerinizin oldu�u bir program�n�z olsun. Yap� ve katar �u �ekilde tan�mlanm��t�r:
struct mydata { char note[20]; int count; } struct mydata mytable[] = { { "Lable note", 100 }, { "Music note", 200 }, { "No note", 300 }, }; |
E�er program�n�z� �AE ile yazarsan�z, program�n�z�n i� verilerini sanki PostgreSQL veritaban�ndaym�� gibi komut sat�r�ndan ya da ba�ka bir programdan de�i�tirebilir ve inceleyebilirsiniz. A�a��daki �rnek, progarm�n�zdaki verileri Bash ve psql (PostgreSQL komut sat�r� arac�) ile nas�l okuabilece�inizi ve de�i�tirebilece�iniz g�sterir:
# myprogram & # psql -c "UPDATE mytable SET note = 'A note' LIMIT 1" UPDATE 1 # psql -c "SELECT * FROM mytable" note | count ------------+------- A note | 100 Music note | 200 No note | 300 #
Bu makale, �AE gibi bir �eye neden gereksinim duyuldu�unu, RTA k�t�phanesinin nas�l kullan�laca��n� ve �AE kullanarak ne gibi avantajlar sa�lanaca��n� a��klayacakt�r.
Var olagelen UNIX, bir hizmet ile ayar verilerini /etc/hizmet.conf dosyas�na koyarak ileti�irdi ve hizmetin olu�turdu�u ��k�� /var/log/hizmet.log dosyas�na yaz�l�rd�. Bu kabul edilmi� yakla��m, cihazlar �zerinde �al��an ve e�itimsiz sistem y�neticileri taraf�nda ayarlanan g�n�m�z hizmetleri i�in b�y�k olas�l�kla yanl��t�r. Bu var olagelen yakla��m i�e yaram�yor ��nk� art�k �e�itli, ayn� anda �al��an kullan�c� aray�zleri istiyoruz ve her aray�z�n hizmet ile ayalar�, durumu ve istatistikleri, hizmet �al���rken de�i�tirebilmesini istiyoruz. Gereken �ey, �al��ma an�nda eri�im.
Yeni hizmetler, �ok �e�itli kullan�c� aray�zlerine gereksinim duyuyorlar ve biz geli�tiriciler, en �ok hangi aray�ze gereksinim duyulaca��n� �nceden kestiremeyebiliriz. Yapmam�z gereken, ortak protokolleri kullanarak, kullan�c� aray�zlerini hizmetten ay�rmal�y�z ve ortak protokolleri kullanarak aray�zleri olu�turmal�y�z. Gereksinim duyuldu�unda yeni aray�z eklemek b�ylece daha kolay olur ve ay�rma testleri kolayla�t�r�r ��nk� her par�a ayr� ayr� test edilebilir. �una benzer bir yap� istiyoruz:
Aray�z �e�itleri �unlar olabilir: web, komut sat�r�, �er�eve belle�i, SNMP, tu�tak�m� ve LCD, LDAP, do�al Windows ve di�er iste�e ba�l� aray�zler. A��k�a b�t�n kullan�c� aray�zlerine tek ortak API ve protokol iyi olurdu ama hangi �e�it API ve protokol?
�AE, ortak API ve protokol olarak PostgreSQL'i kullanmay� se�mi�tir. Ayarlama, durum ve istatistikler, API �zerinde PostgreSQL veritaban�ndaki tablolar olarak g�r�nen yap� dizilerine konur. Kullan�c� aray�z� programlar�, bir PostgreSQL veritaban�na ba�lanan istemciler olarak yaz�l�r. Bu yakla��m�n iki b�y�k faydas� vard�r:
�AE k�t�phanesi, dizileri, ba�l� listeleri ya da veri yap�lar�n� PostgreSQL istemcilerine ba�layan bir yap��t�r�c�d�r. �AE kullanan uygulaman�n mimarisi �una benzer...
Bunu y�netim aray�z� olarak adland�r�yoruz ��nk� durumu, istatistikleri ve ayarlar� g�stemesi beklenmektedir. Sadece bir aray�z�n g�r�mesine ra�men, daha �ok aray�z�n olabilece�ini unutmay�n ve hepsi ayn� anda uygulamaya eri�ebilir.
PostgreSQL, ula��m protkol� olarak TCP'yi kullan�r. Uygulaman�z bir TCP portuna ba�lanabilmeli ve �e�itli kullan�c� aray�zlerinden ba�lant�lar� kabul edebilmelidir. Kabul edilmi� bir ba�lant�dan gelen b�t�n baytlar dbcommand() ile �AE'ye aktar�l�r. Bir istemciye d�necek olan veriler, dbcommand()'dan d�nen bir tampondad�r.
�AE, hangi tablolar�n kullan�labilir oldu�unu nereden biliyor? Bunu s�ylemek zorundas�n�z.
�AE'ye veri yap�lar� olan tablolar�n�z hakk�nda rta_add_table() fonksiyonu ile bilgi verirsiniz. TBLDEF veri yap�s�, bir tablo tasvir eder ve COLDEF yap�s�, bir s�tun tasvir eder. A�a��da �AE'ye nas�l bir tablo ekleyece�inizi g�sterir:
Uzunlu�u 20 karakter olan bir katara sahip bir veri yap�s�na sahipsiniz ve bu yap�da olan 5 tabloyu d�� ortama ta��mak istiyorunuz.Yap�y� ve tabloyu �u �ekilde tan�mlars�n�z:
struct myrow { char note [20]; int count; }; struct myrow mytable[5];
myrow veri yap�s�ndaki her alan, veri taban� tablosundaki bir s�tundur. �AE'ye, s�tunun ismini, hangi tablo i�inde oldu�unu, veri tipini, sat�r�n ba�lang�c�n� refarans alarak yerini, salt-okunur olup olmad���n� bildirmeliyiz. Bir de s�tun yaz�ld�ktan sonra ve/ve ya okunmadan �nce �a�r�lacak olan geri�a��r�m rutinini eklemeliyiz. Bizim �rne�imizde, count salt-okunurdur ve do_note() fonksiyonu, note s�tununa her yazma i�lemi oldu�unda �a�r�l�yor. TBLDEF'e eklenmi� olan COLDEF dizisini olu�turduk. Her yap� �yesine bir COLDEF kar��lk gelir.
COLDEF mycols[] = { { "atable", // SQL'deki tablo ad� "note", // SQL'deki s�tun ad� RTA_STR, // s�tun/alan i�in veri tipi 20, // s�tunun byte olarak geni�li�i 0, // sat�r�n ba�lang��tan uzakl��� 0, // boolean bayraklar� i�in bit olarak OR (void (*)()) 0, // okuma'dan �nce �a�r�l�r do_note(), // yazma'dan sonra �a�r�l�r "S�tun tan�mlamas�n�n son alan�, s�tunu tan�mlayan bir katar�d�r." "Burada isterseniz s�tundaki verinin ne oldu�unu ve tipini a��klayabilirsiniz."}, { "atable", // SQL'deki tablo ad� "count", // SQL'deki s�tun ad� RTA_INT, // s�tun/alan i�in veri tipi sizeof(int), // s�tunun byte olarak geni�li�i offsetof(myrow, count), // sat�r�n ba�lang��tan uzakl��� RTA_READONLY, // boolean bayraklar� i�in bit olarak OR (void (*)()) 0, // okuma'dan �nce �a�r�l�r (void (*)()) 0, // yazma'dan sonra �a�r�l�r "E�er tablolar�n�z, kullan�c� aray�z� ile hizmet aras�nda bir aray�z ise " "s�tun ve tablo tan�mlamalar�n�z projrniz i�in i�levsel bir �zellik olur ve geli�tiriciler i�in en iyi dok�mantasyondur. };
Yazma geri�a��r�mlar�, uygulaman�z� s�ren ger�ek motorlar olabilirler. Bir tablo de�i�ikli�inin ba�ka bir de�i�ikli�i ya da uygulaman�z�n yeniden ayarlanmas�n� tetiklemesini isteyebilirsiniz.
�AE'yi tablo ismini, her sat�r�n uzunlu�unu, s�tunlar� tan�tan COLDEFS dizisini, s�tun say�s�n�, e�er baz� s�tunlar�n kaybolmas�n� istemiyorsan�z s�tunun kaydedilece�i dosyay� ve tabloyu tan�tan bir katar� vererek tablo hakk�nda bilgilendirirsiniz. E�er tablo yap�lar�n dura�an bir dizisi ise ba�lama adresini ve sat�r say�s�n� vermelisiniz. E�er tablo ba�l� listeler �eklinde uygulan�yorsa �AE'ye bir sat�rdan di�erine ge�meye yard�mc� olacak fonksiyonu vermelisiniz.
TBLDEF mytableDef = { "atable", // tablo ismi mytable, // tablonun adresi sizeof(myrow), // her sat�r�n uzunlu�u 5, // sat�r say�s� (void *) NULL, // iterasyon fonksiyonu (void *) NULL, // iterasyon geri�e��r�m verisi mycols, // s�tun tan�m� sizeof(mycols / sizeof(COLDEF), // # s�tunlar "", // kay�t dosyas� "Tablonun tam bir tan�t�m�." };
Normal olarak, SQL taraf�ndan g�r�nen tablo ismi ile programda kullan�lan tablo isminin ayn� olmas�n� istersiniz. �rnekte, mytable atable olarak, tablo isimlerinin ayn� olmak zorunda olmad�klar�n� g�sterebilmek i�in de�i�tirildi.
�imdi �AE'ye kendi tablonuzu tan�tabilirsiniz.
rta_add_table(&mytableDef);
Hepsi bu. �AE'yi kullanabilmek i�in, iki veri yap�s�n� (COLDEF ve TBLDEF) ve iki fonksiyonu (dbcommand() ve rta_add_table()) nas�l kullanaca��n�z� ��renmelisiniz.
Yukar�daki kod, �AE'nin nas�l �al��t���n� g�sterebilmek amac�yla verilmi�tir. Tam bir bilgi kayna�� veya tamamen �al��am bir �rnek olarak verilmemi�tir. �AE API'si ile ilgili tamamen �al��an �rnek ve tam a��klamalar, �AE ana sayfas�ndad�r.
Kendi uygulaman�zda kullana��n�z tablolar� tan�mlad�ysan�z, �AE, kendi i� tablolar�n� tan�mlam��t�r. Bunlardan en ilgin� olanlar�, listelenecek tablolar ve tan�mlad���n�z tablolar� tan�tan rta_tables ve tra_columns tablolar�d�r. Bunlara genellikle sistem tablolar� denir. Sistem tablolar�,ls bir dosya sistemi i�in ne yap�yorsa, getnext SNMP i�in ne yap�yorsa, bir veritaban� i�in onu yapar.
�AE ile birlikte gelen programlamlardan biri k���k bir PHP program�d�r. Bu program ile sistem tablolar�n� web taray�c�s� ile ekranda g�rebilirisiniz. Tablo adlar� k�pr�lenmi�tir ve bir tablo ad� t�kland���nda o tablonun ilk 20 sat�r� g�r�lebilir. E�er sat�r de�i�tirilebilir ise o sat�r t�klanarak d�zenleme penceresi yard�m�yla bilgi de�i�tirilebilir. Bunlar�n hepsi sistem tablolar�ndaki tablo ve s�tun bilgileri yard�m�yla olmaktad�r. Veri ak��� a�a��da g�sterilmi�tir.
�AE �rnek uygulamas� i�in tablo d�zenleyecisinin en �st seviye g�r�nt�s� a�a��dad�r.
�AE Tablo D�zenleyici
|
E�er bu makaledeki her�ey do�ru gittiyse, yukar�da verilen tablo isimleri, Santa Clara'daki �AE' ewb sunusu �zeinde �al��an k�pr�ler olarak g�nmelidir. Takip edilecek en iyi k�pr� mytable k�pr�s�d�r.
�AE, PostgreSQL istemci k�t�phanesiyle (libpq) yaz�lm�� kullan�c� aray�z� ya da y�netim programlar�n�, sizin uygulamalar�n�za ya da artalan programlar�n�za ba�layan bir k�t�phanedir. �AE, bir aray�zd�r, veritaban� de�il. Sadece, SELECT ve UPDATE SQL komutlar�na gereksinimi vard�r.
SELECT ifadesi i�in gerekli yaz�m �ekli:
SELECT column_list FROM table [where_clause] [limit_clause]
column_list, virg�lle ayr�lm�� s�tun isimleri listesidir. where_clause, AND ile ayr�lm�� kar��la�t�rma listesidir. Kar��la�t�rma i�aretleri =, |=, >=, <=, >, ve <. limit_clause, [LIMIT i] [OFFSET j] �eklindedir. i, geri d�nd�relecek maksimum sat�r say�s�d�r ve j kadar sat�r� g�stermeden atlar�z. Yaz�m� anlamak i�in birka� �renek verelim:
SELECT * FROM rta_tables SELECT notes, count FROM atable WHERE count > 0 SELECT count FROM atable WHERE count > 0 AND notes = "Hi Mom!" SELECT count FROM atable LIMIT 1 OFFSET 3
LIMIT'i 1 yapma ve belirli bir sat�r� alabilmek i�in OFFSET belirleme. En son �rnek C'deki (mytable[3].count) ifadeye benzer.
UPDATE ifadesinin yaz�m�:
UPDATE table SET update_list [where_clause] [limit_clause]
UPDATE atable SET notes = "Not in use" WHERE count = 0 UPDATE rta_dbg SET trace = 1 UPDATE ethers SET mask = "255.255.255.0", addr = "192.168.1.10" WHERE name = "eth0"
�AE, �rneklerde hep b�y�k harf kullan�lmas�na ra�men, k���k/b�y�k harf ayr�m� yapmaz.
�AE'yi kendi anasayfas� www.runtimeaccess.com (LGPL lisansl�d�r)'dan indirebilirsiniz. �AE'nin hangi s�r�m�n� indirece�inize dikkat edin. �AE'nin son s�r�m�, PostgreSQL'in 7.4 s�r�m� ile �al���r. �o�u Linux da��t�m� 7.3 s�r�m� ile birlikte gelir. Ba�lang�� i�in �AE'nin eski s�r�mlerini kullanabilece�iniz gibi iyile�tirilmi� ve hatalardan ar�nd�r�lm�� s�r�m� i�in en son s�r�m�n� kullanmal�s�n�z.
Paketi a�t���n�zda a�a��daki dizinlerin olu�mas� gerekir:
./doc # �AE ana sayfas�n�n bir kopyas� ./empd # �AE ile olu�turulmu� bir prototip artalan s�reci ./src # �AE k�t�phanesinin kaynak dosyalar� ./table_editor # Tablo d�zenleyicinin PHP kayna�� ./test # �rnek bir uygulaman�n kayna�� ./util # �AE'yi yazarken kullan�lan yard�mc� programlar
Graham Phillips'e te�kk�rler, �AE'nin 1.0 s�r�m� autoconf deste�ine sahiptir. Graham, �AE'yi Linux'tan Mac OS X'e, W,ndows'a ve FreeBSD'ye uyarlam��t�r. 1.0 s�r�m�n� kullanarak, �AE'yi s�radan komutlarla y�kleyebilirisiniz.
./configure make make install # ( root olarak)
Y�kleme, librtadb.so ve ilgili dosyalar� /usr/local/lib sizinine koyar. �AE'yi kullanabilmek i�in bu dizini /etc/ld.so dosyas�na yazmal� ve ldconfig komutunu �al��t�rmal�s�n�z ya da dizini y�kleme yoluna �u �ekilde eklemelisiniz:
export LD_LIBRARY_PATH=/usr/local/lib
Y�kleme, �AE ba�l�k dosyas�n�, rta.h, /usr/local/include dizinine koyar.
make, bir test program�n� test dizininde olu�turur ve y�klemenizi test etmek i�in test dizinine gidin ve ./app & komutunu �al��t�r�n. netstat -nat komutu size 8888 nolu portu dinleyen bir program oldu�unu s�yleyecektir. Art�k psql komutunu �al��t�rabilir ve SQL komutlar�n� test program� ile kullanabilirsiniz.
cd test ./app & psql -h localhost -p 8888 Welcome to psql 7.4.1, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit # select name from rta_tables; name ------------- rta_tables rta_columns rta_dbg rta_stat mytable UIConns (6 rows)
Bir veritaban�na ba�l�ym��s�n�z gibi g�r�nmenize ra�men asl�nda ba�l� de�ilsiniz. Unutmay�n: Kullanabilece�iniz iki komut SELECT ve UPDATE'dir.
Kullan�c� aray�z� programlar�n� artalan s�recinden ay�rman�n avantaj�, geni� dizayn, kodlama, hata ay�klama ve yap�labilik kategorlerine girer.
Dizayn a��s�ndan bakarsak, bu ayr�m, aray�z�n nas�l g�sterilece�ini dert etmeden, dizayna en ba��nda karar vermeye zorlar. Tablolar�n dizayn�n� d���nme a�amas�, uygulaman�z�n ger�ek dizayn�n� d���nmeye zorlar. Tablolar, uygulaman�z�n i� i�levsel �zelliklerini �ekillendirir.
Kullan�c� aray�z� ve artalan s�re�lerinin ayr�m�, kullan�c� aray�z� uzmanlar�n� ve artalan uzmanlar�n� ayr� ayr� i�e alabilirsiniz ve bu ki�iler kodlar�n� ba��ms�z olarak yazarlar ve daha sonra bu kodlar pazarlama i�in hemen birle�tirilebilirler, demektir. PHP, Tcl/Tk, Perl ve C i�in Postgres ba�lant�lar� oldu�undan, i�iniz i�in uygun olan�n� se�ersiniz.
Hata ay�klama daha kolay ve daha h�zl� olur ��nk� her iki taraf da di�erini kolayl�kla sim�le edebilir. �rne�in, aray�z m�hendisleri, porgramlar�n�, ayn� tablo izinlerine sahip ger�ek bir Postregs veritaban�yla �al��t�rabilirler. Artalan s�recini test etmek daha kolay ve daha eksizdir ��nk� bir aray�z�n yapt�klar�n� yapan betik yazmak kolayd�r. Ve bir test �al���rken, i� durumu ve istatistikleri kontrol etmek kolayd�r. Bir i� durumu ya da �art� zorlayabilmek, u� durumlar� test etmeye yard�mc� olur. Laboratuar ortam�nda b�yle durumlar� test etmek genelde zordur.
�r�n�n�z�n yeteneklerini, �AE ile geni�letebilirsiniz. M��teriniz , program �al���rken, ayr�nt�l� durum raporunu ve istatikleri g�rebilmeyi ger�ekten taktir edecektir. Kullan�c� aray�z� ile artalan program�n� ay�rmak, birden fazla aray�z�n�n olabilir, demektir: SNMP, comut sat�r�, web, LDAP vs. Bu esneklik, e�er m��teriniz iste�e ba�l� aray�zler isterse �ok �nemli olacakt�r.
�AE, bu tip bir paket i�inde olamas�n� isteyebilece�iniz bir �ok �zellik sunar:
Bu makalede �AE k�t�phanelerine ve yeteneklerine k�sa bir giri� yap�ld�. �AE anasayfas�, SSS ve API'nin tam bir tan�t�m�n� ve bir�ok �rnek istemci program�n� i�erir.
�AE sizin veri yap�lar�n�z� bir veritaban�nda tablolar olarak olarak g�sterebildi�i gibi, sanal dosya sistemindeki dosyalar olarak da g�sterebilir ( Miklos Szeredi'nin yazd��� Kullan�c� alan�nda Dosya Sistemi (FUSE) paketi). �AE anasayfas�, dosya sisteminin nas�l kullan�laca�� hakk�nda fazlas�yla bilgi i�ermektedir.
|
G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Bob Smith , FDL LinuxFocus.org |
�eviri bilgisi:
|
2004-06-26, generated by lfparser version 2.46