Bevezet Adat és információ • Egész életünk a másokkal való kommunikáció, vagyis az ismeretek cseréje határozza meg. • Az adat és az információ fogalmak az ismeret rokonai. • Az adatkezelés és adatfeldolgozás szolgáltatás. Ezt a szolgálatot a szakemberek csak úgy tudják mindenki megelégedésére ellátni, ha az ismeretet nem a számítógép, hanem az ember oldaláról nézik. • Az adat szó a latin datum szóból ered, jelentése „adomány”, „ajándék”, egyébként „adottat” jelent, többes számban „data” vagyis „adottak”, az adott dolgok. • Az IBM adatfeldolgozási szótárában: „Az adat tények, fogalmak olyan formalizált reprezentációja (megjelenítése), amely alkalmas az emberi vagy automatikus eszközök által történ kommunikációra, értelmezésre vagy feldolgozásra.”
Az adatbázis lényege Állománykezel k
• Az ismeretkezelés egyik lehet sége, hogy adatállományokat hozunk létre. Az „állomány” megjelölés azt mutatja, hogy nem egyedi dolgokról, hanem egymással valamilyen szempontból összetartozó ismeretek együttesér l van szó. • Az „adat” jelz az ismeretkezelés módjára utal, és megkülönbözteti az ilyen állományokat a program-, rendszer-, szöveg-, képállományoktól. • állománykezel k (file management system) rendszerek, amelyek az állományok egymástól független kezelésére használatosak. • A felhasználói program tartalmazza az adatok szerkezetének a leírását. Ha például új mez t szúrunk be egy állományba, minden felhasználói programot módosítanunk kell, mely az illet állománnyal dolgozik.
Program 1 Állomány 1
Program 2 Adat leírás
Állomány 2
Program 3 Adat leírás
Állomány 3
ábra: Hagyományos állománykezelés
Ismétl d adatok
Adat leírás
példa: Lássunk egy rosszul szerkesztett állományt: Cím Farkas utca Kertész utca Farkas utca Kertész utca
Név Mária Tamás Mária Tamás
Szín fehér fehér piros zöld
Típus Opel Astra Opel Astra VW Polo VW Polo
Fér hely ötszemélyes ötszemélyes négyszemélyes négyszemélyes
• ismeret ismétlés (redundancia): • feleslegesen fogyasztja a tárolót • adatbeviteli, -módosítási és -törlési er forrás-pazarlással jár • inkonzistencia lép fel. • Ha Mária lakóhelyére vagyunk kíváncsiak, miért kellene átböngésszük a kocsijait is?
A kocsi ismeretek ésszer elrendezése: Tulajdonos Név Cím Mária Farkas utca Tamás Kertész utca Típus Opel Astra Opel Astra VW Polo VW Polo
Kocsi Szín fehér fehér piros zöld
Név Mária Tamás Mária Tamás
Kocsitípus Típus Fér hely Opel Astra 5 személy VW Polo 4 személy
Kapcsolatok: Tulajdonos – Kocsi a Név-en keresztül Kocsitípus – Kocsi a Típuson át • Els ránézésre bonyolultabb, de nincs redundancia, inkonzisztencia.
• az állománykezel k esetén több állományt tervezünk és az azokban tárolt ismereteket egy programmal kezeljük. Azonban az állományközti összefüggéseket nem tudjuk el re meghatározni. Ezekre a viszonyokra a programjainkban nem tudunk hivatkozni. • az adatbázisszer adatkezelésben az állományok közötti általános logikai összefüggések absztrakt képét el re meg kell határoznunk. Ezek után a konkrét ismereteket az el bbi képnek megfelel en kell kezelnünk. • az adatbázis-kezel rendszer (ABKR) ezt nemcsak lehet vé teszi, hanem ki is kényszeríti. A programozó nem a saját ízlése szerint, hanem az el re megadott (pl: Kocsitípus – Kocsi) viszonynak megfelel en kell kezelje az ismereteket.
Adatbázis értelmezése
Adatbázis: adatok gy jteménye (összessége), melyek egy szervezet/cég tevékenységére vonatkoznak. példa:egy egyetem tevékenységét tároló adatbázis • Egyedek: diákok, karok, el adások, termek, tanárok stb.; • Kapcsolatok az egyedek között: melyik diák milyen el adást választ; egy karon tartott el adások; melyik tanár milyen el adást tart; termek használata. példa:egy kereskedelmi cég adatait tároljó adatbázis • Egyedek: szállítók, árucsoportok, áruk, vev k, rendelések; • Kapcsolatok egyedek között: mely szállító milyen árukat ajánl, egy áru melyik árucsoporthoz tartozik, egy vev rendelései, egy rendelés összes áruja stb.
Adatbázis-kezel rendszer értelmezése Adatbázis-kezel rendszer (ABKR): egy programrendszer (soft), melyet arra terveztek, hogy nagy mennyiség adatot tudjon tárolni és használni. Egy ABKR által használt technikák: • programozási nyelvek (objektum-orientáltságot is) • operációs rendszerek • konkurens programozás • adatstruktúrák • algoritmusok • párhuzamos és osztott rendszerek • felhasználói felületek, • mesterséges intelligencia • statisztika.
E kurzus célja válaszolni a következ kérdésekre: • Hogyan tud a felhasználó leírni egy létez szervezetet/céget az ABKRben tárolt adatok segítségével? Hogyan szervezze az adatokat? • Hogyan tud a felhasználó válaszolni a kérdésekre a céggel kapcsolatban, felhasználva az adatbázisban tárolt adatokat? • Hogyan tud az ABKR több felhasználóval egyidej leg dolgozni? Hogyan védi az adatokat esetleges rendszerhibák esetén? • Hogyan tárolja az ABKR a nagy mennyiség adatokat. Hogyan tud hatékonyan válaszolni a lekérdezésekre? Ahhoz, hogy hatékonyan tudjuk az ABKR–t használni meg kell értsük, hogyan dolgozik.
ABKR versus Állománykezel rendszer: Cég adatelemei: részlegek, alkalmazottak, termékek, eladási szerz dések, anyagbeszerzés, termelési folyamat, bankügyletek, könyvelés stb. • Konkurensen több felhasználó kell hozzáférjen. • Nem minden felhasználó láthat minden adatot (pl. fizetés, könyvelés). • lekérdezésekre gyorsan kell válaszolni. • A különböz felhasználók által végzett változtatásokat az adatokon mindenhonnan látni kell.
Operációs rendszer által nyújtott file-kezelés segítségével problémák (saját magunknak kell elboldogulni): • az állományok kb. 500 GB-ot foglalnak. • háttértárolón kell tároljuk a rengeteg adatot és azt a részét behozni a memóriába, amelyre épp szükség van; • operációs rendszer csak jelszó segítségével tud valamennyi védelmet nyújtani, de ez nem megfelel , mikor különböz felhasználók az adatok különböz részeihez férhetnek hozzá; • speciális programokat kell írjunk, hogy minden lehetséges lekérdezésre választ adjunk. Ezek elég összetettek, mert nagy mennyiség adatot kell végigjárjanak; • meg kell védjük az adatokat a helytelen változtatásoktól (többen férnek hozzá, rendszerhiba). Így még komplexebbek lesznek a programjaink; • rendszerhiba után az adatbázis egy helyes állapotát kell visszaállítani; ez a mi feladatunk.
Adatbázisok ANSI/SPARC architekturája • Az adatbázisszer ismeretkezelésben megkülönböztetjük az adatbázis általános elvi felépítését (absztrakt kép) és az abban rzött aktuális ismereteket (konkrét tartalom). Az adatbázis általános struktúráját adatmodellnek nevezzük. • A számítógép, amely bitekkel dolgozik és a felhasználó, aki egyedtípusokkal dolgozik (Személyek, Bankszámlák, Kocsik stb.) között több elvonatkoztatási szint lehetséges. Egy elfogadott néz pont az ANSI/SPARC architektúra, mely 3 szintet különböztet meg: fogalmi, bels és küls szint.
• 1-es felhasználó csoport:
Nézet 1
2-es felhasználó csoport:
Nézet 2
n. felhasználó csoport:
Nézet n
Fogalmi adatbázis
ábra: ANSI/SPARC architektúra
Fizikai adatbázis
Adatbázis tervezés esetén a fogalmi szintet (angolul: conceptual level) kell el ször megterveznünk. • Ezen a szinten egy alkalmazási környezet valamennyi ismeretét és azok valamennyi összefüggését egyetlen közös adatmodellben kell leírnunk. • Ez a reprezentáció független az adatbázis-kezel rendszer típusától és az a mögött álló „filozófiától”. • Általában az egyed/kapcsolat adatmodellt használják a fogalmi szint megtervezésére. • Példa: egy kereskedelmi vagy termelési cégnek akarjuk az adatfeldolgozását számítógépen megvalósítani, el ször meg kell tervezzük a cég összes adatának és az azok közötti kapcsolatokat tükröz általános, közös adatmodellt.
A bels szint a fizikai adatbázisra hivatkozik. • a fizikai adatázist az állományok összessége és a hozzájuk tartozó indexállományok alkotják. • az adatok a fogalmi szinten megadott szerkezet szerint állományokban vannak tárolva • az indexállományok az adatokhoz való hatékony hozzáférést segítik. • a fizikai adatbázis a háttértárolón van. • egy ABKR több fizikai adatbázist is képes kezelni.
A harmadik a küls szint (angolul: external level). Minden fogalmi szint adatbázisnak több felhasználója van. • Az egyes felhasználók az adatbázis különböz részleteiben érdekeltek. • A „küls ” jelz t az indokolja, hogy a felhasználók egyike sem tudja, hogy belül a számítógépen milyen az adatok szerkezete. • Az adatmodellnek a felhasználó által kezelésre kiválasztott részét nézetnek (angolul: view) nevezzük. • A nézetnek levezethet nek kell lennie a fogalmi szinten megtervezett adatmodellb l. • A nézetek fontosak az adatvédelem szempontjából, egy bizonyos felhasználócsoportnak csak bizonyos nézetekre van joga.
példa: a fogalmi, fizikai és küls szint közötti különbségre, a tömböket a programozásból: fogalmi szinten a tömböt leírhatjuk: integer array A[1..n,1..m] fizikai szinten a sort úgy látjuk, mint egymás utáni memória lokációkat a következ szabály szerint: A[i, j] az a0+4[m(i-1)+j–1]; egy nézete az A tömbnek az f(i) függvény, amely az A[i, j] elemek összege j=1-t l m-ig. Így nem a sorokat látjuk, hanem csak a sorok összegét.
példa: Egy repül társaság adatbázisa • alkalmazottakra vonatkozó ismereteket (melyik pilóta milyen képesítéssel rendelkezik, mennyi a fizetése stb.), • repül terekre vonatkozó ismereteket, • repül gépeket (minden repül esetén a típusát, állapotát stb.), • járatok • repül jegyek példa nézetre • a repül jegyek eladása felhasználó csoport csak a járatokra, helyekre, jegyekre vonatkozó ismeretekhez kell hozzáférnie. • az irányítótoronynak más ismeretekre van szüksége, ez már egy más nézet. • a repül ket karbantartó felhasználó csoport a repül k technikai jellemvonásaira, repül kön végzett javításokra kíváncsi, ezekre az információkra a repül jegyek eladása felhasználó csoportnak nincs joga
A szintek megfeleltetése, modellek, sémák • A fogalmi, fizikai és küls szintek között az ABKR teremt kapcsolatot. • Amikor a felhasználó megadja az igényét (küls szint), azt az adatbázis-kezel rendszer leképezi az általános képre (fogalmi szint), hogy megvizsgálja a kérdés teljesíthet ségét és behatárolja az adatbázis érintett részeit. • Amikor pedig tényleges kezelésre kerül sor, akkor az adatmodell vonatkozó elemeit leképezi a tárolási szerkezetre • • el ször megtervezzük az adatbázist • feltöltjük adatokkal • majd lekérjük a tárolt adatokat (lekérdezzük)
• • •
az adatbázisban tárolt adatok állandóan változnak az adatbázis terve viszont változatlan marad, amíg az adatbázis létezik.
Az adatbázis tervében le kell írnunk: • a használt egyedek típusát, • ezen egyedek közötti kapcsolatokat.
A tervet az adatbázisok esetében sémának fogjuk nevezni. • fogalmi sémát használunk a fogalmi adatbázis tervének, • fizikai adatbázis tervét fizikai sémának nevezzük. • a küls szinten több alsémát is értelmezünk a különböz felhasználó csoportoknak.
Példa: • Az A tömb fizikai sémája az, hogy a tömb az a0 memórialokációtól kezd d en van tárolva és A[i, j] az a0+4[m(i-1)+j-1] cím memória lokációban van. • A fogalmi séma az integer array A[1..n,1..m], vagyis, hogy A egy egész elemekb l álló tömb, melynek n sora és m oszlopa van. •
Egy alséma az f függvény értelmezése: f (i ) =
m
j =1
A[i, j ]
Adatfüggetlenség fizikai adatfüggetlenség • a fizikai séma megváltoztatható anélkül, hogy meg kellene változtatni a fogalmi sémát vagy újraértelmezni az alsémákat • a fizikai adatbázis megváltoztatása növelheti a felhasználó programok hatékonyságát, de nincs szükség változtatásra a programokban • példa: fizikai adatfüggetlenség, ha a tömb ábrázolását a memóriában megváltoztatjuk, mondjuk a sor szerinti ábrázolásból az oszlop szerinti ábrázolásba logikai adatfüggetlenség • a nézetek és a fogalmi szint közötti adatfüggetlenség. • ha a fogalmi szinten történ változtatás nem hat ki a kezel programokra. • újabb információkkal kell b víteni. • információk törlése, maga után vonhatja a programok változtatását, ha a törölt információ jelen van valamely nézetben.
ANSI/SPARC architektúra a funkcionalitás szempontjából • négyszögek - feldolgozási funkciókat jelölnek • hatszögek - adminisztrációs szerepet • nyílak jelölik az adatok és parancsok áramlását, a rajtuk lev „I” alakú vonalak pedig az interfészeket. • Adatszótár/katalógus (háromszögként), amely egy metaadat. • tartalmazza a séma és a leképezés definícióját. • használati statisztikákat, • hozzáférést vezérl információkat. Adminisztrátori szerepek • cég adminisztrátor • applikáció adminisztrátor • adatbázis adminisztrátor
• cég adminisztrátor- a fogalmi séma definíciója. • applikáció adminisztrátor felel s a küls sémáknak az el készítéséért az alkalmazások, az applikáció programozó számára. • adatbázis adminisztrátor feladatai: fizikai séma tervezése: táblák szerkezete, táblák közötti kapcsolatok, táblák tárolásának részletei, indexállományok tervezése, azok típusának a meghatározása. biztonság és hozzáférési jogok meghatározása adatok elérhet sége, helyreállítás hiba esetén, az ABKR ad erre függvényeket bizonyos id intervallumokban másolatokat készítsen az adatokról.
• applikáció (alkalmazás) programozó • rendszer programozó • alkalmi felhasználók id nként hozzáférnek az adatbázishoz, hogy visszakeressenek információkat és valószín leg, adatkezelési m veleket is végeznek. Ezeknek a felhasználóknak segítségül szolgálnak a küls séma definíciók, illetve a könnyen használható lekérdez nyelvek. • vég felhasználóknak általában nincs adatbázis ismeretük és az információkhoz az adatbázis applikációkon keresztül férnek hozzá.
Cég adminisztrátor
Adatbázis adminisztrátor
Fogalmi adatbázis séma processzor
Bels adatbázis séma processzor
Bels tárolás/bels adatbázis átalakítás
Bels adatbázis applikáció program
Applikáció/ Rendszer programozó
Applikáció rendszer adminisztrátor
Küls adatbázis séma processzor
Bels adatbázis/ fogalmi átalakítás
Fogalmi/ küls adatbázis átalakítás
Küls adatbázis applikáció program
Applikáció programozó
Az ABKR-ek el nyei • Adatfüggetlenség – a felhasználói programok függetlenek az adatok ábrázolásától és tárolásától. Az ABKR egy absztrakt nézetet (képet) ad az adatokról. • Hatékony hozzáférés az adatokhoz – az ABKR-ek komplex technikákat használnak ennek érdekében. • Adatok helyességére vonatkozó megszorítások és biztonság – Például miel tt egy új alkalmazott fizetését vezeti be, ellen rzi, hogy befér-e még a költségvetésbe. Az ABKR minden felhasználó minden hozzáférése esetén ellen rzi a felhasználó jogait a kért adatokra. • Adminisztráció – szükség van egy központosított adminisztrációra, egy-két emberre, aki profi és átlátja az egész rendszert. • Konkurens hozzáférés és visszaállítás hiba esetén • Megrövidül az alkalmazás elkészítésének ideje (report writer, lekérdezés optimalizáló, interface generáló).
Relációs ABKR-ekkel felmerül problémák: • A napjainkban legelterjedtebb relációs ABKR-ek nem tudnak komplex adatokkal dolgozni, amelyek szükségesek például mérnöki alkalmazások (CAD/CAM rendszerek), földrajzi alkalmazások stb. Az objektumorientált, illetve az objektumrelációs adatmodell a megoldás ezen alkalmazások esetében • Az ABKR-ek általában nagyon drágák, kicsi cégek nem tudják megvásárolni. • Az ABKR-ek programozása nehézkes és a beállításai nagyon komplexek.
Adatbázis-kezel rendszerek képességei Tulajdonságok amelyek megkülönböztetik más programrendszerekt l: • Azon képessége, hogy állandóan létez adatokat tud kezelni. • Azon képessége, hogy hatékonyan tud kezelni nagyon nagy mennyiség adatot. (ellentétben az állománykezel rendszerekkel) További tulajdonságok: • Egy adatmodellre épül, melynek segítségével a felhasználó megtervezheti az adatbázist, ugyanakkor segít a felhasználónak abban, hogy az adatot ne csak bitek sorozataként lássa, hanem érthet bb formában. • Magas szint programozási nyelvekkel rendelkezik az adatok szerkezetének a leírására, adatkezelésre és lekérdezésre. • Egyidej leg több felhasználó között megosztja az adatbázist, ellen rzi a hozzáférési jogokat. • Rendszerhibák esetén képes egy helyes adatbázist visszaállítani.
Adatbázisok nyelvei • a programozási nyelvekben az adatok leírása és az utasítások a programon belül ugyanabban a nyelvben történik • az adatbázisok világában szétválasztják az adatbázis leírását annak különböz funkciójának a programozásától • különbség a következ : míg egy mindennapi programban az adat is csak addig létezik, amíg a program fut, az adatbázis rendszerekben az adat állandóan létezik, egyszer lehet deklarálni és azontúl mindig létezik. • a munka is megvan osztva speciális adatbázis nyelvek és egy „ gazda” nyelv között.
Adatleíró nyelvek (Data Definition Language) • nem procedurális, egy jelölés az egyedek és a köztük lév kapcsolatok leírására az illet adatmodellen belül. példa: Relációs adatmodell esetén az SQL nyelv adatleíró nyelve: CREATE
TABLE Csoportok ( CsopKod CHAR(3) PRIMARY KEY, Evfolyam INT, SzakKod CHAR(3)
); CREATE TABLE Diákok ( BeiktatásiSzám INT PRIMARY KEY, Név VARCHAR(50), Cím VARCHAR(100), SzületésiDatum DATE, CsopKod CHAR(3) REFERENCES Csoportok (CsopKod), Átlag REAL ); CREATE INDEX CsopIndexDiák ON Diákok (CsopKod);
Alséma adatleíró nyelv •
hasonló az adatleíró nyelvhez. példa: Nézetek leírása SQL nyelvben: CREATE VIEW MagyarDiákok AS (SELECT Nev, CsopKod FROM Diákok WHERE CsopKod IN ( SELECT CsopKod FROM Csoportok WHERE SzakKod = ’IM’ OR SzakKod = ’MM’ OR SzakKod = ’MIM’ ) )
A nézetek értelmezése is bekerül az adatbázis sémába.
Adatkezel nyelvek (Data Manipulation Language) M veletek az adatbázisban tárolt adatokkal: • Olvasd ki az adatbázisból az ’531’-es csoport diákjait. SELECT Név FROM Diákok WHERE CsopKod = ’531’
•
Módosítsd ' Szabó János'címét ' Kolozsvár, Bolyai utca 2' -re.
•
Számítsd ki a harmadéves informatikusok átlagát.
UPDATE Diákok SET Cím = ’Kolozsvár, Bolyai utca 2’ WHERE Név = ’Szabó János’
SELECT AVG(Átlag) FROM Diákok WHERE CsopKod IN (SELECT CsopKod FROM Csoportok WHERE (SzakKod = ’IM’ OR SzakKod = ’IR’ OR SzakKod = ’IE’) AND Evfolyam = 3)
• Vezess fel új diákot az 511-es csoportba, neve: ' Kovács István' , címe: ' Marosvásárhely, Pet fi utca 3' , beiktatási száma: 56431, születési dátuma: 1982-dec-10. INSERT INTO Diákok VALUES (56431, ’Kovács István’, 'Marosvásárhely, Pet fi utca 3', ’1982-DEC-10’,’511’, 8.6)
• „ gazda” nyelv - komplexebb feladatok is meg kell oldani, ezért szükség van egy programozási nyelvre (lehet C, Delphi, MS Visual Basic, Java, VB.NET, C#, COBOL, stb…).
•
a gazda nyelvb l meghívhatók az adatkezel nyelv m veletei;
Public Function ListBetu(ByVal sEgyBetu As String, ByRef iError As Integer) As ADODB.Recordset Dim sSQL As String Dim rsAruk As ADODB.Recordset sSQL = "Select AruKod, Nev from Aruk where Nev LIKE '" & sEgyBetu & "%'" If GetReadOnlyRecordset(sSQL, rsAruk) Then Set ListBetu = rsAruk iError = 0 Else iError = iGETRECSETERROR Set ListBetu = Nothing End If End Function
• adatbázis szintjén írhatunk tárolt eljárasokat, melyek feladata több adatkezel m velet végrehajtása.
procedure SzallithatoAru( pDatum IN DATE, eredmeny out ret_cursor) IS MyCursor ret_cursor; vAruKod number(10); vR_SzMenny float; vMennyRakt float; tovabb boolean; Begin open MyCursor for select arukod, sum(rendmenny - szallmenny) as rendminusszal from tartalmaz where szallitasidatum <= pDatum and rendmenny > szallmenny group by arukod; tovabb:=true; fetch MyCursor into vAruKod, vR_SzMenny; while NOT MyCursor%notfound loop VMennyRakt:=0;
select MennyRakt into vMennyRakt from Aruk where AruKod = vAruKod; IF VMennyRakt > 0 THEN IF VMennyRakt > vR_SzMenny THEN INSERT INTO SzallithatoAru_temp VALUES (vAruKod, vR_SzMenny); ELSE INSERT INTO SzallithatoAru_temp VALUES (vAruKod, VMennyRakt); END IF; END IF; fetch MyCursor into vAruKod, vR_SzMenny; end loop; close MyCursor; open eredmeny for select * from SzallithatoAru_temp; delete from SzallithatoAru_temp; end SzallithatoAru;
Felhasználói lekérdezés
Alkalmazói program
! "
#
ábra: Az ABKR felépítése
Adatbázis séma módosítás
Adatbázis-kezel rendszerek f bb részei • adatleíró nyelv kompilátor: beolvassa az adatbázis sémáját, elemzi, ha helyes, elkészíti az adatbázist leíró táblázatokat. • lekérdez nyelv processzor: elemzi a felhasználói lekérdezést és az alkalmazói programot. Az feladata ezen kérések optimalizálása is. • adatbázis-kezel fogalmi szinten kezeli a parancsokat és átalakítja fizikai szint parancsokká. • adatbázis-kezel átalakítja a kapott parancsokat állományokon való m veletekké, és ezeket átadja az állománykezel nek. • az állománykezel lehet az operációs rendszer standard állománykezel je, vagy az ABKR saját állománykezel je.
Hogyan valósítják meg az indexeket • adatstruktúra az indexállományok készítésénél a B-fa, ahol a B a kiegyensúlyozottságra utal (Balanced − kiegyensúlyozott). • B-fa a kiegyensúlyozott bináris keres fa általánosítása. Míg a bináris fa csomópontjának csak legfeljebb 2 gyermeke lehet, a B-fa csomópontjainak sok gyermeke is lehet. • a B-fákat a lemezen tárolja a rendszer és nem a memóriában, ezeket úgy tervezik, hogy egy csomópont egy teljes lemezblokkot elfoglaljon. • a legtöbb rendszer 4096 bájt méret blokkot használ, ezért a B-fa egy csomópontjában több száz gyermekre mutató pointer is lehet. Így a B-fában való keresés ritkán mélyebb három szintnél. • a lemezm veletek költsége általában arányos az elért lemezblokkok számával. • a B-fában való keresés, amelyik legtöbbször csak három lemezblokk elérését igényli, sokkal hatékonyabb, mint amilyen a bináris fában való keresés.