- p�edchoz� �l�nek - n�sleduj�c� �l�nek - obsah - �vodn� str�nka -

Linuxov� noviny 07/98

Jak jsme p�esouvali Interbase z NT na Linux

Daniel Prynych, 8. �ervence 1998

Ned�vno firma Interbase kone�n� uvolnila sv�j hlavn� produkt - SQL datab�zi Interbase (d�le jen IB) - pro Linux. Jde o verzi 4.0 pro Red Hat Linux 4.2 a byla d�na voln� k dispozici ve variant� pro neomezen� po�et u�ivatel�. Proto�e jsme IB ji� asi rok provozovali (ve verzi pro Microsoft Windows NT Server 4.0), bylo rozhodnuto p�ej�t na verzi pro Linux, kter� jsme ji� pou��vali jako souborov� (Samba) a tiskov� server a to tak� proto, �e s Windows NT jsme nebyli zcela spokojeni.

IB jsme pou��vali pro tvorbu kusovn�ku. Kusovn�k je zjednodu�en� �e�eno seznam v�ech d�l� pro v�robu stroje. Pro ka�d� stroj existuje tabulka variant a ka�d� sou��st m��e existovat v n�kolika variant�ch. V�echny varianty dan� sou��sti maj� spole�nou hlavi�ku, kter� obsahuje z�kladn� informace jako je ��slo d�lu, jeho n�zev atd. Ka�d� varianta obsahuje �daje specifick� pro danou sou��st a jej� variantu jako je ��slo v�kresu, �SN, rozm�ry, v�ha atd. Jinak je mo�no pou��vat kusovn�k i strukturovan�, to znamen�, �e pod ka�dou sou��sti le�� dal�� sou��sti, n�co jako stromov� struktura adres��e. Jak je vid�t, bylo nutno vytvo�it n�kolik tabulek, kter� jsou spolu navz�jem sv�z�ny. Z�pis se prov�d� jak do jedn� tabulky, tak i do n�kolika najednou a v tomto p��pad� se mus� prov�st bu� do v�ech najednou nebo ani do jedn�. To bylo jen mal� odbo�en� a te� zp�tky k IB.

Pou�ili jsme technologii klient/server, p�i�em� klientsk� programy m�me naps�ny v Delphi 2@. Proto m�la vzniknout tato sestava: jako server bude pracovat IB na Linuxu a klientsk� programy pob�� pod Windows 95 a Windows NT a s IB budou komunikovat za pomoci SQL-Links protokolem TCP/IP.

P�echod z IB na Windows NT na IB na Linuxu nebyl �pln� jednoduch�, a to hlavn� proto, �e s touto konfigurac� nebyly u n�s je�t� zku�enosti. P�ech�zelo se za pln�ho provozu, ale nakonec byly v�echny probl�my vy�e�eny.

Nejprve byly prov�d�ny testy IB na RedHatu 4.2 (d�le jen RH), pro kter� je IB certifikov�na, a RH 5.0 na r�zn�ch po��ta��ch. Samotn� IB na obou syst�mech pracovala bez probl�m�, byly pou�ity tyto konfigurace: AMD486/100 48MB, co� je pod doporu�enou hranic�, Pentium 130 64 MB a 2x Pentium Pro 180 128MB. Zkou�ky byly prov�d�ny s dod�van�m front-end programem isql a to jak ze syst�mu, na kter�m b�ela IB, tak i z vedlej��ch po��ta�� programem isql. Pot� byla za pomoci gbak datab�ze na NT zaz�lohov�na, p�esunuta na Linux a rekonstruov�na.

Tento postup je nutno dodr�et, v�hodou je i to, �e se z datab�ze odstran� nepou��van� data a polo�ky se srovnaj� za sebe, co� se projev� i na rychlosti. P�i pou��v�n� programu isql je zaj�mav�, �e pokud se p�ihl�s�m jako ROOT, m�m automaticky p��stupov� pr�va u�ivatele SYSDBA, (jedn� se o u�ivatele definovan� v IB, s u�ivateli v Linuxu nemaj� nic spole�n�ho), mohu tedy s datab�z� prov�d�t v�echny operace jako bych byl jej� vlastn�k. Tento p��stup se mn� osobn� moc nel�b�, neumo��uje toti� d�sledn� odd�lit funkce spr�vce syst�mu a spr�vce datab�ze. Jako dal�� test byl sestaven v Delphi jednoduch� program, kter� v cyklu prohl��el jednu z tabulek datab�ze. Jednalo se o cen�k obsahuj�c� asi 40 000 ��dek a 15 sloupc� zahrnuj�c�ch jak �et�zce znak�, tak celo��seln� polo�ky a re�ln� ��sla. SQL p��kaz byl postaven tak, �e se vliv index� prakticky neprojevil. Tento program byl spu�t�n na t�ech po��ta��ch - dva Win95 a jeden WinNT 4.0 - a to na ka�d�m t�ikr�t. IB tentokr�t b�ela pod RH 4.2 na AMD 486/100, p�esto zvl�dla zpracov�vat neust�le dev�t dotaz� najednou. Rychlost sice nebyla velk�, ale to se v t�to konfiguraci ani nedalo o�ek�vat.

D�le jsem pokra�oval naps�n�m programu v C, kter� bral data z textov�ho souboru a na jejich z�klad� opravoval a dopl�oval v��e zm�n�n� cen�k. SQL p��kazy jsem psal p��mo do zdrojov�ho textu a k jejich p�evodu na API IB funkce jsem pou�il dod�van� preprocesor gpre. P�i tvorb� t�chto program� je nutno p��kaz SET DATABASE um�stit na za��tek programu, gpre je patrn� jednopr�chodov� preprocesor a jako prvn� mus� zn�t jm�no datab�ze, aby mohl prohl�dnout definice tabulek, nem��eme ho tedy pou��t pro p�eklad programu, kter� pracuje s datab�z�, ke kter� moment�ln� nem�me p��stup. Pro tento p��pad mus�me pou��t p��mo p��kazy API IB. Ka�d�(�) p��kaz(y) je nutno um�stit do transakce nap�.

SET TRANSACTION
   SELECT COUNT (JK) INTO :pocet WHERE JK = :jk
COMMIT

Pro bli��� vysv�tlen� doporu�uji nahl�dnout do dod�van� dokumentace, a nedejte se odradit t�m, �e je zde prob�r�no IB API pro Windows. P�eklad na RH 5.0 je tro�ku odli�n� od RH 4.2 - nem��eme pou��t

  gcc n�co.c -lgdslib -ldl -lcrypt

p�eklada� za�ne m�t n�mitky

ld:warning: libdl.so.1, needed by\
   /usr/lib/libgdslib.so,\
   may conflict with libdl.so.2

Mus�me p�elo�it za pomoc� knihovny pipe.

  gcc n�co.c -lgds -ldl

Rozd�l je v tom, �e v druh�m p��pad� je nav�c spu�t�n proces gds_pipe, kter� pracuje jako prost�edn�k mezi programem a IB.

Na stran� klienta bylo nutno prov�st upgrade BDE na verzi 4.51 a bylo nutno upravit ��st programu v Delphi 2, proto�e p�i pou�it� v�t��ho po�tu query - v na�em p��pad� asi 15 - a znovuobnoven� dat prov�d�n� p��kazy query.close; query.open; do�lo ke ztr�t� spojen� s datab�z�. Nahrazen�m query.close p��kazem database.closedataset v kritick�ch ��stech byly probl�my odstran�ny. Zaj�mav� je, �e p�i pou�it� protokolu NetBEUI k tomuto probl�mu nedoch�zelo.

Nyn� u� mohla b�t IB definitivn� nainstalov�na na RH 4.2 b��c� na 2x Pentium Pro 180 s 128MB pam�ti. Samotn� data s�dl� na dvou SCSI 2MB disc�ch. Nepou��v�me zrcadlen� disk�, ale vyu��v�me mo�nosti IB, kter� um� zrcadlit data. Jedenkr�t za den je pomoc� gbak provedeno z�lohovan� dat s t�denn� rotac� a je spou�t�n program, kter� dopl�uje a opravuje �daje v cen�ku. Zaj�mav� je, �e tento program p�vodn� napsan� v Delphi a b��c� na WinNT a komunikuj�c� s IB pomoc� DBE zpracov�val data asi 1 hodinu. Prakticky stejn� program psan� v C a pou��vaj�c� API IB pracuje asi 5 minut. Vzhledem k tomu �e v sou�asn� dob� p�istupuj� k dat�m �ty�i klientsk� po��ta�e po celou pracovn� dobu a t�i dal�� jen ob�as, je server zat��en jen velmi m�lo. Pokud porovn�me rychlost IB na NT a na Linuxu, t�m mysl�m rychlost odezev pro klientsk� programy, zd� se prakticky stejn�. IB z�rove� b�� na druh�m po��ta�i, kde slou�� jako testovac� datab�ze p�i oprav�ch program�. Celkov� mohu ��ci, �e nasazen� koncepce klient/server se n�m osv�d�ilo, klientsk� po��ta�e nezat�uj� server zobrazov�n�m dat a b�n�mi operacemi, obsluha je velmi snadn�, naproti tomu server dod�v� sv�j v�kon pro operace s datab�z� v�em klient�m a velmi snadno zaji��uje konzistenci dat.

Firma Interbase dod�v� pro Linux tak� modul pro komunikaci s Perlem. Na RH 5.0 ho bez �prav nep�elo��me. Mus�me postupovat takto:

  1. rozbal�me ibperl-0_5_tar.gz
  2. v souboru Makefile.PL a Makefile.a zm�n�me -lpgslib na -lpgs
  3. perl Makefile.PL
  4. make
  5. doporu�eno: nahradit na ��dc�ch INSTALL... /var/tmp/perl-root$(PREFIX)/lib/perl... za /usr/lib/perl...
  6. make install, pokud nahl�s� p�i instalaci chybu, je nutno prov�st p�edchoz� bod
  7. otestovat - perl test.pl nebo ./test.pl

Soubor IBPerl.pm by se m�l nach�zet v adres��i /usr/lib/perl5 a soubor IBPerl.so v adres��i perl5/site_perl/i386-linux/auto/IBPerl.

Co ��ci z�v�rem? IB je to, co Linuxu zat�m chyb�lo - a to velmi v�konn� SQL datab�ze s triggery a transakcemi, co� je dnes pro bezpe�n� aplikace nutnost, zvlṻ pokud se �asto m�n� a p�id�vaj� data. Na druh� stran� front-end isql nevynik� pr�v� p��v�tivou obsluhou, psql od konkuren�n�ho postgresql se mi zd� vy�e�eno l�pe. Co mi je�t� chyb�, je podpora IB v PHP. IB umo��uje Linux nyn� nasadit i v oblasti SQL server�, zvl�t� ve spojen� s Delphi. Jist�, je tu MySQL, ale to nem� transakce, Postgresql atd., ale IB je prost� o n��em jin�m, aspo� v sou�asn� dob� ur�it�. IB tak� umo��uje men��m program�torsk�m skupin�m a jednotlivc�m sn�ze vyv�jet aplikace klient/server, proto�e nyn� je mo�no si velmi snadno a relativn� lacino k v�vojov�mu syst�mu po��dit leg�ln� SQL server s b��c� IB, vlastn� jen za cenu "�eleza", a v�t�inu chyb a probl�m�, ke kter�m doch�z� p�i nasazen� u u�ivatele, odstranit u� p�i testech. *


- p�edchoz� �l�nek - n�sleduj�c� �l�nek - obsah - �vodn� str�nka -