Archívum

Archive for 2005. március

Az aktuális csúcstechnológia 5 év múlva már ócskavas lesz

2005. március 31. csütörtök Hozzászólások kikapcsolva

Az Intel elnöke Magyarországon járt.

És ez még semmi, figyi csak: "…az Intelnél öt generációval előre dolgoznak, és a húsz év múlva megjelenő processzorok kísérleti példányai már most rendelkezésre állnak, Barrett megnyugtatott mindenkit: 2025-ig biztosan tartható a Moore-törvény…"

Döbbenetes szavak ezek. Sose gondoltam volna.

A csúcstechnológia mögött mind inkább inkább üzlet van és ennek rendkívül örülök. Nem kell mást tenniük, mint 2-3 évente leemelni a polcról a már kész szuper-chipek valamelyikét, egy kicsit megmarketingelni, felfújni a dolgot, alátenni a puszipajtás Microsoft aktuális oprendszerét ezáltal örökösen izgalomban tartva az IT- piacot.

Fejlődés fejlesztés nélkül?
http://index.hu/tech/hardver/barrett05032/

Kategóriák:News and politics

A nyílt forráskód iránt rajongók üzleti érzéke

2005. március 31. csütörtök Hozzászólások kikapcsolva

A tekintélyes eWeek magazin jelen cikke szerint a nyílt forráskód  iránt rajongó emberekből gyakran igencsak hiányzik az üzleti érzék.

– "…némely nyílt forráskódú fejlesztő technikalilag kiemelkedő egyén, üzletileg azonban
  teljesen idióta tud lenni…"

– "Igen, úgy vélem a Firefox és Thunderbird jobb. És akkor mi van? Az üzlet nem arról szól,
  hogy most éppen melyik a legjobb program."

Így igaz, ezzekkel a megállapításokkal nem is nagyon bírnék vitába szállni. Mindössze annyit tennék hozzá, hogy nem csak a nyílt forráskód iránt áhítattal viselkedő faszagyerekekre igaz ám ez, hanem minden szűklátókörű, úgynevezett szakmai lózungokat hablatyoló programozókra is. Nagyon utálom ezektől az übermennerektől azt halani, hogy "kizárólag szakmai alapokon kell dönteni…".

Mecsoda baromság! Hölgyeim (vagy Uraim)! A világ nem szakmai, hanem gazdasági, pénzügyi alapokon nyugszik, mert a hatalom megszerzéséhez és megtartásához ezek szükségesek. Ha nincs üzlet, nincs pénz, nincs profit, hatalom meg végképp smafu. Az összes szakmai alapon gondolkodó, szűklátókörű, nyálfröcsögtető, szakmaialapondöntéshozó húzzon el a rákba. Előbb legyen pénz, aztán jöhet a szakma. Uff!

Blabla, unalmas mi?  De annak azért örülök, hogy a világ túlfelén is úgy gondolják, ahogy én.

Open-Source Fans Often Miss Business Basics
http://news.yahoo.com/news?tmpl=story&u=/zd/20050329/tc_zd/148614

Kategóriák:News and politics

SQL Teljesítményfokozás-II.

2005. március 24. csütörtök Hozzászólások kikapcsolva

Ebben a cikksorozatban igyekszem hasznos információkat adni azok részére, akik némi érdeklődést tanusítanak az adatbázis-kezelő rendszerek SQL-műveleteinek végrehajtási sebességével kapcsolatban (itt főleg a SELECT-re gondolok).

Az előző rész itt olvasható.

Akkor most következzen valami új.

Az állandó (konstans) értékek behelyettesítésének jelentősége

A tranzitivitás törvényének megfelelően szerint sok esetben alkalmazhatjuk az úgynevezett állandó értékek behelyettesítését. Nézzünk is rá mindjárt néhány példát.

  1/a. Példa:
    … WHERE column1 < column2
          AND column2 = column3
          AND column1 = 5

  1/b. Példa:
    … WHERE 5 < column2
          AND column2 = column3
          AND column1 = 5

      ELŐNY: 2/8

Az 1/b. kifejezést az 1/a. transzformáltjának nevezzük (átalakítottuk úgy, hogy az eredeti értelme nem változott meg). Rögtön látszik, hogy az állandó érték tranzitív behelyettesítése kapcsán a 8 adatbázis-kezelő rendszerből 2 esetén teljesítménynövekedés lépett fel (sajnos nem tudni melyik az a kettő).

Nézzünk egy másik példát.

  2/a. Példa:
     SELECT *
       FROM Table1
      WHERE column1 = 5
        AND NOT (column3 = 7 OR column1 = column2)

  2/b. Példa:
     SELECT * 
      FROM Table1
     WHERE column1 = 5
        AND column3 <> 7 
        AND column2 <> 5)

      ELŐNY: 5/8

Tehát az átalakított (de ugyanolyan értelmű) utasítás az esetek több, mint felében gyorsabban fut.

Megjegyzés: 
  – A tranzitivitás törvénye szerint, ha A = B és B = C, akkor A = C.
  – Az állandó-behelyettesítés az a folyamat, amikor valamilyen állandó értéket (konstans
    értéket) helyettesítünk a kifejezésbe.
  – Sajnos előfordulhat, hogy az állandó behelyettesítés nem alkalmazható lebegőpontos
    számokra. Erre mindig figyelni kell.
  – Emlékeztetőül a "nyolcak bandája": IBM-DB2, Informix, Ingres, InterBase, Microsoft SQL
    Server, MySQL, Oracle és Sybase. Jelen vizsgálatok ezeken a rendszereken lettek
    végrehajtva.
  – Az "ELŐNY" arányhányados azt jelenti, hogy a vizsgált 8 db. adatbázis-kezelőből mennyinél
    okozott teljesítménynövekedést a megmódosított SQL utasítás.

Folytatjuk…

Kategóriák:Databases

A tévedés lehetősége

2005. március 15. kedd Hozzászólások kikapcsolva

Ja igen, majd elfelejtettem…

Az itt olvasható tájékoztató, ismeretterjesztő írások többsége a saját tapasztalataimon vagy mások által közölt tényeken alapul. Mindazonáltal nem zárható ki részemről a jószándékú tévedés lehetősége sem, habár igyekszem mindennek NAGYON alaposan utána járni.

A magánvélemény az persze egészen más. Az a sajátom, és akit nem érdekel, hát… ne olvassa.

Mindazonáltal továbbra is fenntartom azt, hogy sajnos nem vagyok elég okos, viszont Cogito ergo sum…

putabout@hotmail.com

Kategóriák:Private

Márciusi könyvajánló

2005. március 15. kedd Hozzászólások kikapcsolva

Ebben a hónapban is néhány magyar nyelvű (igaz, hogy már régebben megjelent) könyvvel szeretnék kedves olvasóim elé rukkolni. Természetesen a magukat szakembernek képzelők számára ezek is kötelező olvasmányoknak tekinthetők. Mert, ahogyan Zokszigén javasolta: Olvasni NEM gyíkság!

1.
Gulutzan-Pelzer: SQL teljesítményfokozás (Kiskapu kiadó, 456 oldal)
Ez egy gyakorlati megoldásokat bemutató könyv olyan adatbázissal foglalkozó emberek számára, akik élénken érdeklődnek a téma iránt. A korábbi könyvek vagy csak egy adott rendszerrel foglalkoznak, vagy olyan általános megoldásokat adnak, melyek az életben nehezen használhatók. Ez most más, viszont a megértéséhez feltétel, hogy az olvasó rendelkezzen alapvető adatbázis-kezelési ismeretekkel. Az könyv első fele a programozással foglalkozik: gyors lekérdezések elkészítése, adatbázis építés, indexhasználat, a második fele pedig tárolt eljárásokkal, az ODBC-JDBC lehetőségekkel, zárolásokkal és a költségalapú optimizálással. Néhány gondolatot majd idézni is fogok belőle.

http://pcforum.hu/konyvek/SQL-teljes%C3%ADtm%C3%A9nyfokoz%C3%A1s.htm?bid=293 

2.
Joel Celko: SQL felsőfokon (Kiskapu kiadó, 536 oldal)
Az SQL felsőfokon az első olyan könyv, amely haladó SQL módszereket mutat be. A szerző meglehetősen közvetlen nyelven ismerteti az olvasóval a lehető legjobb megoldásokat, a helyes gondolkodásmód elsajátítására helyezve a hangsúlyt. A kissé régies, eljárásközpontú megközelítés helyett inkább a logikai, illetve halmaz alapú elemzést helyezi a középpontba. Celko valóban az SQL legnehezebb területeivel foglalkozik, pl.: az összesítő függvények muködésével, a NULL érték helyes alkalmazásával, vagy azzal, miért és hogyan érdemes ál-tömböket használni. A könyvben többnyire termékfüggetlen megoldási példákat láthatunk.

http://kiado.kiskapu.hu/main.php?SHOW_BODY=books&OP=detailed&PROD_ID=20&komi=d865f6156664ad4dea3e983c8bdb77ca

3.
Joel Celko: SQL fejtörők (Kiskapu kiadó, 184 oldal)
Joel Celko ismét nagyot alkotott, ugyanis a legravaszabb fejtörők kitalálására buzdítja olvasóit, majd különböző megoldási javaslatokat és magyarázatokat tesz a jobb eredmény elérésének érdekében. A szerző az SQL szemszögéből világítja meg az adott problémákat, ezzel segítve a gyakorlott SQL szakértőket a gyakran felmerülő típusfeladatok megoldásában. Sok új módszerre és számos hasznos példaprogramra bukkanhat az, aki elolvassa.

http://kiado.kiskapu.hu/main.php?SHOW_BODY=books&OP=detailed&PROD_ID=5

4.
Martin Gruber: SQL "A" – "Z" (Kiskapu kiadó, 480 oldal)
Ez most nem olyan izgalmas, viszont annál hasznosabb könyvecske, amely tulajdonképpen az SQL-nyelv referenciájaként is szolgálhatna. Tartalma az SQL92 és SQL99 szabványokat alapul véve bemutatja, hogy mely lehetőségek származnak a régi szabványokból, és melyek jelentek meg az újabb szabványokban. Fontos tudni, higy a szerző a szabványról ír, nem pedig egy adott adatbázis-kezelő rendszerről vagy annak SQL nyelvjárásáról.

http://kiado.kiskapu.hu/main.php?SHOW_BODY=books&OP=detailed&PROD_ID=8

Áprilisban majd újabb könyvajánlóval jelentkezem (már meg is vannak a jelöltek)…

Kategóriák:Books

Röviden az Oracle 9i, Oracle 10g újdonságairól

2005. március 8. kedd Hozzászólások kikapcsolva

Néhány gondolat erejéig tekintsük át a régebbi Oracle9i, de még inkább az új 10g érdekességeit. Ez a lista nem teljes, csak egy igen rövid felsorolás.

Oracle 9i:
  – ANSI JOIN (SELECT) szintaktika.
  – ANSI CASE (feltétel viszgálat) utasítás.
  – Új XML és TIMESTAMP adattípusok.
  – Belső, XML adatszerkezetek menedzseléséhez utasítások, függvények.
  – SELECT… GROUP BY… MERGE, ROLLUP, CUBE, RANK utasítások, melyek a
    csoportosításokhoz, összegzésekhez nyújtanak segítséget.
  – Stb.

Oracle 10g:
  – Új adattípusok: BINARY_FLOAT, BINARY_DOUBLE, SDO_GEORASTER, SI_STILLIMAGE a
   nagyméretű adatok tárolásához (képek, videok).
  – SELECT… SPREADSHEET: Multidimenzionális táblázatok készítése.
  – FLASHBACK TABLE parancs: Adatbázis-tábla törlés (kukába vele!), ami később
    visszavonható égészen a PURGE parancs kiadásáig.
  – Reguláris kifejezések elemzése: REGEXPR_REPLACE, REGEXPR_INSTR, REGEXPR_SUBSTR
    vagyis mintaillesztés alapján történő szövegkeresés (a WHERE… LIKE-nál jóval összetettebb
    lehetőségek).
  – Újabb statisztikai függvénynek: CORR, MEDIAN, stb.
  – Hash-kivonatok kezelése: ORA_HASH.
  – Új feltételes logikai műveletek: IS [NOT] NAN, IS [NOT] INFINITE, IS [NOT] A SET,
    IS [NOT] EMPTY, IS [NOT] MEMBER OF, stb.
  – Új EVALUATE utasítás: Feltételes kifejezések kiértékelése.
  – Új PL/SQL csomagok: UTL_COMPRESS (tömörítő), UTL_MAIL (email küldés,
    de egyszerűbben, mint eddig), PLSQL_WARNINGS (képernyős figyelmeztetések).
  – Java-kezelés továbbfejlesztése (sebesésgnövelés, kapcsolat-cache, stb).
  – XML-kezelés továbbfejlesztése: XML-SQL konverziók végrehajtása.
  – SQL*Plus alkalmazás-kiterjesztések.
  – Stb.

Oracle 10g’s New Grid Features:
http://www.rittman.net/stories/2003/09/16/oracle10gsNewGridFeatures.html

Kategóriák:Computers and Internet

Szigorúan ellenőrzött… kivételkezelés a Java-ban – Utoljára!

2005. március 8. kedd Hozzászólások kikapcsolva

Korábban már írkáltam kicsit erről (lásd a Put About – Szigorúan ellenőrzött… kivételkezelés a Java-ban – Megoldva! cikket)

Most csak azért tértem vissza rá egy szösszenetnyit, mert felfedeztem néhány oldalnyi szakirodalmat a témáról. Így pl. találtam egy hullajó írást, amely a Java-C# elemeit hasonlítja össze lépésről lépésre (nem volt cél, hogy egyiket vagy másikat jobbnak kiáltsuk ki, hiszen az baromság lenne, inkább az ismeretek megszerzésére összpontosítsunk). A doksi elmondja melyik környezetben pontosan mi van, ami a másikban nincs vagy fordítva, akár a kulcsszavak meg viselkedések szintjén is (sok-sok példával illusztrálva). Az író szót ejtett a kivételekről is.

Szóval ebben azt olvastam, hogy a szerzőnek nagyon tetszik a Java kivételkezelése, mert annál
dokumentáció nélkül is kiderülhet, hogy milyen kivételeket dob az osztály vagy a komponens, de…
(mindig van egy "de") a C# tervezői, akik között szerepelt Anders Hejlsberg, a Turbo Pascal és a Delphi tervezője is sajnos ezt nem tarthatták szem előtt. Ennek több oka is volt (lassacskán ugyan, de azért tényleg minden kiderül).

1.
No, tehát akkor a Java-tól eltérően vajon miért nem írja elő a C# a nem kezelt kivételek felsorolását, illetve miért nem kötelezi a programozókat arra, hogy ezeket le is kezeljék?

– Az egyik ok bármilyen furcsa, a C++ nyelv viselkedése.

– A másik ok a nyelvek együttműködése. E szerint köztudott, hogy a .NET akárhány nyelvet
  támogathat (vagy fordítva?), amelyek megfelelnek a CTS vagy CLS specifikációknak. Az is
  köztudott, hogy, a.NET-ben lehetséges menedzselt C++, Fortran.NET vagy akár
  COBOL.NET-ből is leszármaztatni mondjuk egy C# vagy VB.NET forrásban. Az írás szerint
  nyelvek közötti együttműködés korlátai miatt nem lehetett ilyen mértékű kivételkezelési
  kötelezettséget bevezetni.

– A harmadik ok pedig, ha igaz akkor elég zúzós bír lenni. Képzeljünk el egy kliens/szerver
  alapú működési módot (ahol a kliens bármilyen alkalmazás vagy komponens lehet, a szerver
  pedig egy szintén bármilyen komponens, aminek a szolgáltatását a kliens távolról igénybe
  veszi). Klasszikus felhasználási mód.

  A klienst mondjuk mi írtuk, de használunk hozzá egy más cég által gyártott akármilyen
  komponenst (legyen pl.: egy Ukrajnában gyártott "fekete doboz"). Most technikailag
  képzeljük el, hogy ezer helyen használjuk az ukrán szerver oldali komponenst, amivel a mi
  kliens alkalmazásunk/komponensünk valamilyen kapcsolatban áll. Egyszer csak a szerver oldali
  komponens ukrán gyártója (mondjuk legyen Aljosa) úgy dönt, hogy módosít vagy javít a
  belső működésen, aminek az egyik következménye egy új kivétel dobása (és azt a kivételt ő
  nem óhajtja lekezelni), és amelyet valamelyik metódus "throws" kulcsszava után egyébként
  megadott. FONTOS: A szerver oldali komponens interfésze nem változik!

  A példa az életből vett gyakori eset. Ekkor viszont elképzelhetjük, hogy a Java-féle
  megoldásnál a "throws" után felsorolt, de abban a metódusban el nem kapott kivételt a
  felhasználónak kliensnek) KÖTELEZŐEN kezelnie kell.  Igenám, de a mi kliensünk erről még
  semmit se tud. E szerint technikailag előfordulhat az, hogy a kliens régi, a szerver oldali
  komponens pedig már az új (az új kivételkezelési követelménnyel együtt). Az egy teljesen
  bevált szokás, hogy ha egy komponens interfésze nem módosul, akkor a kliens 100%-ig
  kompatibilis maradhat a szerverrel (az Aljosa féle szolgáltató komponenssel) és akár időtlen
  időkig, akárhányszor lehet cserélgetni a kliens alatt annak a szerver oldali komponensét
  (ember, ezt nem én találtam ám ki!).

  Vagyis a Java-féle kivételkezelés további bonyodalmakhoz és problémákhoz vezethet.
  Ilyenkor vagy újrafordítjuk az összes klienst és lekezeljük az újonnan megjelent kivételt vagy
  pedig továbbra is használjuk a régi komponenst megfosztva magunkat az új komponens
  nyújtotta lehetőségektől. Még akár emiatt is döntöhettek úgy a C# tervezők arról, hogy
  nem úgy fog működni a kivételkezelés, mint a Java-ban.

– Végül egy utolsó indok, melyszerint a C# tervezőinek meggyőződése volt, hogy a
  kivételkezelésnek mindig opcionálisnak kell lennie, azaz nem írhatják elő másnak, hogy azt
  kötelezően kezelje le. Ez a döntés felhasználó, kliens joga, amit nem lehet elvenni tőle.
  Megjegyzem ez utóbbi filozófiai és nem műszaki kérdés.

2.
De van aki ennél tovább merészkedett a Java kivételkezelési probléma témakörében.

A Java a try-catch-finally blokk "finally" ágán lehetővé teszi, hogy abból break, continue,
vagy return utasításokkal kiugorhassunk egy feltétel nélküli vezérlésátadással. Ezzel felülbíráljuk a "throw" kivétel dobás célját és igen drasztikusan megszakítjuk a kivételkezelés folyamatát. Emiatt a finally nem tudja befejezni a dolgát, és nem lehet eldönteni, hogy a kivételkezelés rendben  befejeződött-e. A C#  tanulva a Java ezirányú hiányosságából nem engedi meg a "finally" blokkból való kiugrást és a külső blokk felé történő vezérlésátadást. Ezt nagyon bonyolult lenne tovább magyarázni, akit érdekelnek a részletek olvassa el lentebb Howard Gilbertnek, a Yale egyetemen született kimerítő tanulmányát, amely példákkal érzékelteti a kivételkezelési problémákat és azok megoldásait.

Mindazonáltal valahol olvastam (a hivatkozás sajno snincs meg), hogy egy ifjú titán összehasonlító méréseket végzett a C++, Java és C# kódokon. Ebben a kivételek feldolgozási sebességét tekintve a Java (J2SE 1.4) megelőzte a C#-ot (.NET Framework 1.1), másban meg nem.

C# and Java: Comparing Programming Languages (Kirk Radeck):
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncenet/html/c_n_java.asp

Exception Handling in Java and C# (Howard Gilbert):
http://pclt.cis.yale.edu/pclt/exceptions.htm

Kategóriák:Programming

Gondolatok az EDI körül…

2005. március 4. péntek Hozzászólások kikapcsolva

Már nagyon régen felmerült az igény arra, hogy a vállalatok között, valamilyen – szabványos – módon, elektronikus formában lehessen adatot cserélni (két számítógépes program közötti adatcsere). Ennek a feladatnak a megoldására korábban szabvány hiányában csak egyedi módszereket lehetett alkalmazni.

A probléma megoldására jött létre egykor az EDI (Electronic Data Interchange), azaz elektronikus adatcsere formátum. Az ebben lévő formátumokat a nemzetközi ISO szabvány deklarálja. A szabvány már több, mint 13 éve létezik, így a világ nyugati felében régóta és rendszeresen használják.

Ez a szabványos formátum tulajdonképpen egy hagyományosan egyszerű szöveges – TXT fájl. A benne lévő tartalmat (kódokat, karaktereket és pozíciókat) a szabvány pontosan definiálja.

Az EDI-ben pontosan szabályozva vannak az adattartalomra (DATA CONTENTS, azon belül data description, data query, app. dependent data flows, id. of parties), a reprezentációra (REPRESENTATION, azon belül syntax rules, character set, framing), és a transzportra (TRANSPORTATION, azon belül data transmission services, pl.: X.400,TCP/IP-FTP, diskette, magnetic tape adathordozó közegek) vonatkozó előírások.

Az EDI használata (a tartalom és forma kötöttségei miatt) nagy szakértelmet kíván. Azt is mondhatnánk, hogy ez egy összetett, precízen megfogalmazott, de nehézkes, rugalmatlan és költséges rendszer, amelynek menedzseléséshez kevés a hozzáértő ember.

Olvastam valahol, hogy az XML technológiákat támogató informatikusok azt állítják, melyszerint az EDI-vel: "Egy atomerőművet is ugyanúgy kell megrendelni mint egy strandpapucsot…"

A fenti mondat az EDI rugalmatlanságát szerette volna érzékeltetni. Ebből, illetve az új igényekből következően, továbbá az internet rohamosabb elterjedése miatt mára már azt lehet mondani, hogy az XML hamarosan kiszoríthatja az EDI-t. Ez egyben azt is jelenti, hogy a régi, EDI kommunikáción alapuló rendszerek még egy jó ideig létezni fognak, de az elektronikus adatcsere formátuma egyre inkább az XML lesz.

Több, nagyobb magyarországi áruházlánc már elvárja el a beszállítóitól és a megrendelőitől, hogy a rendeléseket EDI formátumban kezeljék.

Példa egy EDI fájl tartalmára (részlet):
"UNB+UNOA:2+5990020010002::+5990010050001::+990608:0700+VEGYIMU15+
:+ORDERS++++’UNH+199910158229+ORDERS:D:96A:UN:EAN008’BGM+220+10158229+9′
DTM+137:19990607:102’DTM+2:19990610:102’RFF+ON:10158229’RFF+VA:
10969289-2-44’NAD+BY+5990020010002::9++VILLAMOS HOLDING KFT.
+BUDAPARK KELETI 3.:PF 219+BUDA™RS++2041’CTA+OC+FD05’NAD+DP+5990020011009:
:9++BUDAORSI ARUHAZ GM10+BUDAPARK KELETI 3.:PF 2198+BUDAORS+PEST
MEGY+2041’CTA+SR+00000000000000005’COM+0036-23-418-030:TE’COM+0036-23-418-040: FX’NAD+SU+5990010050001::9++AKARMI FELDOLGOZO RT.+SZEGEDI UT 18
+BUDAPEST++1103’LIN+1++5997046741415:EN’PIA+1+291213:IN’PIA+1+3005127:
SA’IMD+E++:::500ML SLUSSZ FOLY.MOSATOSZER’QTY+21:640’PRI+AAA
:152.88’PAC+++:::ME001DB’LIN+2++5997046740555:EN’PIA+1+764361
:IN’PIA+1+3005852:SA’IMD+E++:::1000 ML MSZ TAPSZER’QTY+21
:360’PRI+AAA:133.98’PAC+++:::ME001DB’LIN+3++5995000040147…"

Megjegyzés: Már az XML-nek is készül az a nyelvjárása, amely az üzleti, ügyviteli életben, illetve az elektronikus kereskedelemben megszokott folyamatokra specializálódik. Ennek neve: ebXML

További EDI információk:
www.edi-tie.com/edifact/index.htm
www.kgazd.bme.hu
www.nls.fi/ptk/standardisation/1.html
www.nls.fi/ptk/standardisation/2.html
www.unece.org/trade/untdid/welcome.htm

Kategóriák:Computers and Internet

SQL Teljesítményfokozás-I.

2005. március 4. péntek Hozzászólások kikapcsolva

Ebben a cikksorozatban igyekszem hasznos információkat adni azok részére, akik némi érdeklődést tanusítanak az adatbázis-kezelő rendszerek SQL-műveleteinek végrehajtási sebességével kapcsolatban (itt főleg a SELECT-re gondolok). Nosza rajta, kezdjük máris egy könnyedebb témával…

A kódok rangsorolása

Az adatbázis-kezelő rendszerek kézikönyvei alapján, teljesítmény szempontjából legjobb keresési feltételek azok, amelyek kevés soron, könnyen végrehajtható összehasonlításokat végeznek.

Lentebb látható lesz a keresési feltételek leggyakoribb típusai, méghozzá a legjobbtól a legelőnytelenebbig. Minden elem mellett egy pontszám található. Minél magasabb a pontszám, annál jobb az adott elem (annál inkább azt kellene használni az SQL – WHERE feltétel kialakításakor, ha… lehet).

1. A keresési feltételekben használható műveletek pontozása
  
 Művelet   Pontszám
   =       10
   >        5
   >=       5
   <        5
   <=       5
   LIKE     3
   <>, !=   0

2. A keresési feltételekben használható tényezők pontozása

 Tényező                                Pontszám
 Csak literál              10
 Csak oszlop                5
 Csak paraméter             5
 Többtényezős kifejezés     3
 Egész adattípus            2
 Egyéb számtípus            1
 Ideiglenes adattípus       1
 Karakter adattípus         0
 NULL                       0
 
Nézzünk rá néhány példát is.

a. Példa: WHERE smallint_column = 12345
    – 5 pont jár az egyenlőségjel bal oldalán szereplő egyedüli oszlopért,
    – 2 pont jár az egész típusú tényezőért (ez a smallint_column),
    – 10 pont jár az egyenlőségjelért, és
    – 10 pont a jobb oldalon lévő egyedüli literálért (12345).
    Ez összesen: 27 pont.

b. Példa: WHERE char_column >= varchar_column || ‘x’
    – 5 pont jár az egyenlőségjel bal oldalán szereplő egyedüli oszlopért,
    – 0 pont jár a CHAR típusú tényezőért (ez a char_column),
    – 5 pont jár az nagyobb-egyenlős összehasonlításért,
    – 3 pont jár a jobb oldalon szereplő többtényezős kifejezésért (varchar_column || ‘x’), és
    – 0 pont jár külön a VARCHAR típusú tényezőért is (varchar_column).
    Ez összesen: 13 pont.

Természetesen ez a két feltétel a végeredményét tekintve nem egyenértékű. A példa csak azt érzékelteti, hogy ahol lehet, ott célszerű végignézni a kombinációkat meg a pontszámokat, és az adott helyzetnek megfelelően kell dönteni. Elsősorban a rangsorolás elvét és magát a sorrendet kell megjegyezni.

A legtöbb pontot az a feltétel kapja (a leggyorsabb az lesz), amelyik a legkevesebb időt veszi igénybe. Általában attól gyorsabb egy feltétel, ha kevesebb sorral vagy egyszerűbb összehasonlításokkal dolozik.

Folytatjuk…

Kategóriák:Databases

A “Java-saga” folytatódik, azaz mi idegesít engem?

2005. március 4. péntek Hozzászólások kikapcsolva

A Java 1.4-ig fennálló felsorolás megvalósításának módja még a kivételkezelésnél is jócskán érthetetlenebb a számomra. Főleg annak tudatában, hogy ott állt előttük példaként az igazán jó alapot jelentő C++ nyelvi szintaktika.
 
A felsorolásra írtam egy primitív Java példát:

public class Szinek {
  public static const Piros = 1;
  public static const Feher = 2;
  public static const Zold = 3;
  private int m_csak_egy_szin;
 
  // konstruktor
  public Szinek (int csak_egy_szin) {
    m_csak egy_szin = csak_egy_szin;
  }
 
 
// értékadás
  public void SzinBeallit(int csak_egy_szin) {
    m_csak_egy_szin = csak_egy_szin;
  }

  // érték lekérdezés
  public int SzinLekerdez() {
    return (m_csak_egy_szin);
  }
}

És ugyanez C++ , illetve C# nyelveken:

enum Szinek {Piros, Feher, Zold};

Nos, biztos, hogy engem inkább a Java-féle tudna az őrületbe kergetni.
 
No és persze us ugyanez igaz a "struct"-ra, hiszen ez a Java-ban eléggé körülményes lenne, merthogy ilyen nincs is benne, ezért az enum-hoz hasonlóan sajnos azt is csak class-al lehet megvalósítani. Sebaj, ez legyen a legkevesebb, hiszen a struct valójában majdnem egy class.
 
Folytassuk még tovább és nézzük meg a metódusok dinamikus paraméterezési lehetőségeit:
 
Ismét egy ici-pici Java példa:

public class Akarmi {

  public static void ParamSzimulacio(int[] tomb) {
    // itt valami utasítás jönne…
  }
}
 
int[] tomb = {1,3,7,9};
Akarmi.ParamSzimulacio(tomb);

Ugyanaz a példa C#-ban:

public class Akarmi {
 
  public static void ParamSzimulacio(params int[] lista) {
   
// itt is valami utasítás jönne…
  }
}
 
Akarmi.ParamSzimulacio(1,3,7,9);

A Java-nál látható egy tömb deklaráció, no és persze mindennel, ami evvel jár. Jó, rendben, ne legyünk kicsinyesek.
 
Végül valami hasonló, de azért mégsem egészen ugyanaz C/C++ -ban:

void ParamSzimulacio(int p1, char p2=’ ‘, char *p3="Izé", float p4=3.1415f);
 
int main() {
  ParamSzimulacio(1); 
// mindegyik alapértelmezett paraméter érvényre jut
  ParamSzimulacio(3, ‘*’); 
// a p3 és p4 paraméterek alapértelmezettje működésbe lép
  ParamSzimulacio(7, ‘+’, "Bigyó"); // csak a p4 paraméter alapértelmezése játszik be
  ParamSzimulacio(9, ‘$’, "Valami", 2.38f); // nincs alapértelmezett paraméter felhasználás
  return 0;
}

Nyilván a C++ kicsit (vagy még inkább nagyon) másabb. Rögvest meg is jegyzem, hogy a C++ engem untat egy csöppet, no meg azért valljuk be férfiasan, hogy nem is nagyon értek hozzá (meg úgy általában semmihez sem értek, csak mindenbe beleugatok…)
 
Végül, de nem utolsó sorban példaként hozom fel a nem túl jelentős operátor túlterhelés -operator overloading – témáját, ami a C++ -ban kiváló, de sajnos a Java-ban megint nincs. Valami hasonlót ugyan össze lehet hegeszteni, vagy egy 3. gyártó általi előfeldolgozóval (preprocessor) megreszelni, de mindezt őrületes munkával (a C#-ban is van a C++ -hoz nagyon hasonló operátor túlterhelés).
 
No, akkor erről egyelőre ennyit.
 
A problémám az, hogy a Java-ban a C#-hoz képest néhány dolog csak hosszadalmas munkával és körülményesebben oldható meg. Elég, ha csak az eddigieket idézzük fel. Ez nem hiba, nem is nagy baj, legfeljebb néha kényelmetlen és lassú. A nyelv képes lenne a fejlődésre, de mintha valami visszatartotta volna őket. Csakhogy ez hosszútávon nem jó taktika (mint tudjuk a taktika sokat számit, lásd a Microsoft elhamarkodott Longhorn – Internet Explorer stratégiáját, amit mára már végül felülbíráltak).
 
Erre bizony a Sun is rájött, és talán most,… a Java SE 5.0-ban (az 1.5 csak egy belső verzió) már felébredt végre és néhány olyan dolgot is megcsinált, amit a C++ és a C# igen régóta megoldott. Ezek egyike az eddig leginkább kellemetlen "enum" kérdés vagy a C#-ban meglévő boxing/unboxing technika. Ennél tovább azonban nem is nagyon merészkedtek.

Comparing C# and Java (Budi Kurniawan):
http://www.ondotnet.com/pub/a/dotnet/2001/06/07/csharp_java.html?page=1

Kategóriák:Programming

Microsoft Visual Studio 2005 és C# 2.0 áttekintés

2005. március 3. csütörtök Hozzászólások kikapcsolva

A hamarosan megjelenő Visual Studio 2005 (Whidbey) és a C# 2.0 számos újításon esett át. Ezek többsége olyan, hogy az eccerű programozó  minden ujját megnyalja, miközben olvassa. Aki Microsoft eszközökkel fejleszt, annak ez kötelező olvasmány.

C# 2.0 újdonságok

– Generikus szerkezetek (Generics)
  Az osztályok, struktúrák, interfészek és delegate-ek paraméterezhetők a tárolt
  adatok alapján. Vagyis még általánosabb, de típusos osztályok, metódusok
  készíthetők. Emiatt ritkábban lesz szükség adatkonverzióra (boxing/unboxing). Ha jól
  tudom a  C++ már valamilyen formában tartalmazott ilyen lehetőséget. Itt van lehetőség
  bizonyos osztály vagy metódusszintű megszorítások definiíciójára is (ez az adatbázis
  megszorításokhoz nagyon hasonlít, de azért mégsem ugyanaz).
– Anonymus függvények (Anonymus functions)
  Olyan kód szekvenciákat készíthetünk, ahol delegate értékeket vár a rendszer. Ezek
  hasonlóak a Lisp lambda függvényeihez. A C# 2.0 támogatja azt is, hogy ezek a függvények
  a környező lokális változókat manipulálják. Tulajdonképpen "in-line" függvényeknek is
  nevezhetnénk őket. A példák megtekintése nélkül ez nem értelmezhető.
– Iterátorok (Iterator)
  Olyan speciális függvények, amik inkrementális számításokat végeznek. Bizonyos típusok
  esetén ezek segítségével adhatjuk meg, hogy a "foreach" milyen módon járja be a
  megadott elemeket.
– Részleges típusok (Partial Type)
  A részleges típusok segítségével az osztályok, struktúrák és interfészek több egységre
  bonthatók és az egységeknek nem kötelező egyazon fájlba tartozniuk.
– Nullozható típusok (Nullable types)
  Egy tetszőleges alaptípus értékkészletét kibővíti a NULL értékkel. Az így létrejött típuson
  mindazok a műveletek végrehajthatók, amik az alaptípuson. Korábban ilyen nem volt.
  Ezzel a lehetőséggel pl. igen jól lehet illeszkedni azadatbázis-kezelők hasonló tulajdonságaihoz.
– Kompatibilitás
  Annak ellenére, hogy több kulcsszó is keletkezett, 100%-os C# 1.0 komatibilitást ígérnek.

Elismerem, a példakódok tanulmányozása nélkül ezek többsége nehezen érthető.

Visual Studio 2005 újdonságok

– Szövegváltozás-követés (Change Tracking)
  A forrásszerkesztő különböző színekkel jelzi, hogy az adott kódsorokon belül, a fájl első
  megnyitása óta mely sorok: (a) nem változtak, (b) változtak és elmentődtek, (c) változtak,
  de még nem mentődtek el.
– Vizuális osztályszerkesztő (Class Designer)
  A Visio-hoz hasonló, beépített, grafikus szerkesztő funkció, amellyel új vagy meglévő
  osztályokat, metódusokat, adattagokat, jellemzőket, konstansokat, kapcsolatokat, stb.
  "szerelhetünk" össze, azok minden tulajdonságával együtt. A végeredmény a forráskód
  manipulációja, de vizuálisan. Ilyen eddig is volt, úgyhogy fogalmam sincs, hogy ebben mi az
  újdonság (kívülről ez nem látszik). Ezzel az eszközzel lehetőség nyílik arra is, hogy egy
  osztályból egy mozdulattal interfészt készítsünk (extract interface).
– Kód gépelést segítő IntelliSense kiterjesztés (Expansions)
  No ebbe bizony számolatlanul szórták bele az új, programozói lehetőségeket. Így pl.: kód
  bekeretezés, viselkedés XML-be tárolása, Try/Catch segítő, interfész segítő, kivételek
  megjelenítése, stb, stb, stb.
– Azonnali objektum teszt (Object Test Bench)
  Egy adott osztály példányosítása (alkalmazás futtatás nélkül), a létrejött objektumon belül a
  metódusok meghívása, paraméterek megadása, visszatérési értékek figyelése, stb.
– Forrás átalakítás (Refactoring)
  A forráskód automatikus átalakítása, átszervezése, ami nem csak egyszerű szövegcsere, mivel
  figyelembe veszi a forrás szintaktikai szabályait, lehetőségeit és korlátait is. Igy pl.: csoportos
  átnevezések (előzetes betekintéssel), lokális metódusváltozó metódus-paraméterré történő
  előléptetése, interfész beillesztés, stb.
– Kódformázás (Formatting)
  A forráskód vizuális kinézetének átalakítása előre magdott szabályok szerint.
– Környezeti beállítások
  Színek, betűtípusok beállítási lehetőségeinek kibővítése, saját konfigurációs profilok
  létrehozása (többféle fejlesztői környezeti beállítás elmentése/visszatöltése), stb.
– Automatikus helyreállítás (Auto Recovery)
  A fejlesztői környezetben bekövetkezett fatális hiba automatikus helyreállítása, ami
  a környezet és a források helyreállításával társul (a menet közben automatikusan és
  folyamatosan elmentett recovery-infok alapján).
– Hivatkozások keresése (References)
  A forrásokban lévő hivatkozások keresése, megjelenítése (pl. egy adott osztály, metódus
  mely másikakra hivatkozik, vagy őrá kik hivatkoznak, stb).
– A forrás XML-alapú dokumentálójának kibővítése (#region/#endregion utasítások).
– Intelligens címkék (SmartTags)
  A környezet és a forrás tartalmától függően különféle kód-darabkák beillesztése és egyéb
  segédfunkciók (pl.: névtér hivatkozás automatikus elhelyezése), stb.
– Szöveg keresés és csere lehetőségeinek a kibővítése.
– Újabb vezérlőelemek bevezetése.
– PKI alapú szerelvények (strongly name assembly) menedzselése
, melyet eddig csak egy
  parancssoros eszközzel lehetett végrehajtani.
– "Egy kattintásos" telepítés (Click Once Deployment)
  A folyamatos, fejlesztői környezet alapján nyilvántartott információk alapján, a (webes vagy
  hagyományos) telepítőanyag elkészítése – egy kattintásra.
– XML megjelenítés (XML Visualizer)
  Bárhol, bármilyen (akár egy változóban lévő) XML tartalomnak a vizuális, betördelt
  megjelenítése.
– Forrás nyomkövetés (debug) lehetőségek kiterjesztése.
– Egységteszt (Code Unit Test)
  Beépített tesztelési módszerek, tesztelési folyamatok, azok automatikus paraméterezése,
  indítása többféle szempont szerint. Minden folyamat vizuálisan is megtekinthető.
 

New Features in C# 2.0: Part 1. – 2.
http://www.c-sharpcorner.com/Code/2004/March/NewCSharpFeaturesP1.asp
http://www.c-sharpcorner.com/Code/2004/March/NewCSharpFeaturesP2.asp

Visual Studio 2005
http://www.c-sharpcorner.com/vs2005.asp

Kategóriák:Programming

Nem sikerült lezárni hitvitát

2005. március 3. csütörtök Hozzászólások kikapcsolva

Korábban már én is említettem ezt (lásd a Put About – Kényszeredett beismerés cikket),
de most végre úgy látszik, hogy másnak is feltűnt.

IT-News:
Sok szakmabeli hitetlenkedve ingatta a fejét annak a hírnek a hallatán, hogy egy windowsos webszerver biztonságosabbnak bizonyult, mint a vele azonos módon feltelepített linuxos program.

A teszteredményt floridai kutatók tették közzé a múlt havi RSA konferencián, mégpedig egy olyan csapat, amelynek tagjai között Windows- és Linux-rajongók egyaránt megtalálhatók voltak.

A vizsgálat egyik célja éppen az volt, hogy pontot tegyenek – ha ez egyáltalán lehetséges – annak a hitvitának a végére, amely arról folyik, hogy melyik operációs rendszer a megbízhatóbb.

"Tényszerű összehasonlítást akartunk" – mondotta Herbert Thompson, az egyik résztvevő, "civilben" a Security Innovation nevű, biztonsági technológiákkal és szolgáltatásokkal foglalkozó cég kutatási és oktatási igazgatója. "Rengeteg spekuláció jelenik meg az interneten, a médiában, szakértői elemzésekben ezzel kapcsolatban, mi igazi, betonbiztos tényeket akartunk látni!" – idézi Thompsont a seattletimes.com.

Az összehasonlításban egy Windows Server 2003 és egy Red Hat Enterprise Server 3 szoftver vett részt. A teszt során azt vizsgálták, hogyan futtatják az adatbázisokat, scriptmotorokat és a webszervereket (a Microsoftét az első esetben, illetve egy nyílt forráskódú Apache-ot a másikban). A mért adatok között szerepelt a jelentett sérülékenységek száma és súlyossága, továbbá a javítófájlok (patch-ek), valamint a kockázatos napok száma. Utóbbi azt az időintervallumot jelöli, amennyi egy sérülékenységi probléma megjelenése és a korrigálására hivatott javítás kibocsátása között eltelik. Ebben az összehasonlításban a windowsos konfigurációnál 30 napot regisztráltak, míg a linuxosnál 71-et.

Richard Ford, a Florida Institute of Technology oktatója, a kutatás egyik résztvevője, és nem mellesleg Linux-hívő, igen meglepőnek minősíti az eredményt. "Amikor először láttam a statisztikát, azt hittem, valami összekeveredett itt, de tévedtem." A két kutató egyetért abban, hogy kísérletük eredménye egyértelmű Windows-fölényt mutat.

Ugyanakkor nem mindenkit győztek meg. A két telepített rendszer ugyanis igencsak hipotetikusnak tekinthető, hiszen mindkettő alapkonfigurációt tartalmazott, ami igen távol áll a való élettől. Sokak szerint ha a Windows sok egyéb képességét élesítették volna, akkor eltűnt volna az említett előnye. Ford úgy reagált erre, hogy olyan rendszereket akartak tesztelni, amelyekkel egy átlagos rendszergazda találkozik, amelyeket nem bonyolít el a végtelenségig a kiegészítő funkciók, köztük a biztonsági intézkedések sokasága.

A kutatás jelentőségét az adja, hogy a Windows, illetve a Linux mellett érvelő szolgáltatók, szállítók, szakemberek között éles vita folyik arról, melyik operációs rendszer használata kerül kevesebbe a vállalatoknak. A Linuxhoz, lévén nyílt forráskódú szoftver, sokkal olcsóbban hozzá lehet jutni, de a Microsoft nem győzi felhívni a figyelmet arra, hogy az ő programjait olcsóbban lehet futtatni és menedzselni. A biztonsággal kapcsolatos kiadások pedig jelentős tételét jelentik ez utóbbi költségfajtának.

Bakker! Savanyú a szőlő mi?

Melyik a biztonságosabb: a Windows vagy a Linux?
http://it.news.hu/rios3_content.php?mod=10&id=11792

Kategóriák:News and politics

Szigorúan ellenőrzött… kivételkezelés a Java-ban – Megoldva!

2005. március 2. szerda Hozzászólások kikapcsolva

Azt hiszem megtaláltam a hivatalos indoklást az általam korábban említett Java kivételkezelési furcsaságra (lásd a Put About – Szigorúan ellenőrzött… kivételkezelés a Java-ban cikket).

Röviden: minden kivételt, amely egy metódus láthatósági körében felléphet, kötelezően el kell kapni, vagy pedig a throws kulcsszó után fel kell sorolni.

Ez azért lett így megoldva, mert a tervező szerint elképzelhető olyan eset, hogy a programozó nem akar egyes kivételeket az adott metódusban lekezelni, hanem a metódus közvetlen vagy közvetett hívójára hagyja azt (ez amúgy eléggé gyakori eset lehet).

Vagyis a metódus fejében specifikálni kell az összes ellenőrzött kivételt, amely annak láthatósági körében keletkezhet, de önmaga nem kapja el. Slussz-passz, ennyi.

Csak a throws hatására történhet meg az, hogy ha a metódus a fellépett ellenőrzött kivételt nem kezeli le, akkor a JVM (Java Virtual Machine) a hibát kezelő try-catch blokkot egy hívási szinttel feljebb dobja.

Namármost, hogy megtudtam a hivatalos indoklást, cseppet sem jutottam előbbre, mivel nem érzem ennek a kényszerítésnek az előnyét. Ha nem sorolom fel a throws után, nosza akkor mi a bánat van? Semmi? Vagy hiba? Viszont, ha felsorolom, akkor és csakis akkor passzolja tovább a felsőbb szintre. Nekem úgy tűnik, mintha tök feleslegesen járatná velem a köröket.

A Python, C++ és C# nyelvek kivételkezelésében nem szerepel a throws. Ha lesz egy kis időm, akkor majd ezeknek is utána járok.

Does Java need Checked Exceptions?
http://www.mindview.net/Etc/Discussions/CheckedExceptions 

The Java Foundry – Exceptions in Java:
http://radio.weblogs.com/0122027/stories/2003/04/01/JavasCheckedExceptionsWereAMistake.html

Programozási nyelvek megbízhatósági kérdései:
http://www.jataka.hu/rics/diplom/diplom.doc

Kategóriák:Programming

Mi lesz veled SVG?

2005. március 1. kedd Hozzászólások kikapcsolva

Lehet, hogy a "Longhorn" – Avalon (XAML) beköszöntével a régi nagy kedvencemnek, a Scalable Vector Graphics-nek (SVG) is befellegzett? Lehet.

Az mindenesetre elgondolkodtató, hogy az Avalon-féle XAML és a Mozilla-féle XML-based User Interface Language-nek (XUL) sem az SVG-re alapozott egykor. No mindegy, majd elválik. Addig is, amíg még létezik kukkantsunk bele picit ebbe a jó kis SVG témába.

Az SVG egy szabványos, XML-alapú, geometriai, vektorgrafikus adatleíró nyelv. 

Az SVG a grafikus objektumok három típusával foglalkozik: vektorgrafikus alakzatok (vonalak, amelyek lehetnek egyenesek, vagy görbék), képek és szövegek. A grafikus objektumok csoportosíthatók, formázhatók (pl.: CSS-el) és átalakíthatók. Az SVG-vel lehet beágyazott transzformációkat, kivágásra szolgáló területmegjelöléseket, szűrő hatásokat, és sablonobjektumokat előállítani. Az SVG-rajzok lehetnek interaktívak és dinamikusak. Az animációk definiálása és indítása történhet deklaratív módon is (pl.: SVG animációs elemek beágyazásával magába az SVG tartalomba), esetleg szkripten keresztül. 

Összetett SVG alkalmazások használhatnak kiegészítő szkriptnyelvet is, amely eléri az SVG Doumentum Objektum Modellt (DOM). Ez képes teljes hozzáférést adni minden elemhez és tulajdonsághoz. Az SVG grafikus objektumaihoz eseménykezelők (pl.: OnMouseOver vagy OnClick) is társíthatók, melyek mögött akár szkriptműveletek is állhatnak.

Az SVG nem egy cég terméke, hanem egy nemzetközileg elfogadott és támogatott W3C szabvány. Az SVG-ben az általános szintaktikai szabályok ugyanazok, mint az XML-ben. Ez azt jelenti, hogy a geometriai elemek, alakzatok XML nyelven vannak "megfogalmazva".

Az SVG népszerűsége és a felhasználási területe korábban dinamikusabban növekedett (hogy most mi van, arról nincs megbízható információm). Az SVG-hez már számtalan eszköz és egyéb technológia is kapcsolódik. Mindegyik a nevezett adatok feldolgozását, megjelenítését, manipulálását próbálja elősegíteni. 

Egy SVG (XML) dokumentumot sokféle módon lehet feldolgozni, de talán a legismertebb az internet böngésző programba beágyazott megjelenítő (pl.: a Microsoft Internet Explorer az 5.5 verziótól kezdődően képes az SVG adatok kezelésére), azonban önmaga nem tartalmaz SVG adatokat megjelenítő funkciót (nálam a Firefox 1.0 is az Explorert indította el, mivel az volt az .SVG-hez társítva). A geometriai alakzatok megjelenítését Plug-In elemekkel (beépülő modulokkal) lehet megoldani. Ez Internet Explorer esetén egy ActiveX vezérlő objektum (pl.: Adobe SVG Viewer).

SVG példa:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
   "
http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="300px" height="300px">
 <g style="fill:#444">
  <path d="M0,0v250h300v-250z"/>
 </g>
 <g style="stroke:#000; stroke-width:2; fill:#f00; fill-opacity:0.5">
  <circle cx="100" cy="100" r="80"/>
 </g>
 <g style="stroke:#000; stroke-width:2; fill:#00f; fill-opacity:0.5">
  <circle cx="200" cy="100" r="80"/>
 </g>
 <g style="stroke:#000; stroke-width:2; fill:#0f0; fill-opacity:0.5">
  <circle cx="150" cy="150" r="80"/>
 </g>
</svg>

Hát akkor kéremszépen, ennyire egyszerű ez a dolog.

Kapcsolódó információk: 
http://www.w3.org/TR/SVG
http://www.protocol7.com/svg-wiki/default.asp
http://www.dbxgeomatics.com/SVG-Intro.asp 
http://www.adobe.com/svg/viewer/install/beta.html

Kategóriák:Entertainment

Hatékonyabb SQL lekérdezések készítése

2005. március 1. kedd Hozzászólások kikapcsolva

Ebben a mindössze két részes cikksorozatban az adatbázis-kezelőknél használatos SELECT SQL-utasítás esetén alkalmazható trükkökre szeretném felhívni a figyelmet (lesz egy másik sorozat is,a mi az általános SQL-teljesítményfokozásról szól, de erről majd később…).

Hatékonyabb SQL lekérdezések tervezésekor a lekérdezés – SELECT – végrehajtásának mindkét fázisát (végrehajtési terv, végrehajtás) figyelembe kell venni. Egyszerű, de gyakran ismétlődő SQL utasítások is leterhelhetik a az adatbázis-kezelő rendszert, ha azokat állandóan újra kell elemezni (parse). Ugyanakkor azonos adathalmaz lekérdezési ideje a leválogatási mód megválasztásától függően akár nagyságrendi eltéréseket is mutathat.

Az Indexelés

Az adatbázis-kezelőnek alaphelyzetben egy lekérdezés végrehajtásához a vizsgált tábla összes rekordját be kell töltenie és ki kell értékelnie a WHERE feltételek szempontjából (FULL SCAN módszer). Általában a FULL SCAN, azaz "a tábla minden során végég lépegető" módszer jár a létező legnagyobb erőforrásigénnyel, mind számítási kapacitás, mind pedig az adatmozgatás szempontjából.

A keresés nagyságrenddel gyorsítható, ha a vizsgált tábla rekordjai a WHERE feltételek szempontjából legalább részlegesen rendezettek (indexeltek). Ilyenkor már csak az index által leszűkített részhalmazon kell a teljes eltételrendszert kiértékelni (a további példákban egy nem létező hallgatói adatbázis-szerkezet fog a bemutatandó műveletek alapjául szolgálni).

Az Oracle adatbázis-kezelő rendszer pl. kétféle indexelési mechanizmust ismer (legalábbis a 8i verzióig), más meg többet. Mindkét mechanizmus esetén egyszerűen csak meg kell adni, hogy mely tábla mely mezőit kívánjuk indexelni, ettől kezdve az az adatbázis-kezelő az indexelést már a háttérben folyamatosan karbantartja. A létrehozásuk így történik:
  – CREATE INDEX X1_Hallgato ON Hallgato (nev);
  – CREATE BITMAP INDEX X2_Hallgato ON Hallgato (nem, felvetel_eve);

Az első, egyszerűen csak INDEX-ként emlegetett mechanizmus B-fa (B-Tree) típusú indexstruktúrát hoz létre a tábla rekordjai felett, a kulcsmezők alapján. Tipikusan nagy szelektivitású mezőkre szokásos INDEX-et létrehozni. Ezen mezők sokféle értéket vehetnek fel, egy adott értékhez viszonylag kevés rekord tartozik. Egy ilyen mezőt tartalmazó lekérdezés eredményeképpen vagy szűk rekordhalmazt, vagy egyetlen konkrét rekordot szeretnénk válaszul (tipikusan OLTP rendszerek, mint pl.: SAP, Baan, JDEdwards, Navision, Infosys, stb is).

A BITMAP mechanizmus bittáblát hoz létre a tábla rekordjai felett. Minden rekordhoz pontosan egy sor tartozik a bittáblában, míg a bittáblának annyi oszlopa van, ahány lehetséget értéket felvehetnek a kulcsmezők. Tipikusan kicsi szelektivitású mezők esetén használjuk ezt az indextípust, ahol a mező viszonylag kevés különböző értéket vehet fel, és ahol egy adott értékhez sok mező tartozik. Olyan mezők felett érdemes bitmap jellegű indexelést fenntartani, melyekre gyakran futtatunk aggregátum jellegű – statisztikai – lekérdezést (pl: OLAP rendszerek esetén).

Egy tábla létrehozása után alaphelyzetben semmilyen indexeléssel sem rendelkezik. Kivételt jelent, ha a tábla valamely mezőjén UNIQUE, illetve PRIMARY KEY típusú megszorítást (constraint-et) hozunk létre: a megszorítás ellenőrzéséhez az adatbázis-kezelő a megszorítás nevével megegyező INDEX -et hoz létre (ha nem adtunk külön nevet a megszorításnak, akkor a rendszer valami belső nevet generál számára).

Az indexek létrehozásakor figyelemmel kell lenni arra, hogy az index fenntartása költségekkel is jár: tárolóterületet és adatmódosításkor extra karbantartási munkát igényel. Egy "agyonindexelt" tábla lehet, hogy jó teljesítményt nyújt SELECT műveletekre, de ennek ára van, mert az INSERT-UPDATE-DELETE műveletek viszont nagyon lelassulhatnak.

Az Oracle rendszerben (de máshol is) az adatok leválogatásakor az adatbázis-kezelő OPTIMIZER mechanizmusa (lekérdező-optimalizáló) önállóan választja ki, hogy a tábla feletti melyik indexet használja vagy használja-e őket egyáltalán. Az indexet használó ún.RANGE SCAN leválogatási mechanizmus rekordhalmazt, a UNIQUE SCAN mechanizmus egyetlen rekordot választ ki eredményül. Az indexek létrehozásakor ugyanakkor figyelemmel kell lenni arra, hogy az adatbázis-kezelő egy lekérdezés végrehajtásakor egy táblán csak egy indexet használhat.

Hiába van pl. a példa szerinti hallgatókat tartalmazó táblán index külön a születési helyre és külön a születési időre, egy adott helyen és időben született hallgatókat listázó lekérdezés vagy az adott helyen született, vagy az adott időben született összes hallgatót fogja végignézni. Ha a születési hely és idő gyakran fordul elő együtt lekérdezésekben, akkor érdemes számukra közös indexet csinálni, pl.:
  – CREATE INDEX X3_Hallgato ON Hallgato(szuletesi_hely,szuletesi_ido);

Az ehhez hasonló, több mezőt magában foglaló indexeket az OPTIMIZER akkor tudja felhasználni, ha az SQL-WHERE feltételben az index első néhány mezője szerepel. A fenti indexet tehát akkor is használhatja, ha csak születési helyre keresünk, ugyanakkor nem használja, ha csak születési időre keresünk.

Az alábbi általános tanácsok fogalmazhatók meg az indexek megválasztásához:
  – Olyan mezőket érdemes INDEX struktúrával ellátni, melyeknek nagy a szelektivitásra,
    és amelyekre gyakran hajtunk végre lekérdezést.
  – Az indexek megválasztásakor mérlegelni kell a SELECT, illetve az INSERT-UPDATE-DELETE 
    műveletek költsége között.
  – A keresési feltételekben gyakran együtt felmerülő mezőket érdemes együttesen indexelni. 
    Az együttes indexben a mezők sorrendjét úgy célszerű megválasztani, hogy az önállóan is 
    gyakran feltételként szereplő mező előre kerüljön.

Megjegyzés:
  – A fent elmondottak többsége bármely relációs adatbázis-kezelő rendszerre igaz lehet.
  – Az Oracle adatbázis-kezelő rendszer a 10g verziótól inkább a költség alapú 
    optimlizálást részesíti előnybe a szabály alapúval szemben.

Folytatjuk…

Kategóriák:Databases