OGRODJE ZA OPTIMIZACIJO INDEKSOV V MYSQL BAZAH PODATKOV

Size: px
Start display at page:

Download "OGRODJE ZA OPTIMIZACIJO INDEKSOV V MYSQL BAZAH PODATKOV"

Transcription

1 UNIVERZA V LJUBLJANI FAKULTETA ZA ELEKTROTEHNIKO MATJAŽ MRGOLE OGRODJE ZA OPTIMIZACIJO INDEKSOV V MYSQL BAZAH PODATKOV DIPLOMSKO DELO UNIVERZITETNEGA ŠTUDIJA Mentor: doc. dr. Boštjan Murovec Ljubljana, 2013

2

3 ZAHVALA Iskreno se zahvaljujem svojemu mentorju, doc. dr. Boštjanu Murovcu, za neprecenljivo pomoč in nasvete pri izdelavi naloge ter hitre odzive na vsa moja vprašanja. Posebej se zahvaljujem svoji družini, ki mi je omogočila študij in me podpiralana moji poti.

4

5 POVZETEK Informacijsko dobo, v kateri se trenutno nahajamo, zaznamuje široka in intenzivna uporaba informacij. Te je potrebno nekam shraniti, da jih ne izgubimo in da lahko kasneje do njih dostopamo. Ta problem v veliki meri rešujejo podatkovne baze. Ena izmed popularnih podatkovnih baz je MySQL. Pri relacijskih podatkovnih bazah do podatkov dostopamo s poizvedbami. Te lahko napišemo na več načinov, zato je neizogibno,da se le te med seboj po kakovosti razlikujejo. Hkrati je priporočljivo pri poizvedbah, ki iščejo določeno vrednost ali združujejo podatke iz večih tabel, postaviti indekse.indeks je podatkovna struktura, ki nam omogoča, da v poizvedbi poiščemo vrstice iz tabele mnogo hitreje kot sicer. V primeru, da indeksi v podatkovnih bazah niso ustrezno postavljeni, poizvedbe trajajo dlje časa, kot je dejansko potrebno. Analiza optimalnega postavljanja indeksov in optimalnega pisanja poizvedb zahteva veliko predznanja. Ker za podatkovno bazo MySQL ne obstajajo orodja, ki bi to namesto nas avtomatizirala, smo v ta namen izdelali lastno ogrodje. Podatkovna bazaje v našem primeru integrirana v spletni strežnik s podporo programskega jezika PHP za izdelavodinamičnih spletnih vsebin. Izdelano ogrodje s pregledom PHP izvorne kode zazna poizvedbe in nato postavi indekse ter opozori na potencialne možnosti izboljšav v sestavi poizvedbe. Delovanje smo preizkusili na dveh projektih. Eden je uporabljal podatkovno bazo, ki jo MySQL priporoča kot testno podatkovno bazo za učenje. V obeh primerih je ogrodje zelo dobro služilo svojem namenu, saj je indekse postavilo ekvivalentno dobremu strokovnjaku z nekaj letnimi izkušnjami dela s podatkovnimi bazami. Zato je rešitevprimerna tako za začetnike kot za izkušene uporabnike podatkovnih baz. KLJUČNE BESEDE: optimizacija SQL poizvedb, postavitev indeksov, relacijske podatkovne baze, MySQL

6

7 ABSTRACT The information age we live in nowadays is marked by a wide and intensive use of information. In order not to be lost and to be accessible in the long term, it needs to be stored. This problem is mostly solved by databases. One of the popular databases is called MySQL. In relational databases,the data is accessed via queries. As these can be written in many ways, it is inevitable for them to be different in quality. At the same time, with queries which search for a specific value or combine data from multiple tables, it is recommendedto create indexes. An index is a data structure which provides a quicker access to rows from tables in a query. Query performances in cases, where indexes in databases aren t created efficiently, last longer than actually needed. The analysis of optimal index creation and query writing requires a lot of prior knowledge. Since there are no tools available, which would automatize it for MySQL database, our own framework has been designed for this purpose. The database in our case is integrated into an internet server with the support of a programming language PHP for creating dynamic web content. The framework finds queries by checking the PHP source code, creates indexes and informs about potential improvement possibilities of a query structure. Its operation has been tested in two projects. One of them used a database recommended by MySQL as a testing database for learning. In both cases the framework served its purpose very well as it created indexes equivalent to an expert with years of experience in the field of databases. Such solution is therefore appropriate for beginners as well as for experienced users of databases. KEYWORDS: optimizing sql queries, positioning of indexes, relational databases, MySQL

8

9 VSEBINA 1 UVOD PODATKOVNE BAZE PODATKOVNA BAZA SISTEM ZA UPRAVLJANJE S PODATKOVNO BAZO PODATKOVNI MODEL JEZIK SQL PODATKOVNA BAZA MYSQL INDEKSIRANJE OPTIMIZACIJE STAVEK SELECT STAVEK EXPLAIN STAVEK WHERE STAVEK UNION STAVEK JOIN INDEKS POPRAVKI STAVEK ORDER BY STAVEK GROUP BY PHP NALOGE OGRODJA STAVEK SELECT STAVEK WHERE STAVEK ORDER BY STAVEK GROUP BY ARHITEKTURA OGRODJA OPIS POSTOPKA ISKANJE POIZVEDB RAZRED SCANCODE RAZRED CRAWLER RAZRED FILEMANIPULATION ANALIZA IN OPTIMIZACIJA POIZVEDB I

10 5.3.1 RAZRED ANALYZEQUERIES RAZRED MYSQLPARSER RAZRED INDEXFILTER TESTIRANJE RAZRED BENCHMARK RAZRED DATAGENERATOR UNITTEST RAZREDI POMOŽNI RAZREDI RAZRED RUN RAZRED CONFIG MYSQL RAZREDI REALIZACIJA OGRODJA RAZRED RUN RAZRED CONFIG RAZRED FILEMANIPULATION RAZRED SCANCODE RAZRED CRAWLER RAZRED ANALYZEQUERIES RAZRED MYSQLPARSER RAZRED INDEXFILTER RAZRED BENCHMARK RAZRED DATAGENERATOR UPORABA OGRODJA STRUKTURA DATOTEK UKAZI ORODJA UKAZ INFO UKAZ COMPATIBILITYTEST UKAZ SCANCODE UKAZ CRAWLER UKAZ ANALYZEQUERIES UKAZ CLEANUP UKAZ SETUPCONFIG TESTIRANJE OGRODJA II

11 8.1 METODOLOGIJA TESTIRANJA ANDERSON-DARLING TEST TEST PODATKOVNE BAZE SAKILA TEST PODATKOVNE BAZE 1A-VREME SKLEPNE UGOTOVITVE IN IDEJE ZA NADALJNE DELO DODATEK A: NASTAVITVE OGRODJA MYSQL NASTAVITVE DIREKTORIJSKE NASTAVITVE NASTAVITVE SPLETNEGA PAJKA TESTIRANJE GENERATOR PODATKOV DODATEK B: IZPIS UKAZNIH LUPIN DODATEK C: SQL POIZVEDBE SQL POIZVEDBE PODATKOVNE BAZE SAKILA PRIMERI SQL POIZVEDB PODATKOVNE BAZE 1A-VREME DODATEK D: REZULTATI TESTIRANJ PODATKOVNA BAZA SAKILA PODATKOVNA BAZA 1A-VREME LITERATURA III

12 IV

13 SEZNAM SLIK Slika 1: Primer relacije Slika 2: Primer iskalnega dvojiškega drevesa Slika 3: Neuravnoteženo dvojiško drevo Slika 4: Stavek EXPLAIN s poizvedbo SELECT [4] Slika 5: Postopek analiziranja poizvedb Slika 6: Diagram poteka iskanja MySQL poizvedb Slika 7: Diagram poteka optimizacije poizvedbe Slika 8: Razredni diagram poenotenega jezika modeliranja (angl.: Unified Modeling Language, krat.: UML) MySQL razredov Slika 9: Razredni diagram UML Run razreda Slika 10: Razredni diagram UML razreda Config Slika 11: Razredni diagram UML razreda FileManipulation Slika 12: Razredni diagram UML razreda ScanCode Slika 13: Razredni diagram UML Crawler razreda Slika 14: Razredni diagram UML razreda AnaylzeQueries Slika 15: Razredni diagram UML razreda MySQLParser Slika 16: Razredni diagram UML razreda IndexFilter Slika 17: Razredni diagram UML razreda Benchmark Slika 18: Razredni diagram UML razreda DataGenerator Slika 19: Direktorijska struktura projekta Slika 20: Model intetitet in povezav (angl.: Entity relationship, krat.: ER) diagram podatkovne baze Sakila Slika 21: ER diagram podatkovne baze 1a-vreme SEZNAM TABEL Tabela 1: Tržni delež proizvajalcev podatkovnih baz v letu 2011, vir: Gartner (marec 2012) Tabela 2: Časovna zahtevnost operacij [5] Tabela 3: Rezultati testiranja podatkovne baze Sakila Tabela 4: Rezultati testiranja podatkovne baze 1a-vreme Tabela 5: Indeksi, postavljeni na podatkovni bazi Sakila Tabela 6: Časi trajanj primerjalnih testov na podatkovni bazi Sakila Tabela 7: Časi trajanj primerjalnih testov na podatkovni bazi 1a-vreme Tabela 8: Indeksi, postavljeni na podatkovni bazi 1a-vreme V

14 SEZNAM SINTAKS Sintaksa 1: Stavek SELECT [22] Sintaksa 2: Izraz expr [23] Sintaksa 3: Stavek EXPLAIN [19] Sintaksa 4: Stavek UNION [24] Sintaksa 5: Stavek JOIN [25] Sintaksa 6: Sintaksa uporabe indeks popravkov [26] Sintaksa 7: Stavek ORDER BY [21] Sintaksa 8: Stavek GROUP BY [21] SEZNAM UKAZNIH LUPIN Ukazna lupina 1: Zagon ogrodja Ukazna lupina 2: Zagon ogrodja z opcijo compatibilitytest Ukazna lupina 3: Zagon ogrodja z opcijo scancode Ukazna lupina 4: Zagon ogrodja z opcijo crawler Ukazna lupina 5: Izvajanje ukaza analyzequeries Ukazna lupina 6: Izvajanje ukaza analyzequeries na projektu, kjer ni predlaganih izboljšav Ukazna lupina 7: Zagon ogrodja z opcijo cleanup Ukazna lupina 8: Zagon ogrodja z opcijo setupconfig SEZNAM UPORABLJENIH KRATIC IN SIMBOLOV DDL DML ER LAMP SQL UML URL WAMP (angl.: Data Definition Language) (angl.: Data Manipulation Language) (angl.: Entity relationship) model intetitet in povezav Linux, Apache, MySQL in PHP (angl.: Structured Query Language) strukturiran povpraševalni jezik (angl.: Unified Modeling Language) poenoten jezik modeliranja (angl.: Uniform Resource Locator) spletni naslov Windows, Apache, MySQL in PHP VI

15 1 UVOD Današnji svet je poln informacij. Te je potrebno nekam shraniti, da lahko kasneje do njih dostopamo. Ta problem v veliki meri rešujejo podatkovne baze. Glede na to, da lahko poizvedbe (angl.: query), ki nam vrnejo podatke iz podatkovne baze,napišemo na več načinov, je neizogibno,da se le te med seboj po kakovosti razlikujejo. Hkrati je priporočljivo pri poizvedbah, ki iščejo določeno vrednost ali združujejo podatke iz večih tabel, postaviti indekse.indeksi so podatkovne strukture, ki omogočajo hitroizvedbo tovrstnih poizvedb.pri srednjih in večjih projektih imamo veliko uporabnikov in posledično veliko poizvedb na sekundo.s tem se pojavi vprašanje, kakšna je idealna postavitev indeksov ter ali so naše poizvedbe optimalne. To diplomsko delo se posveča MySQL podatkovnim bazam in rešuje problem optimalnepostavitve indeksov, poleg tega pa se tudi dotakne predlogov optimalne zasnove poizvedb.podatkovno bazo ponavadi uporabljamo v navezi z enim od programskih jezikov. MySQL se pogosto uporablja v povezavi spopularnim programskim jezikom PHP za razvoj dinamičnih spletnih vsebin.drugi proizvajalci podatkovnih baz za njihponujajo podobna orodjaza svoje podatkovne baze, vendar je potrebno njihove poizvedbe v orodje vnašati ročno.naše ogrodje to stori samodejno, s pregledom PHP izvorne kode projekta. Poleg tega ima dodatno prednost, da se s časom uči, ali je glede na število vpisov v bazo postavitev indeksa smotrna. Diplomsko delo je sestavljeno iz treh delov. Prvi zajema drugo poglavje, kjerbomo spoznali podatkovne baze in pripadajočesisteme za upravljanje s podatkovnimi bazami.pojasnili bomo osnovne pojme, ki se pojavljajo v podatkovnih bazah. Nato si bomo ogledalipodatkovno bazomysqlteropisaliekstrakcijo podatkov iz podatkovne baze.pod prvi del spada še tretje poglavje, kjer bomo opisali programski jezik PHP in razloge za njegovo uporabo. Drugi del diplomske naloge zajema naslednja tri poglavja, ki se posvečajo orisu ogrodja, ki smo ga razvili. V četrtem poglavju si bomo pogledali naloge ogrodja. Sledi peto poglavje, kjer bomo opisali arhitekturo ogrodja in njegovo delovanje. Implementacijski detajli so zbrani v šestem poglavju. V zadnjem delubomo predstavili uporabo ogrodja in rezultate. V petem poglavju bomo predstavili uporabo ogrodja. Sledi šesto poglavje,kjer bomo na dveh različnih projektih s pripadajočima podatkovnima bazama naredili primerjalne teste(angl.: benchmark test)s stanjem pred in po uporabi ogrodjater ovrednotili rezultate. Sklepne ugotovitve diplomskega dela 1

16 predstavlja sedmo poglavje, kjer bomo povzeli dosežke, opisali probleme, s katerimi smo se srečali tekom razvoja,ter omenili smernice za nadaljnje delo. 2

17 2 PODATKOVNE BAZE Poglavje je namenjenopregledu podatkovnih baz s pripadajočimi sistemi za njihovo upravljanje in problematike, ki se ji posveča to diplomsko delo. V prvem podpoglavjubomo spoznali,kaj podatkovne baze sploh so, kaj nam ponujajo in zakaj so tako uporabne, da jih srečujemona vsakem koraku. Naslednje podpoglavje je namenjeno pregledupodatkovne bazemysql. Zadnje podpoglavjeje namenjeno problemu ekstrakcije podatkov iz podatkovne baze, kjer si bomo ogledali možnosti za pohitritev izvajanja poizvedb. 2.1 Podatkovna baza Podatkovne bazeso organizirane zbirke podatkov. Pojavile so se zaradi vse večje potrebe po shranjevanju podatkov ter hitrem dostopu do njih. Podatki ponavadi modelirajo stanje iz realnega sveta (primer: zasedenost sob v hotelu), na način, ki nam omogoča premišljeno odločanje o prihodnosti (primer:rezervacija proste sobe v hotelu). Besedna zveza»podatkovna baza«se nanaša na zbirko podatkov in njihove pripadajoče podatkovne strukture, ne pa tudi na sisteme za upravljanje z podatkovnimi bazami. Sliednji so programski paketi, ki nam omogočajo učinkovito, uporabnikom prijazno in večuporabniško okolje, namenjeno shranjevanju, vzdrževanju in dostopanju do medsebojno povezanih podatkov[11]. Prvi začetki podatkovnih baz in njihovih sistemov upravljanja segajo v obdobje, ko se je večina informacij shranjevala na magnetne trakove. V 60-ih letih je Charles Bachman iz General Electric razvil prvo podatkovno bazo za splošno uporabo, za kar je prejel Turingovo nagrado. V začetku 70-ih let je Edgar Corr predlagal prvi relacijski podatkovni model, ki je v naslednjih dveh desetletjih postal standard za upravljanje s podatki v organizacijskih sistemih. V istem desetletju se je za podatkovne baze razvila močna teoretična podlaga, s čimer so podatkovne baze postaleakademsko področje. V 80-ih letih se je razvil strukturiran povpraševalni jezik(angl.: Structured Query Language, krat.: SQL)(IMB-ov projekt System R), ki je bil v poznih letih istega desetletja tudi standardiziran. Standard se imenuje SQL-92. V naslednjem desetletju je veliko proizvajalcev podatkovnih baz (IBM DB2, Oracle 8, Informix UDS) razširilo svoje sisteme s podporo kompleksnejšim poizvedbam in novim podatkovnim tipom, kot so slike inbesedilo. Naslednja stopnja je bila vstop podatkovnih baz v dobo interneta, kjer so nadomestili prvo generacijo spletnih mest, ki je shranjevala podatke v datotekah operacijskega sistema[1, 2]. 3

18 2.1.1 Sistem za upravljanje s podatkovno bazo Naloge in zmožnosti sistemov za upravljanje s podatkovno bazo[11, 12]: definiranje sheme podatkovne baze in shranjevanje te sheme na zunanjem pomnilniku, shranjevanjevsebine v podatkovno bazo, poizvedbe po vsebini v podatkovni bazi, spreminjanje vsebine vpodatkovni bazi, omogoča kreiranje, spreminjanje ter brisanje tabel in podatkovnih baz z modulom, imenovanimddl (angl.: Data Definition Language), skrbi za vzdrževanje podatkovne baze z DML (angl.: Data Manipulation Language)modulom, ki omogoča črpanje, brisanje in spreminjanje podatkov v podatkovni bazi, ščiti podatke, zagotavlja integriteto podatkov, izvaja transakcije. Med velike proizvajalce sistemov podatkovnih baz(v nadaljevanju podatkovne baze) štejemo Oracle, IBM in Microsoft (tabela1).mysqlse razvija pod okriljem podjetja Oracle,kije pod njegovo okrilje prišel z nakupom podjetja Sun Microsystems leta 2010[13]. Proizvajalec Prodaja 2011 (v milijonih $) Tržni delež v letu 2011 (%) Oracle ,8 IBM ,2 Microsoft ,0 SAP/Sybase ,6 Teradata 882 3,7 Ostali ,8 Tabela 1: Tržni delež proizvajalcevpodatkovnih baz v letu 2011, vir: Gartner (marec 2012). 4

19 2.1.2 Podatkovni model Podatkovni model je povezana zbirka konceptov, namenjenih opisovanju in manipulaciji s podatki.obstaja več vrst podatkovnih modelov. Hierarhični in mrežni podatkovni model že izginjata iz uporabe.danes se uporabljajo entitetno-relacijski, objektno-relacijski, objektni in relacijskipodatkovni model. Slednji je daleč najbolj v uporabi in ga podpirajo vsi večji proizvajalci podatkovnih baz[14]. Relacijski podatkovni model odlikujejo predvsem naslednje lastnosti [1]: formalno je definiran in osnovan na matematičnih strukturah relacijah, ne vsebuje elementov fizičnega shranjevanja, s čimer je zagotovljena fizična podatkovna neodvisnost, relacije so predstavljive s tabelami, ki so človeku dobro razumljive. Relacijsko podatkovno bazo uporabnik vidi kot množico tabel (slika 1). Tabela je sestavljena iz dveh delov čelne vrstice in podatkovnih vrstic. Atributi Oddelek oddelekid ulica mesto postna_stevilka OD1 Tržaška ulica 55 Ljubljana 1000 OD4 Savinškova ulica 32 Novo mesto 8000 OD2 Gospejna ulica 94 Maribor 2000 OD3 Kopališka ulica 34 Škofja Loka 4220 Primarni ključ Tuji ključ Osebje osebjeid ime priimek spol rojstvo oddelekid OS1 Maja Hribar Ž ID1 OS2 Borut Kovačevič M ID3 OS3 Luka Cesar M ID3 OS4 Sara Lušina Ž ID4 OS5 Ivan Novak M ID1 OS6 Janez Jelenc M ID2 Slika 1: Primer relacije. 5

20 Osnovna koncepta relacijskega podatkovnega modela sta domena in relacija. Relacija je definirana nad množico domen, ki predstavljajo zalogo vrednosti, ki jih lahko zavzame atribut (podatkovni tipi: niz, število, decimalno število, datum, ) in njegove omejitve (pozitivna števila, točno 10 znakov, unikatni podatki, ).Ime stolpca imenujemo atribut. V vsak stolpec lahko shranjujemo le podatke, ki ustrezajo definiranim zalogam vrednosti in omejitvam. Čelna vrstica je več skupaj združenih atributov, ki definirajo relacijsko shemo. Relacijske podatkovne baze povežejo več tabel v eno relacijo. Osnova za povezovanje tabel so primarni in tuji kjuč.primarni ključ (angl.: Primary Key) tabele je stolpec ali kombinacija stolpcev znotraj relacije, ki enolično določa vrstico. Je poseben primer enoličnih ključev (angl.: Unique Key), s to razliko, da primarni ključ ne sme vsebovati vrednostinull. Vrednost NULL je poseben indikator uporabljen v jeziku SQL, ki pove, da podatek v polje ni vpisan. Primer primarnega ključa je EMŠO. Tuji ključ je stolpec ali kombinacija stolpcev znotraj relacije, ki se ujema s ključem druge relacije (lahko tudi iste) Jezik SQL Jezik SQL je osnovni gradnik modernih podatkovnih baz. Med vsemi jeziki za delo s podatkovnimi bazami jenajbolj razširjen [2, 13]. Določen je sstandardom ANSI/ISO SQL. Standard SQL se je začel razvijati leta 1986, danes pa obstaja več različic. Standard SQL-92 je bil izdan v letu 1992, SQL:1999 v letu 1999 itd. Uporablja se kot DML in DDLjezik. Čeprav obstajanatančno definiran SQL standard, jejezik SQL vseeno implementiran na različne načine. Oracle imalastnistandard PL/SQL, Microsoft SQL Server pa Transact-SQL.Ne glede na to sta obe verziji zgrajeni na standardu SQL.MySQL verzija 5.* v celoti podpira standard ANSI/ISO SQL [16]. V nadaljevanjusoprimeri osnovnih stavkov, stavke pomembne za optimizacijo pa bomo razčlenili v poglavju 2.3. Osnovni stavki za delo s tabelami: CREATE DATABASE: ustvari novo podatkovno bazo, CREATE TABLE: ustvari novo tabelo v podatkovni bazi, ALTER TABLE: spremeni tabelo v podatkovni bazi, DROP TABLE: odstrani tabelo iz podatkovne baze, INSERT: vnese novo vrstico v tabelo, SELECT: vrne vrstice iz podatkovne baze, UPDATE: posodobi vrstice v podatkovni bazi, DELETE: zbriše vrstice iz podatkovne baze. 6

21 2.2 Podatkovna baza MySQL Začetki baze MySQL segajo v leto 1979, ko je Michael»Monty«Widenius za švedsko podjetje TcX ustvarilorodje UNIREG za podatkovne baze. Nato je leta 1994 TcX začel iskati podatkovno bazo s podporo zajezik SQL za uporabo pri razvijanju spletnih aplikacijah. Testirali so nekaj komercialnih ponudnikov podatkovnih baz, vendar so ugotovili, da so vsi prepočasni za njihove velike tabele. Ogledali so si msql, vendar tani imelzahtevanih funkcionalnosti, kijih je TcX potreboval, zato so se znova obrnili na Michaela Wideniusa, ki je razvil današnji MySQL. Leta 1996 je bil izdan MySQL , ki je bil dostopen v obliki binarne datoteke za operacijska sistema Linux in Solaris. Danes je na voljo v obliki binarnih datotek in izvorne kode za praktično vse operacijske sisteme. Ustanovljeno je bilo podjetje MySQL AB, ki je distribuiralo MySQL pod kombinacijo odprtokodnein komercialne licence; slednja vklučuje tehnično podporo. Leta 2008 je podjetje Sun Microsistems kupilo MySQL AB, slednjega pa je leta 2010 kupil Oracle[3]. Prednosti baze MySQL [3]: je ena najhitrejših podatkovnih baz, katerouporabljajo podjetja Associated Press, Cox Communications, Google, Lufthansa, MIT Lincoln Labs, NASA, Sabre Holdings, Yahoo in drugi [17], veliko lažje vzdrževanje in upravljanje kot pri večjih podatkovnih bazah, celostnapodpora jeziku SQL[15], verzija za skupnost (MySQL Community Edition) je brezplačna, distribucijske datoteke so zelo majhne v primerjavi z drugimi podatkovnimi bazami, je na voljo na vseh komercialno dostopnih operacijskih sistemih (MAC OS X, Windows, HP-UX, Unix, Linux), ima polno podporo za povezljivost preko omrežja, prav tako je možen dostop preko interneta, kjer so povezave enkriptirane z uporabo protokolassl, je odprtokodni projekt. Do nedavnega je bilo na račun MySQL tudi nekaj kritik, sajni podpiral transakcij in tujih ključev. Vendar se je MySQL v zadnjih letih močno razvijal in dobil obe omenjeni funkcionalnosti, poleg tega pa tudi poglede (angl.: views), bazne procedure (angl.: stored procedure) in prožilnike (angl.: triggers). S tem se je približal večjim proizvajalcem podatkovnih baz. Posledica tega je, da danes vse več podjetij, ki so v preteklosti uporabljala rešitvevodilnih proizvajalcihpodatkovnih baz,danes uporablja MySQL [3]. 7

22 2.2.1 Indeksiranje Indeks je podatkovna struktura, ki nam omogoča, da v poizvedbi poiščemo vrstice iz tabele mnogo hitreje kot sicer. Če ne uporabimo indeksa, mora MySQL preiskati celotno tabelo, pri čemer začne pri prvi vrstici in preišče celotnozbirko podatkov, dokler ne najde ustreznih zadetkov. Časovna zahtevnost iskanja v tem primeru narašča linearno s številom vrstic O(n), zato je iskanje hitro, dokler vrstic v tabeli ni preveč. Ko velikost tabele narašča, pa ustrezno postavljen indeks pospeši iskanje, saj je v tem primeru časovna zahtevnost iskanja O(log n). Indeks lahko postavimo čez enegaali več stolpcev[4, 20]. Slabost indeksov je, da zasedajo dodatni prostor v računalniškem pomnilniku in da lahko upočasnijo vnose podatkov v tabelo, saj je potrebno pri vsakem vpisu ponovno uravnotežiti drevo, kar ustreza časovni zahtevnosti O(log n) [4, 20]. Večina MySQL indeksov (primarni ključ, unikaten ključ, indeks, iskanje po polnem besedilu (angl.: full-text)) uporablja kot podatkovno strukturo uravnoteženo iskalno dvojiško drevo [ 21]. To je podatkovna struktura, kjer sta v vsakem vozlišču (elementu oz. očetu)dve povezavi na naslednji vozlišči (levi in desni sin), ki sta enake strukture. Vozlišče, kjer začnemo drevesno strukturo, je koren drevesa, vozlišča brez sinov pa so listi drevesa. Vrednosti elementov v levem poddrevesu so manjše od vrednosti korena, vrednosti elementov v desnem poddrevesu pa so večje od vrednosti korena. V iskalnem dvojiškem drevesu ni podvojenih elementov.dvojiško drevo je urejeno, če za vsako vozlišče velja, da je vrednost levega sina manjša, vrednost desnega sina pa večja od njegove vrednosti [5]. 8

23 Predpostavimo, da imamo naslednje podatke: 8, 10, 3, 6, 14, 7, 4, 13, 1. Postopek izgradnje urejenega dvojiškega drevesa je naslednji: 1. vzamemo prvo številko, to je 8, in jo vstavimo v prazno drevo; ta številka postane koren drevesa; 2. naslednja številka je 10;primerjamo jo s korenom drevesa in ker je 10 > 8, jo vstavimo v desno poddrevo; 3. naslednja je 3; primerjamo jo s številko 8 in jo vstavimo v levo poddrevo; 4. naslednja je 6; ker je 6 < 8, jo vstavimo v levo poddrevo, vendar ne smemo pozabiti na številko 3; ker je 3 < 6, jo vstavimo v desno poddrevo številke 3; 5. naslednja je 14; ker je 14 > 8, gremo v desno in ker je 13 > 10, jo vstavimo v desno poddrevo številke 10; 6. naslednja je 7; ker je 7 < 8, gremo v levo; ker je 7 > 3, gremo v desno in ker je 7 > 6, jo vstavimo v desno poddrevo številke 6; 7. naslednja je 4; ker je 4 < 8, gremo v levo; ker je 4 > 3, gremo v desno in ker je 3 < 6, jo vstavimo v levo poddrevo številke 6; 8. naslednja je 13; ker je 13 > 8, gremo v desno; ker je 13 > 10, gremo v levo in ker je 13 < 14, jo vstavimo v levo poddrevo številke 14; 9. zadnja številka je 1; ker je 1 < 8, gremo v levo in ker je 1 < 3, jo vstavimo v levo poddrevo številke 3. Po opravljenem postopku dobimo dvojiško drevo narisano na sliki 2. Slika 2: Primer iskalnega dvojiškega drevesa. V primeru, da bi želeli iz podatkov poiskati številko 7, bi bil postopek sledeč: 1. začnemo pri korenu drevesa in primerjamo številko 7 s številko 8, 2. 7 < 8, zato gremo v levo poddrevo, 3. 7 > 3, zato gremo v desno poddrevo, 4. 7 > 6, zato gremo v desno poddrevo, 5. ker je 7 = 7, smo našli iskani element. 9

24 Da smo našli številko 7, smo potrebovali 4 operacije (primerjave). V splošnem potrebujemo za iskanje elementa v urejenem dvojiškem drevu toliko operacij, kot imamo nivojev drevesa. Le te izračunamo z enačbolog 2n, kjer je n število elementov v polnem drevesu, rezultat pa nato pretvorimo v celo število. To seveda velja samo takrat, ko je drevo uravnoteženo. Če zgradimo neuravnoteženo dvojiško drevo s prejšnjimi podatki, dobimo v najslabšem primeru dvojiško drevo na sliki 3. V tem primeru je hitrost iskanja linearna, enako kot pri linearnem seznamu [5]. Slika 3: Neuravnoteženo dvojiško drevo. Če poiščemo številko 7 v tem drevesu, imamo postopeksledeč: 1. začnemo pri korenu drevesa in primerjamo številko 7 s številko 1, 2. 7 > 1, zato gremo v desno poddrevo, 3. 7 > 3, zato gremo v desno poddrevo, 4. 7 >4, zato gremo v desno poddrevo, 5. 7 > 6, zato gremo v desno poddrevo, 6. ker je 7 = 7, smo našli iskani element. Da smo našli številko 7, smo potrebovali 5 operacij (primerjav).to jeena operacija več kot pri uravnoteženem drevesu. V najslabšem primeru, ko bi iskali število 14, pa bi potrebovali celo 9 operacij.v primeru neuravnoteženega dvojiškega drevesa je torej časovna zahtevnost iskanja O(n). Iz tega sledi, da je uravnoteženje nujno, da je iskanje optimalno. Za postopek uravnoteženja velja, daje časovna zahtevnost O(log 2n)samo, če je pred vnosom novega podatka drevo že bilo uravnoteženo, zato je to nujno delati sproti ob vsakem vnosu. 10

25 Če bi številko 7 iskali v (linearnem) seznamu, bi potrebovali 6 operacij. V splošnem v seznamu potrebujemo toliko operacij, kolikor je elementov. Vidimo, da je iskanje z indeksi opazno hitrejše. Slabost je ta, da tudi za vnašanje novega elementa v drevo potrebujemo v najslabšem primeru log 2n operacij, medtem ko za navaden seznam potrebujemo samo eno operacijo. Poleg tega dvojiško drevo zaseda dodaten prostor v pomnilniku.postavitev indeksov je torej kompromis med hitrejšim iskanjem podatkov in počasnejšimi vnosi ter večjo porabo pomnilnika. 2.3 Optimizacije Ker za MySQL niorodja, ki bi predlagalo postavitev indeksov glede na dane poizvedbe, smo se odločili, da ga izdelamo sami. Trenutno se indekse tipično postavlja glede na pretekle izkušnje in ročno,kjer si lahko delno pomagamo s stavkomexplain.drugi proizvajalci podatkovnih baz ponujajo podobna orodja za svoje podatkovne baze (primer je Index Tuning Wizard v SQL Query Analyzer [18]), vendar je treba poizvedbe v orodje vnašati ročno. Naše ogrodje stori to samodejno s pregledom PHP izvorne kode.hkrati se s časom uči, kakšno je številostavkovselect in koliko je posodobitvenih stavkov. Na podlagi teh podatkov in števila vrstic v tabelah nam predlaga odstranitev indeksov, če to predstavlja optimalno rešitev. V naslednjih podpoglavjih bomo podrobneje razčlenili standardne poizvedbe v MySQL in pogledali možnosti za njihove optimizacije Stavek SELECT S stavkom SELECT pridobimo podatke iz ene ali več tabel oziroma pogledov. V večini aplikacij je SELECT najbolj uporabljen stavek. Vključuje lahko stavek JOIN in podpoizvedbe (angl.: subquery). V sintaksi 1 izraz select_expr označuje, katere vrstice iz tabelenaj poizvedba vrne. Opcija table_refences je razčlenjena vpoglavju , opcija expr, ki se pojavlja v sintaksi 2 in vseh naslednjih definicijah sintaks, je podrobno razčlenjena v sintaksi 2. 11

26 SELECT [ALL DISTINCT DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr...] [FROM table_references [WHERE where_condition] [GROUP BY {col_name expr position} [ASC DESC],... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name expr position} [ASC DESC],...] [LIMIT {[offset,] row_count row_count OFFSET offset}] [PROCEDURE procedure_name(argument_list)] [INTO OUTFILE 'file_name' export_options INTO DUMPFILE 'file_name' INTO var_name [, var_name]] [FOR UPDATE LOCK IN SHARE MODE]] Sintaksa 1: Stavek SELECT [22]. Stavek SELECT lahko vsebuje več opcijskih stavkov, od katerih so za naše ogrodje najbolj pomembni stavki WHERE, GROUP BY in ORDER BY. Te bomo v naslednjih poglavjih podrobno razčlenili. 12

27 expr: expr OR expr expr expr expr XOR expr expr AND expr expr&&expr NOT expr! expr boolean_primary IS [NOT] {TRUE FALSE UNKNOWN} boolean_primary boolean_primary: boolean_primary IS [NOT] NULL boolean_primary<=>predicate boolean_primarycomparison_operatorpredicate boolean_primarycomparison_operator {ALL ANY} (subquery) predicate comparison_operator: = >= > <= < <>!= predicate: bit_expr [NOT] IN (subquery) bit_expr [NOT] IN (expr [, expr]...) bit_expr [NOT] BETWEEN bit_expr AND predicate bit_expr SOUNDS LIKE bit_expr bit_expr [NOT] LIKE simple_expr [ESCAPE simple_expr] bit_expr [NOT] REGEXP bit_expr bit_expr bit_expr: bit_expr bit_expr bit_expr&bit_expr bit_expr<<bit_expr bit_expr>>bit_expr bit_expr + bit_expr bit_expr - bit_expr bit_expr * bit_expr bit_expr / bit_expr bit_expr DIV bit_expr bit_expr MOD bit_expr bit_expr % bit_expr bit_expr ^ bit_expr bit_expr + interval_expr bit_expr - interval_expr simple_expr simple_expr: literal identifier function_call simple_expr COLLATE collation_name param_marker variable simple_expr simple_expr + simple_expr - simple_expr ~ simple_expr! simple_expr BINARY simple_expr (expr [, expr]...) ROW (expr, expr [, expr]...) (subquery) EXISTS (subquery) {identifierexpr} match_expr case_expr interval_expr Sintaksa 2:Izraz expr [23]. 13

28 2.3.2 Stavek EXPLAIN {EXPLAIN DESCRIBE DESC} tbl_name [col_name wild] {EXPLAIN DESCRIBE DESC} [EXTENDED] SELECT select_options Sintaksa 3: Stavek EXPLAIN [19]. Ena od metod optimizacij, ki jihuporabljamo za MySQL poizvedbe, jestavek EXPLAIN. Uporabljamo ga bodisi za povratno informacijo, kako MySQL izvaja poizvedbo,bodisi kot sinonim stavku DESCRIBE. Če pred stavkom SELECT uporabimo ključno besedoexplain, MySQL prikaže informacije o tem, kako so tabele združene in katere indekse se uporablja (primer kaže slika 4).Ti dve informaciji nam pomagata pri oceni postavitve indeksov, vendar samo, česo indeksi že predhodno postavljeni[4]. Slika 4: Stavek EXPLAIN s poizvedboselect [4] Stavek WHERE Stavek WHERE definira pogoje, ki jih morajo vrstice izpolnjevati, da jih bo poizvedba vrnila. Vopcijiwhere_condition, definiraniv sintaksi 1, uporabimo MySQL funkcije in operatorje, definirane v sintaksi 2. Kostavka WHERE ne uporabimo, poizvedba vrne vse vrstice tabele. V relacijski algebri jestavek WHEREekvivalent selekciji. Da MySQL uporabi indeks, mora stavekwhere ustrezati naslednjim zahtevam [21]: dovoljeni operatorji so =, >, >=, <, <=in BETWEEN, pogojno lahko uporabimo tudi operator LIKE, vendar samo v primeru, da se maskirni znakpojavi drugje kot na začetku konstante (primer: LIKE '%primer' ne bo uporabil indeksa, LIKE 'primer%' pa bo uporabil indeks), logični operator med osnovnimi delistavka WHERE mora biti operator AND, paziti moramo tudi na vrstni red polj v indeksu; indeks i_2(a, B, C) ni enak indeksu i_1(a, C, B), ko združujemo indekse iz različnih poizvedb. 14

29 Primeri SQL stavkov, kjer MySQL uporabi indekse: SELECT * FROM tbl_name WHERE col1=val1; SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2; SELECT * FROM tbl_name WHERE key_col LIKE 'Patrick%'; SELECT * FROM tbl_name WHERE key_col LIKE 'Pat%_ck%'; Primeri SQL stavkov, kjer MySQL ne uporabi indeksov: SELECT * FROM tbl_name WHERE key_col LIKE '%Patrick%'; SELECT * FROM tbl_name WHERE key_col LIKE other_col; SELECT * FROM tbl_name WHERE index_part1=1 OR index_part2=10; Stavek UNION Stavek UNION uporabljamo, da združimo rezultate več SELECT stavkov v en sklop rezultatov. V relacijski algebri je stavku UNION ekvivalentna operacija unija. SELECT... UNION [ALL DISTINCT] SELECT... [UNION [ALL DISTINCT] SELECT...] Sintaksa 4: Stavek UNION [24]. Primer poizvedbe UNION: (SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10) UNION (SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10); Stavek JOIN Stavek JOIN združi vrstice iz dveh ali večtabel v en sklop vrstic. Opcijski ukazindex_hint je razčlenjen v naslednjem poglavju.mysql uporabi indeks na stolpcih,ki so uporabljeni v opcijijoin_condition.vrstice lahko združimo tudi sstavkom WHERE. Ta možnost je prikazana v primerih. 15

30 table_references: table_reference [, table_reference]... table_reference: table_factor join_table table_factor: tbl_name [[AS] alias] [index_hint] table_subquery [AS] alias ( table_references ) { OJ table_reference LEFT OUTER JOIN table_reference ON conditional_expr } join_table: table_reference [INNER CROSS] JOIN table_factor [join_condition] table_reference STRAIGHT_JOIN table_factor table_reference STRAIGHT_JOIN table_factor ON conditional_expr table_reference {LEFT RIGHT} [OUTER] JOIN table_referencejoin_condition table_reference NATURAL [{LEFT RIGHT} [OUTER]] JOIN table_factor join_condition: ON conditional_expr USING (column_list) Sintaksa 5: Stavek JOIN [25]. Primeri JOIN poizvedb, ki ustrezajo sintaksi 5: SELECT A.*, B.* FROM tbl_name AS A, tbl_name AS B WHERE A.col1 = B.col1 SELECT t1.name, t2.salary FROM employee AS t1 INNER JOIN info AS t2 ON t1.name = t2.name; SELECT t1.name, t2.salary FROM employee t1 INNER JOIN info t2 ON t1.name = t2.name; SELECT * FROM (SELECT 1, 2, 3) AS t1; SELECT t1.name, t2.salary FROM employee AS t1 LEFT JOIN b USING (c1,c2,c3) SELECT left_tbl.* FROM { OJ left_tbl LEFT OUTER JOIN right_tbl ON left_tbl.id = right_tbl.id } WHERE right_tbl.id IS NULL; Indekspopravki Če v poizvedbi uporabimo ukaza USE INDEX aliforce INDEX, MySQLpri dani poizvedbi uporabi enega od naštetih indeksov v opciji index_list. Z ukazom IGNORE INDEX MySQL določenega indeksa ne uporabi. Poleg omenjenih možnosti je na voljo še ključna beseda FOR, ki ji sledijo JOIN, ORDER BY ali GROUP BY. 16

31 tbl_name [[AS] alias] [index_hint_list] index_hint_list: index_hint [, index_hint]... index_hint: USE {INDEX KEY} [FOR {JOIN ORDER BY GROUP BY}] ([index_list]) IGNORE {INDEX KEY} [FOR {JOIN ORDER BY GROUP BY}] (index_list) FORCE {INDEX KEY} [FOR {JOIN ORDER BY GROUP BY}] (index_list) index_list: index_name [, index_name]... Sintaksa 6: Sintaksa uporabe indekspopravkov [26]. Primeri SQL poizvedb, ki ustrezajo sintaksi 6: SELECT * FROM table1 USE INDEX (col1_index, col2_index) WHERE col1=1 AND col2=2 AND col3=3; SELECT * FROM table1 IGNORE INDEX (col3_index) WHERE col1=1 AND col2=2 AND col3=3; SELECT * FROM t1 USE INDEX (i1) IGNORE INDEX FOR ORDER BY (i2) ORDER BY a; Stavek ORDER BY Stavek ORDER BY uporabljamo za sortiranje vrstic. Sortiramo jih na dva načina. Če v poizvedbi poleg stavka ORDER BY uporabimo ključno besedo ASC, bodo vrstice sortirane od najmanjše proti največji vrednosti in obratno v primeru uporabe ključne besede DESC. Da lahko MySQL uporabi indeks, mora stavek ustrezati naslednjim zahtevam [27]: vsi stolpci imajo enako vrsto sortiranja(asc ali DESC), uporablja lahko samo imena stolpcev in ključni besedi ASC ali DESC, ne pa tudi izrazov in funkcij, sestavljen je samo iz stolpcev iste tabele. [ORDER BY {col_name expr position} [ASC DESC],...] Sintaksa 7: Stavek ORDER BY [21]. Primeri SQL stavkov, kjer MySQL uporabi indekse: SELECT * FROM t1 ORDER BY key_part1, key_part2,...; SELECT * FROM t1 WHERE key_part1 = 1 ORDER BY key_part2; SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC, key_part2 DESC; 17

32 Primeri SQL stavkov, kjer MySQL ne uporabi indeksov: SELECT * FROM t1 ORDER BY key1, key2; SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC; SELECT * FROM t1 ORDER BY ABS(key); Stavek GROUP BY Stavek GROUP BY v povezavi z agregatnimi funkcijami (angl.: aggregate functions) uporabljamo, da združimo vrstice. Da lahko MySQL uporabi indeks, morastavek ustrezati naslednjima zahtevama [28]: vstavku SELECT sta ediniuporabljeni agregatni funkciji MIN in MAX, paziti moramo tudi na vrstni red polj v indeksu;indeks i_2(a, B, C) ni enak indeksu i_1(a, C, B), ko združujemo indekse iz različnih poizvedb. [GROUP BY {col_name expr position} [ASC DESC],... [WITH ROLLUP]] Sintaksa 8: Stavek GROUP BY [21]. Ob predpostavki, da imamo postavljena dva indeksai_1(c1, c2, c3) in i_2(c1, c2, c3, c4),ju MySQL uporabi v naslednjih primerih: SELECT c1, c2 FROM t1 GROUP BY c1, c2; SELECT c1, MIN(c2) FROM t1 GROUP BY c1; SELECT c1, c2 FROM t1 WHERE c1 < const GROUP BY c1, c2; SELECT MAX(c3), MIN(c3), c1, c2 FROM t1 WHERE c2 > const GROUP BY c1, c2; SELECT c2 FROM t1 WHERE c1 < const GROUP BY c1, c2; SELECT c1, c2 FROM t1 WHERE c3 = const GROUP BY c1, c2; Primeri stavkov, kjer MySQL ne uporabi indeksov: SELECT c1, SUM(c2) FROM t1 GROUP BY c1; SELECT c1, c2 FROM t1 GROUP BY c2, c3; 18

33 3 PHP PHP jesplošno namenski programski jezik, prvotno namenjen izdelavi dinamičnih spletnih strani. PHP kodo vključimo kar neposrednov HTML stran, izvršena pa je vsakokrat, ko je naša stran obiskana[6, 29]. Jezik je leta 1994 ustvarilrasmus Lerdorf. Kmalu zatem ga je posvojilo veliko število razvijalcev, ki so ga pripeljali skozi štirivečje verzije. Trenutno je aktualna verzija 5.4, ki je izdana marca 2013.Kljub temu naše ogrodje deluje s PHP verzijo od 5.1naprej, s čimer omogočamo združljivost sstarejšimi projekti. Kljub prvotnemu namenu programiranja dinamičnih spletnih strani se je jezik kasneje razvil in danes omogoča samostojno pisanje namiznih aplikacij ter programiranje skript za vmesnik z ukazno vrstico (angl.:command-line interface, CLI) [30]. Prva možnost ni tako zanimiva in je redko uporabljena, zadnja možnost pa je bila uporabljena za zagon našega ogrodja. Razlog, da je izvorna koda našega ogrodjanapisana v PHP, tiči v tem, da je ta najbolj uporabljen jezik za spletne strani[31] in je v navezi z MySQL in Apache spletnim strežnikom tudi eden najbolj uporabljenih paketov za poganjanje spletnih strani. Prednosti PHP [29, 32]: poceni in efektivna horizontalna skalabilnost, poleg MySQL podpore se je možno povezati tudi na PostgreSQL, Oracle, DB2itd., ker je bil PHP zasnovan za uporabo na spletu, ima veliko vgrajenih funkcij, ki so uporabne za splet; primeri so povezovanje na spletne povezovalne tehnologije (angl.: web services), XML podpora, piškotkiali pošiljanje spletne pošte, od verzije 5 dalje ima močno podporo za objektno programiranje (angl.: object oriented programming);ker se zgleduje po Javi in C++, ima skoraj vse, kar odlikuje objektni model Jave in C++: dedovanje, privatne in javne deklaracije, abstraktne razrede, vmesnike (angl.: interface), konstruktorje (angl.: constructor) in ostalo, dostopnost na večini operacijskihsistemov, zaradi česar je izvorna koda prenosljiva, je odprtokodni projekt in s tem brezplačen, je najbolj podprt pri spletnih gostovanjih, ima zelo obširno dokumentacijo, ki jo najdemo na uradni spletni strani in opisujevse aspekte programskega jezika,zaradi razširjenosti jezika pa so na voljo izvorne kode ter ogromno vtičnikov in drugih vsebin, ki namolajšajo razvoj programske opreme. 19

34 20

35 4 NALOGE OGRODJA V poglavju 2.3 smo definirali pogoje, katerim mora poizvedba ustrezati, da lahko MySQL uporabi indeks. Te pogoje mora naše ogrodje upoštevati pri predlogih, ki jih sintetizira. Preden indeks postavimo, potrebujemo oceno njegove upravičenosti, kar ugotavljamo z naslednjo cenilko. MySQL poskuša indekse shranjevati v pomnilnik, v kolikor je ta na voljo. V naslednji analizi smo upoštevali, da se celoten indeks nahaja v pomnilniku. Analiza ne vsebuje časa, ki ga podatkovna baza potrebuje za realokacijo podatkov v pomnilniku. Da lahko izračunamo,kolikšno je maksimalno število operacij, ki jih zahtevajo poizvedbe, potrebujemo število poizvedb v podatkovni bazi in časovno kompleksnost operacij, ki so zbrane v tabeli 2. Brez indeksa Z indeksom SELECT O(n) O(log 2 n) INSERT O(1) O(log 2 n) UPDATE O(1) O(log 2 n) DELETE O(1) O(log 2 n) Tabela 2: Časovna zahtevnost operacij [5]. Izračunajmo,kolikšno je maksimalno število operacij, ki jih zahtevajote poizvedbe, če indeks ni postavljen: C brez indeksov n, m s, m i, m u, m d = m s n + m i + m u + m d (1) Pri tem smo uporabili naslednjo notacijo: n število vrstic v tabeli, m s število poizvedb v tabeli, m i število vnosov v tabelo, m uštevilo posodobitev tabele, m d število zbrisov v tabeli. Izračunajmo še maksimalno število operacij, ki jihzahtevajo iste poizvedbe, če jeindekspostavljen: C z indeksom n, m s, m i, m u, m d = m s log 2 n + m i log 2 n + m u log 2 n + m d log 2 n = log 2 n (m s + m i + m u + m d ) (2) 21

36 Če delimoenačbo2zenačbo 1, dobimo: C n, m s, m i, m u, m d = C z indeksom = log 2 n (m s + m i + m u + m d ) (3) C brez indeksov m s n + m i + m u + m d V kolikor je C 1, postavimo indeks, v nasprotnem primeru ga izpustimo. Ko imamo na voljo oceno o koristnosti indeksa, se ogrodje odloči, ali je indeks koristno uporabiti. Naše ogrodje poleg ocene pravilne postavitve indeksov pregleda SQL poizvedbe in ugotovi napačne odločitve, ki se pojavijo v poizvedbah. Za te poizvedbe poda predloge za izboljšave. 4.1 Stavek SELECT Ogrodje v primeru uporabe maskirnega znaka (angl.: wildcard) vrne priporočilo, naj se temu izogibamo, saj lahko poizvedba traja dlje zaradi morebitne velike količine vrnjenih podatkov. 4.2 Stavek WHERE Ogrodjepoleg pravilne postavitve indeksov poda še naslednje predloge: v primeru uporabe operatorja LIKE in maskirnega znaka pred konstanto (primer: LIKE '%primer') nas opozori, da indeks ne bo uporabljen, v primeru, da uporabimo kot logični operator operacijoor, nam svetuje, naj raje uporabimo stavek UNION in združimo dve poizvedbi. 4.3 Stavek ORDER BY Ogrodjepoleg pravilne postavitve indeksov poda še naslednje predloge: v primeru, da je stavek sestavljen iz stolpcev različnih tabel, nas opozori, da v tem primeru ne moremo uporabiti indeksa in se lahko zgodi, da je poizvedba počasna, če uporabimo različna vrstna reda sortiranja (ASC in DESC), nas ogrodje na to ustrezno opozori. 4.4 Stavek GROUP BY Poleg pravilne postavitve indeksov ogrodje v primeru, da je stavek sestavljen iz stolpcev različnih tabel, opozori, da v tem primeru ne moremo uporabiti indeksa in se lahko zgodi, da je poizvedba počasna. 22

37 5 ARHITEKTURA OGRODJA V poglavjih2.3in 4smo naredili pregledmožnosti izboljšanja poizvedb teropredelili, kje in kako postaviti indekse. V tem poglavju bomo predstavili implementacijo ogrodja, ki to izvede. V prvem podpoglavju bomo na grobo opisali postopek analiziranja poizvedb, v naslednjih podpoglavjih pa bomo vsak korak podrobneje razčlenili. 5.1 Opis postopka Da naše ogrodje za optimizacijo poizvedb deluje, imamo v postopku analiziranja tri korake, kot kaže slika 5. Slika 5: Postopek analiziranja poizvedb Vloga posameznih korakov je naslednja: iskanje poizvedb:preden lahko analiziramo MySQL poizvedbe, jih moramo v PHP izvorni kodi poiskati,čemur je namenjeni prvi korak postopka, analiza in optimizacija poizvedb: ko smo MySQL poizvedbe našli, jih analiziramo; kot izhod koraka so predlogi postavitve indeksovin predlogi za izboljšave poizvedb, testiranje sprememb: ta korak je opcijski in se izvede,če se uporabnik odloči zatestiranje časaizvajanja predlaganih izboljšav. V nadaljevanju bomo vsakega od korakov podrobno opisali. 5.2 Iskanje poizvedb Razred ScanCode preišče PHP izvorno kodo datotek in v njih vrine košček PHP kode. Te koščke kode zažene razred Crawlerin s tem v podatkovno bazo shrani MySQL poizvedbe, katere potrebujemo v drugem koraku. Razred FileManipulation je pomožni razred, namenjen lažjemu delu z datotekami. 23

38 5.2.1 Razred ScanCode Slika 6 je grobi opis poteka iskanja poizvedb v PHP kodi. Skozi datoteke projekta se sprehodimo zrazredom RecursiveIterator, ki je del standardne PHP knjižnice [34].Najprej preverimo PHP izvorno kodo, četa komunicira z bazo podatkov. To storimo zato, ker se inicializacija objekta lahko zgodi v drugi datoteki, kot se zgodi MySQL poizvedba.mysql objektezapišemo v mysqliobjects lastnost razreda, da kasneje do njih dostopamo. Slika 6: Diagram poteka iskanja MySQL poizvedb. V PHP kodi iščemo veljavne poizvedbe tako, da jo najprej s PHP Tokenizer-jem spravimo v zaporedje znakov sfunkcijotoken_get_all, katera sprejme izvorno kodo datoteke in vrne poljeznakov [35]. Z njihovim pregledom nato algoritem poišče klice funkcij,v katerih se izvajajo MySQL poizvedbe. Upoštevati moramo naslednje [36, 37]:mysql_query, query, mysql_query, multi_query, mysqli, real_query in mysqli_realy_query. Prav tako moramo upoštevati tudi predhodno najdene MySQLobjekte in z njimi klicane metode: query, multi_query in real_query. Komentirano kodo ignoriramo. 24

39 V vrstice, kjer najdemo veljavne MySQL poizvedbe, vrinemo PHP kodo: "\$_optimizequery = mysql_real_escape_string({query}); mysql_query(\"insert INTO ". $config['mysql_schema']. ".optimizequeries (query) VALUES('\". \$_optimizequery. \"') \");" Tanam zagotovi, da se bodo poizvedbe zapisale v tabelo optimizequeries, ko bomo s spletnim pajkom(angl.: web crawler), ustvarjenim vrazreducrawler,preiskalispletne naslove (angl.: Uniform Resource Locator, krat.: URL) projekta. Na koncu moramo zapisati lokacije datotek in vrstice, kjer smo vrinili PHP kodo, da se izognemo duplikatom v primeru,da uporabnik še enkrat zažene ukaz scancode, in da lahko počistimo datoteke za sabo in jih s tem vrnemo v prvotno stanje. Te informacije zapišemo v podatkovno bazo Razred Crawler Razred Crawler je spletni pajek. Spletni pajek je program, ki pregleduje splet [33]. V primeru ogrodja pajek namestospleta preiskuje projekt, katerega spletni naslov je definiran v nastavitveni datoteki. Namen razreda je vzpostavitev kode, ki smo jo predhodno vstavili v PHP datoteke projekta z razredom ScanCode Razred FileManipulation Razred je namenjen lažjemu delu v datotekah. Vsebuje metode, ki jih potrebujeta razreda ScanCode in Run. 5.3 Analiza in optimizacija poizvedb S prejšnjim korakom smo MySQL poizvedbe našli. Sedaj je naloga ogrodja, da jih analizira in ugotovi, kje postaviti indekse in kje je prostor za izboljšave poizvedb Razred AnalyzeQueries Razred AnalyzeQueriespredhodno najdene poizvedbe servira razredu MySQLParser, ki nato vrača predloge za optimizacijo,razred IndexFilterpa jih po potrebi filtrira. Na koncu na željo uporabnikarazred izvede šeprimerjalne teste in zapiše potrebne indekse v bazo Razred MySQLParser Razred MySQLParser je jedro našega ogrodja.kot vhod mu razred AnalyzeQueries podaja MySQL poizvedbe, sam pa nato ugotavlja, kje v posamezni poizvedbi postaviti indekse in kje je prostor za izboljšave poizvedb. 25

40 V prvem korakuz regularnim izrazom (angl.: regular expression) razbijemo poizvedbe v zaporedje znakov[7], s katerimi kasneje operira večina metod razreda(slika7). Slika 7: Diagram poteka optimizacije poizvedbe. 26

41 Regularni izraz je osnovan na regularnem izrazu za Perl, ki ga je napisal Igor Sutton [38]: ((?:-- \#)[\ \t\s]* (?:<> <=> >= <= == =!=! << >> < > \ \ \ && & - \+ \*(?!\/) \/(?!\*) \% ~ \^ \?) [\[\]\(\),;`] \'\'(?!\') \"\"(?!\"") ".*?(?:(?:""){1,}" (?<!["\\])"(?!") \\"{2} ) '.*?(?:(?:''){1,}' (?<!['\\])'(?!') \\'{2}) \/\*[\ \t\n\s]*?\*\/ (?:[\w:@]+(?:\.(?:\w+ \*)?)*) [\t\ ]+ [\.] [\s]) Sledipreverjanje,ali je poizvedba tipa SELECT. Četemu ni tako in gre za stavek tipa INSERT, UPDATE ali DELETE, preštejemo število izvajanj posameznega stavka. Slednje kasneje potrebujemo za izračun cenilke postavljanja indeksov. Če gre za stavek SELECT, preverimo, ali naša poizvedba vsebuje psevdonime. Ti dodelijo tabeli ali stolpcu drugačno ime, kiga lahko nato uporabljamo v isti poizvedbi. Primera psevdonimov: SELECT column AS psevdonim1 FROM table SELECT column FROM table AS psevdonim2 Nato v teh stavkih iščemo stolpce, ki so kandidati za indekse, kot to definira 2.3 poglavje. To storimo za stavke WHERE, ORDER BY, GROUP BY in JOIN. Algoritem sloni na tem, da se sprehodi čez znake poizvedbe, pri čemer gleda, ali znak ustreza imenustolpca v tabeli,ter preveri, aliznakiv okolici ustrezajo SQL sintaksi in pravilom za postavitev indeksov.nazadnje upoštevamo še indekspopravke, kot je to definirano v poglavju Razred IndexFilter Razred IndexFilterfiltriraindekse, ki jih predlaga razred MySQLParser. Med podanimi predlogi odstrani podvojene indekse, jih združuje skupaj in jih na podlagi cenilke, definirane v poglavju 4, izloča ali ohranja. 5.4 Testiranje Po analizi poizvedb imamo podane predloge za postavitve indeksov in za izboljšave poizvedb. Da izvemo, ali so predlogi smiselni, jih je potrebno preizkusiti. Temu je namenjen zadnji in opcijski korak. Razred Benchmarkizvaja meritve, razred DataGenerator pa generira podatke, ki jih morebiti potrebujemo za bolj verodostojne meritve. Pred začetkom testiranja ogrodje zažene naslednjimysql stavek: SET SESSION query_cache_type = OFF 27

42 Taje namenjen temu, da MySQL ne shranjuje rezultatov poizvedb v predpomnilniku (angl.: cache), ker bi to vplivalo na čase trajanj poizvedb. Ogrodje nato zažene poizvedbe, ki jih je predhodno lociralo v PHP kodi, s predhodno postavljenimi indeksi in si zabeleži čase trajanja. Sledi isti postopek, tokrat z indeksi,predlaganimi od ogrodja. Sledi izračun povprečnih časov ter pripadajočih izboljšav ali poslabšanj, izraženih v odstotkih. Nazadnje se podatkovna baza vrne v prvotno stanje Razred Benchmark Razred je namenjen shranjevanju časaizvajanja meritev, katere uporabimo, da primerjamo, ali so naši predlogi izboljšav izvedeni časovno hitreje kot rezultati prvotnega stanja Razred DataGenerator Razred generira podatke, ki jih potrebujemo pri preizkušanju izboljšav. Potrebujemo ga, kadar imajo tabele premalo zapisov, da bi bili rezultati testiranja verodostojni. Zapisi obstajajo samo v času testiranja. Jedro razreda je metoda generatedata, ki glede na podano tabelo ustvari ustrezne podatke, ki ustrezajo podatkovnim tipom, ki so definirani v specifikaciji tabele (slednjo podarazred AnalyzeQueries s pripadajočo metodo loadschema). MySQL podpira naslednje podatkovne tipe: tinyint, smallint, mediumint, int oz. integer, bigint, float, double, double precision, real, decimal oz. numeric, date, datetime, timestamp, time, year, char, varchar, tinyblob, tinytext, blob, text, mediumblob, mediumtext, longblob, longtext, enum in set[39]. Pri algoritmu za ustvarjanje tipov moramo paziti, da je polje, za katerega ustvarjamo vrednost, lahko tuji ključ stolpca druge tabele, zato moramo izbrati naključno vrednost primarnega ključa. Če je na polju postavljen unikaten ključ, moramo paziti, da generiramo unikatno vrednost. 5.5 UnitTest razredi Ker ima naše ogrodje vsega skupaj okoli 7000 vrstic izvorne kode, je nujno preverjanje posameznih modulov, če delujejo v skladu s pričakovanji. Temu je namenjeno testiranje enot, ki programerjem pomaga identificirati in odpraviti hrošče ter služi kot dokumentacija za metodo, na kateri izvajamo test. Enota je najmanjši del programa, v objektnem programiranju je to ponavadi kar metoda. Metodo testiramo tako, da ji na vhod podamo argumente in opazujemo njen izhod. Če se izhod ujema z našimi pričakovanji, metoda deluje pravilno. Idealno so vsi individualni testi neodvisni med seboj, kar pa je težko dosegljivo (zaradi konstant, globalnih spremenljivk, statičnih metod, itd.)[8]. 28

43 Problema soodvisnosti se rešimo s strategijo,imenovano dependency injection, ki nam omogoča odstranitev soodvisnosti v izvorni kodi. Eden od možnosti je uporaba vmesnikov namesto imena razredov [40]. Primer vidimo v spodnji PHP kodi, kjer smo kot parameter metode namesto razreda Config uporabili vmesnik ConfigInterface, ki ga kasneje med testiranjem enot nadomestimo z imitiranim objektom (angl.: mock object)[41]: public function construct(configinterface $config, MysqlInterface $mysql) { $this->config = $config; $this->mysql = $mysql; } V našem ogrodju so napisani testi enot za vsak pomembni del izvorne kode. Vsega skupaj je 93 testnih enot s 165 testnimi primeri, pokritost kode s testnimi enotami pa je 95 %. Kot osnova za testiranje je bilo uporabljeno PHPUnit ogrodje. Imitirani razredi soconfigdatageneratorunittest, ConfigCrawlerUnitTest, ConfigIndexFilterUnitTest, ConfigScanCodeTest in MySQLScanCodeUnitTest. 5.6 Pomožni razredi Poleg do sedaj omenjenih razredov se v ogrodju nahajajo še pomožni razredi, ki so namenjenilažji interakciji z bazo in nastavitvami, ter skrbe za zagon ogrodja preko ukazne vrstice Razred Run Ogrodje se zaganjaz razredomrun,kivzpostavipomožne objekte (MySQL, Config, FileManipulation) in prebere argumente, ki smo jih podali preko ukazne vrstice. Glede na uporabnikov vhodnato zažene primerno operacijo Razred Config Razred Config je namenjen shranjevanjunastavitev, da do njih lažje dostopamo znotraj drugih razredov. Pripadajoči razredconfiginterface je vmesnik, ki je namenjen testiranju enot (angl.: unit test). 29

44 5.6.3 MySQL razredi MySQL razredi so namenjenilažjemudelu z bazo. Vmesnik MySQLInterface definira, katere metode morajo vsebovati razredi, ki ga implementirajo. Obenem nam je v pomoč pri testiranju enot, da lahko naredimo imitiran objekt baze, s čimer se izognemo soodvisnosti posameznih modulov in testiranju na podatkovni bazi. RazredaMySQLNormal in MySQLImproved razširjatarazredmysql.kateri podrazred MySQL razreda bo uporabljen, odloča Run razred, ki izbere vtičnik MySQLi, vkolikor je ta na voljo, drugače izbere MySQL. Z instancoobjekta MySQL nato izvajamo poizvedbe squery metodo.metodigetrecords in getonerecordvrneta rezultate poizvedbe v obliki polja. Razreda vsebujeta tudi metodi za transakcije, in sicer commit in rollback. Metoda getnoofrecordsvrne število vrstic v trenutni poizvedbi. Slika 8: Razredni diagrampoenotenega jezika modeliranja(angl.: Unified Modeling Language, krat.: UML) MySQL razredov. 30

45 6 REALIZACIJA OGRODJA V prejšnjem poglavju smo opisali arhitekturo ogrodja. V tem poglavju pa bomo v desetih podpoglavjih podrobneje opisali knjižnice, metode in lastnosti razredov. 6.1 Razred Run Ogrodje zaženemo s priklicem razreda Run,kivzpostavi potrebne objekte (MySQL, Config, FileManipulation) in prebere argumente, ki smo jih podali preko ukazne vrstice. Na podlagi vhoda ukazne vrstice se zgodi naslednje: v primeru, da zaženemo ogrodje brez vhoda ali pa ga kličemo z ukazom info, se kliče metoda runinfo, ki nam izpiše možne ukaze, ukaz compatibilitytest zaženemetodo runcompatibilitytest, ki preveri, čeuporabnikovo okolje ustrezaminimalnim zahtevam, ki so potrebne za delovanje ogrodja, uporaba ukaza scancodezaženemetodo runscancode, kiz razredomscancode preišče PHP datoteke projekta in poišče MySQL poizvedbe, klic ogrodja z ukazom crawlerzažene metodo runcrawler, ki vzpostavi spletnega pajkaz razredom Crawler, ki omogoči, da se zažene koda, dodana z ukazom scancode, ukaz analyzequeries zažene metodo runanalyzequeries, ki z razredom AnalyzeQueries analizira predhodno zbrane poizvedbe v bazi in jih s pomočjo MySQLParser in IndexFilter optimizira; na koncu lahko izvedemo še primerjalne teste in izbrane indekse zapišemo v bazo, ukazcleanup zažene metodo runcleanup, ki zrazredomscancodevrne spremenjene datoteke in podatkovno bazo v prvotno stanje, ukazsetupconfigzažene metodo runsetupconfig, ki nastavi nastavitveno datoteko. 31

46 Slika 9: Razredni diagram UML Run razreda. Metode iswindows, success, info, failure in readinputcli so namenjene izpisu in vnosu podatkov iz in v orodno vrstico. RazredRunExceptionje namenjen prikazu izjem, ki se pojavijo v času poganjanja ogrodja. 6.2 Razred Config Slika 10 prikazuje metode, njihove vhode in lastnosti razreda Config, katere bomo v nadaljevanju podrobneje opisali. Slika 10: Razredni diagram UML razreda Config. 32

47 Metode razreda: Metoda constructzapiše v lastnosti razreda nastavitvene vrednosti, ki so natančneje razložene v dodatku B. Metoda loadje namenjena morebitnemu naknadnemu nalaganju nastavitev, ko je bil objekt že vzpostavljen. Metoda set zapiše nastavitveno vrednost v lastnost razreda. Z metodo get dostopamo do nastavitev, shranjenih kot lastnosti razreda. 6.3 Razred FileManipulation Slika 11 prikazuje metode, njihove vhode in lastnosti razreda FileManipulation, katere bomo v nadaljevanju podrobneje opisali. Metode razreda: Slika 11: Razredni diagram UML razreda FileManipulation. Metoda getfile prebere datoteko innjene vrstice vrne v obliki polja. Metoda replacefile zamenja vrstice v datoteki. Kliče metodo writetofilearray. Metoda writetofilearray zapiše parameter contentv datoteko. 6.4 Razred ScanCode Slika 12 prikazuje metode, njihove vhode in lastnosti razreda ScanCode, katere bomo v nadaljevanju podrobneje opisali. 33

48 Slika 12: Razredni diagram UML razreda ScanCode. Lastnosti razreda: Polje replacearray: lokacije MySQL poizvedb. Niz directory: pot projekta, ki ga bomo pregledali. Objekt MySQL. ObjektFileManipulation. Objekt Config. Polje mysqliobjects: lokacije MySQLi objektov. Metode razreda: Metoda constructvzpostavi objekt. Metoda setreplacearray je namenjena testiranju enot, z namenom ponastavitvereplacearray lastnosti razreda. Metoda scandirectoryforobjectsrekurzivno poišče datoteke v direktoriju in poddirektorijih projekta. Če je datoteka PHP tipa, kliče metodo findobjects. Metoda scandiretoryrekurzivno poišče datoteke v direktoriju in poddirektorijih projekta. Če je datoteka PHP tipa, kliče metodo findquery. Metoda findobjects pregleda vsebino PHP datoteke in išče vzpostavitev MySQL objektov. Vrednosti spremenljivk, ki kažejo na objekt MySQL,shrani v mysqliobjectslastnost razreda. Metoda findquery pregleda vsebino PHP datoteke in v replacearraylastnost razreda zapiše vrstico kode, kjer je bila najdena poizvedba. 34

49 Metoda replacefiles je iterator čez replacearraylastnost razreda. Ob vsaki iteraciji kliče metodo writetofile. Metoda writetofilevstavi v datoteko PHP košček kode, omenjen v poglavju 5.2.1, v datoteko. Metoda writetodb zapiše v tabelo optimizereplacedfiles (ki je bila predhodnoustvarjena) lokacijo in položaj sprememb v datotekah. Metoda cleanup vrne spremenjene datoteke in podatkovno bazo v prvotno stanje. 6.5 Razred Crawler Slika 13 prikazuje metode, njihove vhode in lastnosti razreda Crawler, katere bomo v nadaljevanju podrobneje opisali. Lastnosti razreda: Slika 13: Razredni diagram UML Crawler razreda. Polje checkedurls: URL naslovi že obiskanih strani. Polje parseurl: URL projekta, shranjenega zmetodo parse_url. Objekt Config. Metode razreda: Metoda constructvzpostavi objekt. Metoda getcheckedurls vrne seznam strani, ki so bile preverjene s spletnim pajkom. Metoda initcrawlpage vzpostavi spletnega pajka. Kličemetodo crawlpage. Rekruzivna metoda crawlpageima kot vhod parameter depth, ki nam pove, koliko nivojev spletnih povezav bo pajek obiskal. Če je argument 1, bo obiskal samo domenski URL, če je argument 2 ali več, pa tudi ustrezno število podnivojev. Metoda dobiargument depth iz nastavitev. Metoda rel2abs pretvori relativni URLv absolutni URL. 35

50 Metoda curldownloadvzpostavi URL klic na spletni naslov. curl je orodje za orodno vrstico, ki omogoča prenašanje podatkov z URL sintakso.podpira HTTP, HTTPS, FTP, Gopher, Telnet, DICV, file in LDAP protokole. PHP v celoti podpira knjižnicocurl [42]. 6.6 Razred AnalyzeQueries Slika 14 prikazuje metode, njihove vhode in lastnosti razreda AnalyzeQueries, katere bomo v nadaljevanju podrobneje opisali. Lastnosti razreda: Slika 14: Razredni diagram UML razreda AnaylzeQueries. Objekt Config. ObjektMySQL. Polje testparameters: hrani vrednosti dveh nastavitev uporabnika (samodejna nastavitev indeksovin izvajanje testiranja). Polje columns:hrani podatke o strukturi tabele in pripadajočih vrsticah v podatkovni bazi. Polje indexes: hrani podatke o strukturi indeksov v podatkovni bazi. Metode razreda: Metoda constructvzpostavi objekt. Metoda optimizeindexes vzpostavi razredamysqlparser in IndexFilter. Zažene primerjalne teste in po potrebi zapiše nove indekse v bazo. MetodaremoveCharactersodstrani znake iz ukazne vrstice. Metoda queryforindexesustvari besedilo s priporočeno postavitvijo indeksov glede na argumentaindexquery in dropoldindex. 36

51 Metoda loadschema shrani stolpce tabele in njihove pripadajoče indekse v columns in indexeslastnostih razreda. Metoda generatequery ustvari SQL kodo za vnos podatkov iz polja data, v tabelo table. 6.7 Razred MySQLParser Slika 15 prikazuje metode, njihove vhode in lastnosti razreda MySQLParser, katere bomo v nadaljevanju podrobneje opisali. Slika 15: Razredni diagram UML razreda MySQLParser. 37

52 Lastnosti razreda: Polje filter: znaki, ki jih želimo odstraniti. Polje allowedtypes: tipi poizvedb, ki so relevantne za optimizacijo. Polje statements: ločila stavka SELECT. Polje joinseparators: ločila stavkov JOIN in SELECT. Polje logicaloperators: logični operatorji v MySQL. Polje aggregatefunctions: agregatne funkcije, ki se uporabljajo v stavku GROUP BY. Polje queries: hrani poizvedbo in njene morebitne pripadajoče podpoizvedbe v obliki znakov. Polje queriestext: hrani poizvedbo in njene morebitne pripadajoče podizvedbe v tekstovni obliki. Polje columns: izhodni parameter, ki shrani stolpce, ki so potencialni kandidati za postavitev indeksa. Polje tokens:znaki poizvedb. Polje tablenames: hrani imena tabel in pripadajočih psevdonimov, ki se pojavijo v poizvedbi. Polje columnnames: hrani imena stolpcev in pripadajočih psevdonimov, ki se pojavijo v poizvedbi. Polje databasecolumns: hrani podatke o strukturi table in pripadajoči vrsticah v podatkovni bazi. Polje databaseindexes: hrani podatke o strukturi indeksov v podatkovni bazi. Polje optimizationmessages: sporočila za optimizacijo SQL poizvedb. Metode razreda: Metoda constructvzpostavi objekt. Metoda splitqueries razdrobi SQL poizvedbo na več delov, v kolikor je ta ločena z podpičjem. Metoda checktypepreveri, ali poizvedba ustreza kriterijem optimizacije (biti mora tipa SELECT, INSERT, UPDATE ali DELETE). Metoda getcolumns vrne columns lastnost razreda. Metoda getoptimizationmessagesvrne optimizationmessages lastnost razreda. Metoda getsubtokens vrne znake, ki ustrezajoparametru type. Če je naprimer argument type enak WHERE, bomo dobili WHERE znake. 38

53 Metoda checkiudpreveri,koliko INSERT, UPDATE ali DELETE stavkov vsebuje poizvedba. Metoda checkaliasespreveri psevdonime s klicem metodcheckaliasesselect in checkaliasesfrom. Metoda checkaliasesselectshrani psevdonime, ki se pojavijo v stavku SELECT, in jih shrani v columnnames lastnost razreda. Metoda checkaliasesfrom shrani psevdonime, ki se pojavijo v stavkihfrom in JOIN, v tablenameslastnost razreda. Metoda optimizationcolumns kličemetodeoptimizationcolumnswhere, optimizationcolumnsselect, optimizationcolumnsorderby, optimizationcolumnsgroupby in optimizationcolumnsjoin. Metoda optimizationcolumnswhere išče ustrezne stolpce ali kombinacijo stolpcev, ki bi bili primerni za postavitev indeksa v stavkuwhere. Upoštevati moramo vsa pravila, ki smo jih definirali v poglavju Metoda optimizationcolumnsselect pregleda, ali stavek SELECT vsebuje funkcije iskanja po polnem besedilu. Metoda optimizationcolumnsgroupbyišče ustrezne stolpce ali kombinacijo stolpcev, ki bi bili primerni za postavitev indeksa v stavku JOIN. Upoštevati moramo vsa pravila, ki smo jih definirali v poglavju Metoda optimizationcolumnsjoin išče ustrezne stolpce ali kombinacijo stolpcev, ki bi bili primerni za postavitev indeksa v stavku JOIN. Upoštevati moramo vsa pravila, ki smo jih definirali v poglavju Metoda checkindexhintišče ustrezne znake, ki ustrezajo sekciji indeks popravkov (USE, IGNORE, FORCE) in jih posreduje resolveindexhint metodi. Metoda resolveindexhint, vkolikor poizvedba vsebuje indekspopravke, upošteva pravila, definirana v poglavju Metoda resolvetokennamerazreši znak, v kolikor ta vsebuje psevdonim,ter ga pretvori nazaj v originalno ime. Metoda getsubqueries razbije poizvedbe na več podizvedb, v kolikor te obstajajo. Podizvedbe se shranjujejo v queries lastnost razreda. Metoda tokenize z regularnim izrazom razbije poizvedbe v zaporedje znakov. Metoda removefilterchars iz znakov poizvedbe odstrani znak, vkolikor je enak eni od filter lastnosti. 39

54 6.8 Razred IndexFilter Slika 16 prikazuje metode, njihove vhode in lastnosti razreda IndexFilter, katere bomo podrobneje opisali. Lastnosti razreda: Slika 16: Razredni diagram UML razreda IndexFilter. Polje columns: hrani podatke o strukturi tabele in pripadajočih vrsticah v podatkovni bazi. Polje indexes: hrani podatke o strukturi indeksov v podatkovni bazi. Objekt Config. Polje noofiud: hrani vrednost, koliko stavkov INSERT, UPDATE in DELETE se je izvedlo v posamezni tabeli. Polje noofselects: hrani vrednost, koliko SELECT stavkov se je izvedlo v posamezni tabeli. Metode razreda: Metoda constructvzpostavi objekt. Metoda extractindexes na podlagi enačbe 3 ugotovi, ali bo postavila indeks ali ne. V primeru, da je cenilka C 1, postavi med vsemi možnimi indeksi, ki jih predlaga razred MySQLParser, samo tiste, ki ustrezajo pravilom, definiranim v poglavju 2.3. Metoda groupindexesišče identične indekse in jih združuje. Metoda reshapeindexespreuredi vhodoptimizeindexes v groupedindexes, da je slednjibolj primeren za metodo removesetixdexes. Metoda removesetindexes odstrani indekse, ki že obstajajo v podatkovni bazi. 40

55 Metoda removeduplicateindexes odstrani indekse, ki so nepotrebni (indeks i_1(a, B) je v MySQL enak indeksu i_2(a, B, C), zato moramo slednjega odstraniti). 6.9 Razred Benchmark Slika 17 prikazuje metode, njihove vhode in lastnosti razreda Benchmark, katere bomo v nadaljevanju podrobneje opisali. Slika 17: Razredni diagram UML razreda Benchmark. Lastnosti razreda: Polje starttime: začetni časi v obliki UNIX časovnega žiga (angl.: timestamp). Polje savedtimes: končni časi testiranja v milisekundah. Metode razreda: Metoda starttime se kliče pred začetkom testiranja. Parameter group predstavlja ime, ki ga želimo uporabiti za trenutni sklop rezultatov. Metodo endtime se uporabi ob zaključku testiranja. Metoda showtimevrne čas testiranja,shranjenega v polju savedtimes. Parametra group in index predstavljata pozicijo rezultata, ki se nahaja v polju savedtimes. Metoda showaverage uredirezultate po velikosti in izloči zgornjih in spodnjih 10 % rezultatov ter vrne povprečje. Parameter size definira število decimalnih mest rezultata, ki ga metoda vrne. Metoda roundtosignificantdigit zaokroži število number na n pomembnih mest. Parameter roundceil definira, ali se število zaokroži navzgor ali navzdol. Metoda standarddeviationvrne strandardni odklon, izračunan iz parametra values. Metoda standarderror vrne standardno napako. Parameter standarddeviation predstavlja standardni odklona, parameter samplesize pa število vzorcev. 41

56 Metoda roundmeanacctouncertaintyštevilo mean zaokroži na enako število decimalk, kot jo ima uncertainty število Razred DataGenerator Slika 18 prikazuje metode, njihove vhode in lastnosti razreda DataGenerator, katere bomo v nadaljevanju podrobneje opisali. Lastnosti razreda: Slika 18: Razredni diagram UML razreda DataGenerator. Polje columns: hrani podatke o strukturi tabele in pripadajočih vrsticah v podatkovni bazi. Polje indexes: hrani podatke o strukturi indeksov v podatkovni bazi. Objekt Config. Metode razreda: Metoda constructvzpostavi objekt. MetodagenerateDataiterira skozi stolpce v tabletabeli in glede na tip stolpca pokliče metodo generaterecords. Metoda generaterecordsustvari podatke za vpis v bazo. Preveri, ali je zahtevan podatek unikaten ter prisotnost tujega ključa. Metoda generaterandomintegervrne naključno število, dolžine parametra length. MetodagenerateRandomFloat vrne naključno decimalno število, dolžineparametra length. MetodagenerateRandomDecimalvrne naključno decimalno število. 42

57 Metoda generaterandomstring vrne naključni niz, dolžine parametra length. Metoda generaterandomdatevrne naključen datum, ki je definiran med vrednostima :00:00 in :59:59. Metoda generaterandomenum ustvari naključno enum vrednost. Enum je niz, katerega vrednost je izbrana iz polja dovoljenih vrednosti, definiranih ob kreiranju tabele. Metoda generaterandombit generira naključno binarno vrednost. 43

58 44

59 7 UPORABA OGRODJA V tem poglavju bomo predstavili uporabo ogrodja. Prvo podpoglavje je namenjeno predstavitvi potrebne datotečnestruktureprojekta, ki ga želimo optimizirati. Sledijo možne uporabeogrodja. 7.1 Struktura datotek Predpostavljamo, da ima uporabnikže nameščeno programsko opremo, ki omogoča poganjanje paketov PHP in MySQL. Potrebna programska oprema zajema operacijski sistem Windows,spletni strežnik Apache,podatkovno bazo MySQL inprogramski jezik PHP(krat.: WAMP)aliustrezno ekvivalentno zbirko na operacijskem sistemu Linux(krat.: LAMP). Na sliki 19vidimo priporočeno osnovno strukturoogrodja spripadajočim projektom. V direktoriju»myproject«se nahaja PHP projekt, kateremu bi radi optimizirali MySQL poizvedbe. Slika 19: Direktorijska struktura projekta. 45

60 V»FMQO«direktoriju se nahaja naše ogrodje z vsemi pripadajočimi datotekami. V»config«poddirektoriju se nahajajo nastavitve ogrodja, katere so podrobno predstavljene v prilogi A.Poddirektorij»Library«vsebuje knjižnice, ki so jedro našega ogrodja,»tests«vsebuje datoteke s testnimi enotami, kizagotavljajo, da knjižnice delujejo v skladu s pričakovanji. Nazadnje je tu še»run.php«datoteka, katere naloga je izvajanje operacij, ki jih ogrodje omogoča.za direktorij»fmqo«ni potrebno, da se nahaja v istem domenskem direktoriju, kot se nahaja projekt, je pa priporočena praksa. 7.2 Ukazi orodja Ogrodje zaganjamo z ukazno vrstico. Teče tako na operacijskem sistemu Linux kot na operacijskem sistemu Windows.V naslednjih sedmih podpoglavjih bomo predstavili možnosti, ki jih ogrodje ponuja. Izpisi ukazov so v dodatku B Ukaz info Ukaz prikaže možnosti, ki jih lahko uporabimo pri zagonu ogrodja,ter njihovo obrazložitev Ukaz compatibilitytest Ukaz sporoči, ali ima uporabnik nameščene potrebne knjižnice. Če jih nima, uporabnika primerno opozori Ukaz scancode Ukazpregledadirektorij, podan v nastavitveni datoteki. Ustvari potrebne tabele v podatkovni bazi in vrine potrebno PHP kodo v datoteke projekta Ukaz crawler Ukazvzpostavi spletnega pajka, kise sprehodi čez spletne naslove projekta, da se vzpostavi koda, dodana z ukazom scancode. Pri izpisu nam poda spletne naslove, ki jih je pajek obiskal Ukaz analyzequeries Ukaz analizira poizvedbe, zbrane v podatkovni bazi. Pred analizo nas vpraša, ali želimo izvesti primerjalni preizkus in ali želimo vpis predlaganih indeksov v bazo. Vrne priporočene indekse in optimizacije, obenem pa nam pove,kolikšne hitrostne izboljšave lahko pričakujemo Ukaz cleanup Ukazvrne datotekev prvotno stanje. Enako stori s podatkovno bazoob pogoju, da nismo zahtevali vpisa predlaganih indeksov v bazo. 46

61 7.2.7 Ukaz setupconfig Poleg spreminjanjanastavitvenih vrednostiv datoteki»config.conf.php«imamo to možnost tudi z uporabo ukazasetupconfig. Spremenimo lahko vrednosti hostname, password, schema, project path in projecturl.ostale vrednosti spremenimo v nastavitvenidatoteki. 47

62 48

63 8 TESTIRANJE OGRODJA Testiranje ogrodja smo izvedli na dveh različnih testih. Prvi test vključuje podatkovno bazo, ki jo MySQL priporoča kot testno podatkovno bazo za učenje MySQL[43]. Pri drugem testu smo optimizirali projekt 1a-vreme, ki je na voljo na spletnem naslovu Metodologija testiranja V rezultatih v naslednjih poglavjih je razs irjena negotovost doloc ena kot s tandardna negotovost, pomnoz ena s faktorjem razs iritve k = 2, ki pri normalni porazdelitvi ustreza ravni zaupanja pribliz no 95 %. Standardna negotovost je sestavljena iz standardne negotovosti povprečne vrednosti, ki jo izračunamo z enačbo 4. Za izračunanje povprečne vrednosti upoštevamo rezultate meritev, s tem da ne upoštevamo zgornjih in spodnjih 10 %urejenih meritev. Standardni odklon vseh enot statistične populacije je definiran kot [9]: σ = N i=1 (x i x ) N (4) kjer je x ii-ta enota v statistični populaciji, x aritmetična sredina populacije, N pa število vseh enot. Standardna napaka vseh enot statistične populacije [9]: E σ = σ n (5) Anderson-Darling test Ker bomo v nadaljevanju za naše teste računali standardni odklon in standardno negotovost, predpostavljamo, da imajo časi testov normalno porazdelitev. Vendar, če je ta predpostavka napačna, naši rezultati niso zanesljivi. V ta namen uporabimo Anderson-Darling test,ki nam pove, ali naši podatki ustrezajo določeni porazdelitveni funkciji [10, 44]. AD = n i=1 1 2i n [ln F Y i + ln (1 F Y n+1 i )] n (6) 49

64 Fje porazdelitvena funkcija, n je število vzorcev, Yi pa predstavlja i-ti vzorec iz sortirane tabele vzorcev.v našem primeru bomo preverjali, če rezultati ustrezajo normalni porazdelitvi, zato je porazdelitvena funkcija [45]: 𝐹 𝑥, 𝜇, 𝜎 = 1 2𝜋𝜎 𝑒 (𝑥 𝜇 )2 2𝜎 2 (7) Simbol μpredstavlja aritmetično sredino populacije in σ standardniodklon (enačba4). V primeru, da velja enačba 8, naši vzorci ne pripadajo pripadajoči porazdelitvi [10]: 𝐴𝐷 > 𝑛 𝑛2 (8) 8.2 Test podatkovne bazesakila Podatkovno bazo Sakila je razvil Mike Hilyer, nekdanji član MySQL dokumentacijske ekipe, in je namenjena kot primer standardne podatkovne sheme, ki se uporablja v knjigah, člankih in tečajih [43]. Slika 20: Model intetitet in povezav (angl.: Entity relationship, krat.: ER) diagram podatkovne bazesakila. 50

65 Podatkovna baza ima že definirane poglede, katerih poizvedbe so navedene v prilogi C.Za te so indeksi že optimalno postavljeni. Za namen testiranja smo ustvarili testni projekt, kjer smo uporabili omenjenesql poizvedbe. Z ogrodjem smo optimizirali podatkovno bazo, iz katere smo odstranili vse pripadajoče indekse, ki se nahajajov prilogi D. Na podatkovni bazi s postavljenimi indeksi od ogrodja smo nato pognali 33 testov in izračunali povprečje časov izvajanja teh testov s pripadajočo standardno negotovostjo (metodologija testiranja je razložena v poglavju 8.1). Nato smo naredili enakos prvotno postavljenimi indeksi in primerjali čase. Predlagani indeksi ogrodja se nahajajo v prilogi D. Predlagani indeksi Prvotni indeksi AD 0,23 0,34 Čas izvajanja 1,3882 s ± 3,4 ms 1,3541 s ± 3,8 ms Izboljšava 2,5 % ± 0,3 % Tabela 3: Rezultati testiranja podatkovne bazesakila. Časov izvajanja stavkov brez postavljenih indeksov nismo merili, saj imajo poizvedbe veliko število JOIN stavkov. Kot primer naj omenimo spodnjopoizvedbo, ki ima JOIN stavke v sedmih tabelah: rental, inventory, store, address, city, country in staff. SELECT CONCAT(c.city, _utf8',', cy.country) AS store, CONCAT(m.first_name, _utf8' ', m.last_name) AS manager, SUM(p.amount) AS total_sales FROM payment AS p INNER JOIN rental AS r ON p.rental_id = r.rental_id INNER JOIN inventory AS i ON r.inventory_id = i.inventory_id INNER JOIN store AS s ON i.store_id = s.store_id INNER JOIN address AS a ON s.address_id = a.address_id INNER JOIN city AS c ON a.city_id = c.city_id INNER JOIN country AS cy ON c.country_id = cy.country_id INNER JOIN staff AS m ON s.manager_staff_id = m.staff_id GROUP BY s.store_id ORDER BY cy.country, c.city Če ni postavljenih indeksov, MySQL ustvari začasno tabelo,ki je v tem primeru sestavljena iz 1, vrstic. Poizvedba bi brez postavljenih indeksov trajala zelo dolgo časa.iz tega lahko predpostavljamo, da bi primerjava pokazala, da je izboljšava blizu 100 %.Iz rezultatov meritev je razvidno, daje čas izvajanja poizvedb z originalnimi indeksi približno 2,5 % hitrejši kot v primeru izvajanja poizvedb z indeksi, ki jih predlaga ogrodje. Poraba prostora je v korist ogrodju, saj podatkovna baza v prvotnem stanju zaseda 6,6 MB, z indeksi, postavljenimi z ogrodjem, pa 4,3 MB. 51

66 8.3 Test podatkovne baze1a-vreme Napodatkovni bazi 1a-vreme je bilo ogrodje na produkcijskem strežnikuvklopljeno slab dan. V tem času se je izvršilo in zabeležilo preko poizvedb, izmed katerih smo jih nekaj omenili v prilogi C. Slika 21: ER diagram podatkovne baze1a-vreme. 52

RAZLOG ZA IZVAJANJE PROGRAMA POPRBAZA

RAZLOG ZA IZVAJANJE PROGRAMA POPRBAZA RAZLOG ZA IZVAJANJE PROGRAMA POPRBAZA POPRBAZA je namenjen večji reorganizaciji podatkov v računalnikovem spominu. Reorganizacijo narekujejo bodisi zakonske spremembe, bodisi novosti v programu. Zato je

More information

IP PACKET QUEUING DISCIPLINES AS BASIC PART OF QOS ASSURANCE WITHIN THE NETWORK

IP PACKET QUEUING DISCIPLINES AS BASIC PART OF QOS ASSURANCE WITHIN THE NETWORK UDK621.3:(53+54+621 +66), ISSN0352-9045 Informacije MIDEM 39(2009)2, Ljubljana IP PACKET QUEUING DISCIPLINES AS BASIC PART OF QOS ASSURANCE WITHIN THE NETWORK Sasa Klampfer, Joze Mohorko, Zarko Cucej University

More information

Session:E07 GALIO - DB2 index advisor, how we implemented it and what we get from self-made expert tool

Session:E07 GALIO - DB2 index advisor, how we implemented it and what we get from self-made expert tool Session:E07 GALIO - DB2 index advisor, how we implemented it and Viktor Kovačević, MSc Hermes Softlab 6th October 2009 14:15 (60') Platform: UDB / LUW OUTLINE Application & Database tuning Self made index

More information

Strukturirani poizvedovalni jezik SQL

Strukturirani poizvedovalni jezik SQL Računalništvo Strukturirani poizvedovalni jezik SQL Danijel Skočaj, Evelin Vatovec Krmac Univerza v Ljubljani Fakulteta za pomorstvo in promet Literatura: Evelin Vatovec Krmac, Računalništvo in informatika,

More information

SELECT WHERE JOIN. DBMS - Select. Robert Lowe. Division of Mathematics and Computer Science Maryville College. February 16, 2016

SELECT WHERE JOIN. DBMS - Select. Robert Lowe. Division of Mathematics and Computer Science Maryville College. February 16, 2016 Division of Mathematics and Computer Science Maryville College February 16, 2016 Outline 1 2 3 Syntax [ALL DISTINCT DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]

More information

Prirejanje in preverjanje tipov

Prirejanje in preverjanje tipov Uvod v C# Drugi del Dedovanje Sintaksa Prirejanje in preverjanje tipov Kaste preverjenih tipov Prekrivanje metod Dinamično povezovanje (poenostavljeno) Skrivanje Dinamično povezovanje (s skrivanjem) Fragile

More information

Pagina 1 di 7 13.1.7. SELECT Syntax 13.1.7.1. JOIN Syntax 13.1.7.2. UNION Syntax SELECT [ALL DISTINCT DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]

More information

Vodnik skozi Google Analytics Beta verzija 1. del. prehod s stare kode (urchin.js), k novi kodi za sledenje (ga.js)

Vodnik skozi Google Analytics Beta verzija 1. del. prehod s stare kode (urchin.js), k novi kodi za sledenje (ga.js) Vodnik skozi Google Analytics Beta verzija 1. del prehod s stare kode (urchin.js), k novi kodi za sledenje (ga.js) Ta vodnik je povzetek Googe vodiča ' Tracking Code Migration Guide Switching from urchin.js

More information

Državni izpitni center SPOMLADANSKI IZPITNI ROK *M * NAVODILA ZA OCENJEVANJE. Četrtek, 2. junij 2016 SPLOŠNA MATURA

Državni izpitni center SPOMLADANSKI IZPITNI ROK *M * NAVODILA ZA OCENJEVANJE. Četrtek, 2. junij 2016 SPLOŠNA MATURA Državni izpitni center *M16178113* SPOMLADANSKI IZPITNI ROK NAVODILA ZA OCENJEVANJE Četrtek, 2. junij 2016 SPLOŠNA MATURA RIC 2016 M161-781-1-3 2 IZPITNA POLA 1 1 1 2 1 3 3 4 1 5 3 6 2 7 1 8 1 9 1 10 3

More information

Transakcije v MariaDB/MySQL (transakcija A)

Transakcije v MariaDB/MySQL (transakcija A) Transakcije v MariaDB/MySQL (transakcija A) Pomožni elementi In [1]: # pyodbc import pyodbc try: cn1.close() except: pass # MariaDB/MySQL conn = "DRIVER={MySQL ODBC 5.3 Unicode Driver};SERVER=localhost;DATABASE=sandbox;UID=tu

More information

» Nakup in vzdrževanje Oracle programske opreme «Tehnične specifikacije

» Nakup in vzdrževanje Oracle programske opreme «Tehnične specifikacije Obrazec P-5 Specifikacije 30K250316» Nakup in vzdrževanje Oracle programske opreme «Tehnične specifikacije KAZALO VSEBINE 1. Predmet javnega naročila...3 1.1. SKLOP-1: STORITEV VZDRŽEVANJA ORACLE LICENČNE

More information

Poglavje 7. Indeksi z uporabo drevesnih struktur Povzeto po [1]

Poglavje 7. Indeksi z uporabo drevesnih struktur Povzeto po [1] Poglavje 7 Indeksi z uporabo drevesnih struktur Povzeto po [1] - 1 - Indeksi uvod.. Včasih hočemo najti vse zapise, ki imajo določeno vrednost v določenem polju INDEKS je zunanja podatkovna struktura,

More information

Delavnica za konfiguriranje dostopovnih točk Konfiguracija LANCOM L-54 z uporabo orodja LANConfig

Delavnica za konfiguriranje dostopovnih točk Konfiguracija LANCOM L-54 z uporabo orodja LANConfig Delavnica za konfiguriranje dostopovnih točk Konfiguracija LANCOM L-54 z uporabo orodja LANConfig Boštjan Lemut Prva povezava na L-54 s povezovalnim kablom povežemo mrežna vmesnika na računalniku in L-54

More information

DB2 podatkovna baza v praksi

DB2 podatkovna baza v praksi DB2 podatkovna baza v praksi Aljoša Trivan, Mikropis holding d.o.o. aljosa.trivan@mikropis.si 2007 IBM Corporation Agenda Mikropis Splošno Fleksibilnost Vzdrževanje Backup SQL objekti in SQL stavki Novosti

More information

Razvoj jezika za iskanje, povezovanje in predstavitev podatkov

Razvoj jezika za iskanje, povezovanje in predstavitev podatkov UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Ernest Štukelj Razvoj jezika za iskanje, povezovanje in predstavitev podatkov DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU SMER PROGRAMSKA OPREMA

More information

Delavnica za konfiguriranje dostopovnih točk WEB konfiguracija LANCOM L-54

Delavnica za konfiguriranje dostopovnih točk WEB konfiguracija LANCOM L-54 Delavnica za konfiguriranje dostopovnih točk WEB konfiguracija LANCOM L-54 Boštjan Lemut Prva povezava na L-54 s povezovalnim kablom povežemo mrežna vmesnika na računalniku in L-54 v brskalniku vpišemo

More information

Sistemske zahteve za SAOP

Sistemske zahteve za SAOP Sistemske zahteve za SAOP Samostojna delovna postaja višji). icenter je ERP sistem, ki zagotavlja popolno kontrolo nad vsemi poslovnimi procesi v podjetju. V tej postavitvi je SAOP icenter nameščen na

More information

Hitra rast hranjenih podatkov

Hitra rast hranjenih podatkov Tomaž Borštnar - član uredništva računalniške revije Monitor od začetka (oktober 1991; ne-pc okolja (Unix, etc) - sodelavec YUNAC in ARNES od začetka - postavil in upravljal večino strežnikov na SiOL -

More information

Q: Do You made a backup before upgrade? A: Only cowards make backups!

Q: Do You made a backup before upgrade? A: Only cowards make backups! Q: Do You made a backup before upgrade? You z malo - you A: Only cowards make backups! Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies.

More information

ABBYY rešitve za prepoznavo in klasifikacijo dokumentov

ABBYY rešitve za prepoznavo in klasifikacijo dokumentov ABBYY rešitve za prepoznavo in klasifikacijo dokumentov preabbyy FlexiCapture 9.0. Overview. 1 doc: 10977 Lokalna prisotnost ABBYY: Moscow, Russia; Munich, Germany; Bracknell, UK; Kiev, Ukraine; Milpitas,

More information

Navodila za interaktivne naloge Bober

Navodila za interaktivne naloge Bober Avtorji dokumenta: Dean Gostiša , Lovro Podgoršek Verzija dokumentacije: 1.1 Datum in kraj: 24. 7. 2013, Ljubljana Navodila za interaktivne naloge Bober Uvod 1.

More information

How we calculate volume with the use of NTF method. Kako izračunamo volumen z uporabo metode NTF

How we calculate volume with the use of NTF method. Kako izračunamo volumen z uporabo metode NTF RMZ Materials and Geoenvironment, Vol. 55, No. 1, pp. 127-134, 2008 127 How we calculate volume with the use of NTF method Kako izračunamo volumen z uporabo metode NTF An e s Du r g u t o v i ć 1, Mi l

More information

Algoritmi in podatkovne strukture 2. Urejanje (sorting)

Algoritmi in podatkovne strukture 2. Urejanje (sorting) Algoritmi in podatkovne strukture 2 Urejanje (sorting) osnove, metode deli in vladaj, kopica Andrej Brodnik: Algoritmi in podatkovne strukture 2 / Urejanje (sorting) osnove, metode deli in vladaj, kopica

More information

Primerjava in analiza učinkovitosti podatkovnih baz DB2 in MySQL

Primerjava in analiza učinkovitosti podatkovnih baz DB2 in MySQL Univerza v Ljubljani Fakulteta za računalništvo in informatiko Nedim Husaković Primerjava in analiza učinkovitosti podatkovnih baz DB2 in MySQL DIPLOMSKO DELO VISOKOŠOLSKI ŠTUDIJSKI PROGRAM PRVE STOPNJE

More information

PODATKOVNE BAZE NOSQL

PODATKOVNE BAZE NOSQL PODATKOVNE BAZE NOSQL Aljaž Zrnec, Dejan Lavbič, Lovro Šubelj, Slavko Žitnik, Aleš Kumer, Marko Bajec Univerza v Ljubljani, Fakulteta za računalništvo in informatiko, Laboratorij za podatkovne tehnologije,

More information

Calculation of volume with the use of NTF method. Izračun volumnov z uporabo NTF metode

Calculation of volume with the use of NTF method. Izračun volumnov z uporabo NTF metode RMZ - Materials and Geoenvironment, Vol. 53, No. 2, pp. 221-227, 2006 221 Calculation of volume with the use of NTF method Izračun volumnov z uporabo NTF metode Milivoj Vulić 1, Anes Durgutović 2 1 Faculty

More information

2.1 Uvod v podatkovne baze

2.1 Uvod v podatkovne baze 2. Podatkovne baze Uvod v podatkovne baze Predstavitev podatkov Relacijski podatkovni model Povpraševalni jezik SQL Modeliranje podatkov 2.1 Uvod v podatkovne baze Podatkovna osnova informacijskih sistemov

More information

Družina IEEE802 Poddružina IEEE802.1 Priključitev v omrežje IEEE802.1x

Družina IEEE802 Poddružina IEEE802.1 Priključitev v omrežje IEEE802.1x 1 Družina IEEE802 Poddružina IEEE802.1 Priključitev v omrežje IEEE802.1x 2 družina standardov, ki opisujejo delovanje lokalnih (LAN) in mestnih (MAN) omrežij delo opravljano v delovnih skupinah več na

More information

Naslavljanje v IP. Miran Meža

Naslavljanje v IP. Miran Meža Naslavljanje v IP Miran Meža Omrežje vseh omrežij Avtonomni sistem Avtonomni sistem Avtonomni sistem Avtonomni sistem Avtonomni sistem Avtonomni sistem Omrežje vseh omrežij Usmerjanje prometa: poznati

More information

Programski jezik Java

Programski jezik Java Programski jezik Java Interno gradivo za predmet Algoritmi in programski jeziki (4. letnik) ArrayList (neprečiščeno besedilo) ArrayList Java class ArrayList(java.util.ArrayList) je hiter in za uporabo

More information

Delo z grafi v relacijskih in sodobnih nerelacijskih podatkovnih bazah

Delo z grafi v relacijskih in sodobnih nerelacijskih podatkovnih bazah Univerza v Ljubljani Fakulteta za računalništvo in informatiko Blaž Malej Delo z grafi v relacijskih in sodobnih nerelacijskih podatkovnih bazah DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM

More information

Tehnike programiranja PREDAVANJE 2 Uvod v JavaScript

Tehnike programiranja PREDAVANJE 2 Uvod v JavaScript Tehnike programiranja PREDAVANJE 2 Uvod v JavaScript Predavanje 2 Ponovitev Predavanje 1 Naloge Uvod v JavaScript Pravila Primeri Priprava na laboratorijske vaje Pregled orodij ldos.fe.uni-lj.si >študij

More information

Prometno načrtovanje xdsl

Prometno načrtovanje xdsl Prometno načrtovanje xdsl 1 Kazalo Prometno načrtovanje naročniške zanke Prometno načrtovanje MSAN Izbira agregacijskega modela Izbira opreme 2 Potrebe po pasovni širini Zahtevana pasovna širina na uporabnika

More information

Uvod v svetovni splet

Uvod v svetovni splet Univerza v Ljubljani Fakulteta za gradbeništvo in geodezijo Uvod v svetovni splet Računalništvo in informatika, GR-UNI, GR-VSŠ Tehnična dokumentacija in informatika, VKI-UNI št. leto 2007/08, 1. semester

More information

Jezik Baze Podataka SQL. Jennifer Widom

Jezik Baze Podataka SQL. Jennifer Widom Jezik Baze Podataka SQL SQL o Jezik koji se koristi u radu sa relacionim bazama podataka o Nije programski jezik i manje je kompleksan. o Koristi se isključivo u radu za bazama podataka. o SQL nije case

More information

Organizacija računalnikov (OR) UNI-RI, 3.l. RS Vaje. doc.dr. Mira Trebar

Organizacija računalnikov (OR) UNI-RI, 3.l. RS Vaje. doc.dr. Mira Trebar Organizacija računalnikov (OR) UNI-RI, 3.l. RS Vaje doc.dr. Mira Trebar 2 Vaja 1 (11.10.2010) Vaje so obvezne (delo v laboratoriju + doma) S1: Logisim MIPS procesor eno-cikelna izvedba ( logisim ) MIPS

More information

formati slike in branje slike pomen in nekaj primerov EM spekter aplikacije v posameznih delih spektra o matriki slike

formati slike in branje slike pomen in nekaj primerov EM spekter aplikacije v posameznih delih spektra o matriki slike Strojni vid pri tehnoloških meritvah formati slike in branje slike pomen in nekaj primerov EM spekter aplikacije v posameznih delih spektra o matriki slike formati slike in branje slike slika je običajno

More information

The M in LAMP: MySQL CSCI 470: Web Science Keith Vertanen Copyright 2014

The M in LAMP: MySQL CSCI 470: Web Science Keith Vertanen Copyright 2014 The M in LAMP: MySQL CSCI 470: Web Science Keith Vertanen Copyright 2014 MySQL Setup, using console Data types Overview Creating users, databases and tables SQL queries INSERT, SELECT, DELETE WHERE, ORDER

More information

Izdelava urejevalnika izvorne kode v oblaku z uporabo tehnologij HTML5

Izdelava urejevalnika izvorne kode v oblaku z uporabo tehnologij HTML5 Univerza v Ljubljani Fakulteta za računalništvo in informatiko Roman Gorišek Izdelava urejevalnika izvorne kode v oblaku z uporabo tehnologij HTML5 DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM

More information

Navodila za nastavitev varne povezave po protokolu SSH

Navodila za nastavitev varne povezave po protokolu SSH Datum: 28. 9. 2010 Navodila za nastavitev varne povezave po protokolu SSH 1. Pogoji za zagotovitev varne povezave po protokolu SSH Za uspešno zagotovitev in nastavitev varne povezave po protokolu SSH je

More information

APLIKACIJE ZA SOCIALNA

APLIKACIJE ZA SOCIALNA UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Boštjan Lotrič APLIKACIJE ZA SOCIALNA OMREŽJA DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU Mentor: doc. dr. Zoran Bosnić Ljubljana, 2011 Rezultati

More information

Vzpostavitev spletnega vmesnika za prikaz tenziomiografskih meritev

Vzpostavitev spletnega vmesnika za prikaz tenziomiografskih meritev UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Nejc Poljanšek Vzpostavitev spletnega vmesnika za prikaz tenziomiografskih meritev DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM

More information

Programiranje dreves

Programiranje dreves Zavod sv. Stanislava Škofijska klasična gimnazija Programiranje dreves Maturitetna seminarska naloga iz informatike Kandidat: Tomc Matej Mentor: Medvešek Helena Ljubljana Šentvid, šolsko leto 2014/2015

More information

Jernej Vidmar. Preslikava in obogatitev podatkov iz relacijskih podatkovnih baz v RDF obliko

Jernej Vidmar. Preslikava in obogatitev podatkov iz relacijskih podatkovnih baz v RDF obliko UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Jernej Vidmar Preslikava in obogatitev podatkov iz relacijskih podatkovnih baz v RDF obliko DIPLOMSKO DELO UNIVERZITETNI ŠTUDIJSKI PROGRAM

More information

Twitter Bootstrap in razvoj spletnega repozitorija za Cacti

Twitter Bootstrap in razvoj spletnega repozitorija za Cacti Univerza v Ljubljani Fakulteta za računalništvo in informatiko Fakulteta za matematiko in fiziko Nejc Župec Twitter Bootstrap in razvoj spletnega repozitorija za Cacti DIPLOMSKO DELO UNIVERZITETNI ŠTUDIJSKI

More information

sodobne poslovnoinformacijske rešitve Birokrat Kratka navodila za namestitev demo verzije programa Birokrat

sodobne poslovnoinformacijske rešitve   Birokrat Kratka navodila za namestitev demo verzije programa Birokrat sodobne poslovnoinformacijske rešitve www.andersen.si Birokrat Kratka navodila za namestitev demo verzije programa Birokrat Kratka navodila za namestitev demo verzije programa Birokrat Pošiljamo vam demo

More information

UDF for volume calculation with the use of NTF method. Lastne Excel funkcije za izračun prostornin po NTF metodi

UDF for volume calculation with the use of NTF method. Lastne Excel funkcije za izračun prostornin po NTF metodi RMZ Materials and Geoenvironment, Vol. 54, No. 3, pp.419-425, 2007 419 UDF for volume calculation with the use of NTF method Lastne Excel funkcije za izračun prostornin po NTF metodi Mi l i v o j Vu l

More information

Enterprise modelling with UML

Enterprise modelling with UML Elektrotehniški vestnik 68(2 3): 109 114, 2001 Electrotechnical Review, Ljubljana, Slovenija Enterprise modelling with UML Aljaž Zrnec, Marko Bajec, Marjan Krisper University of Ljubljana, Faculty of Computer

More information

Razširitve CMS z lastnimi moduli

Razširitve CMS z lastnimi moduli Univerza v Ljubljani Fakulteta za računalništvo in informatiko Matjaž Čepar Razširitve CMS z lastnimi moduli DIPLOMSKA NALOGA NA UNIVERZITETNEM ŠTUDIJU Mentor: doc. dr. Andrej Brodnik Ljubljana 2014 Rezultati

More information

E R S Š G L J U B L J A N A Š O L S K O L E T O

E R S Š G L J U B L J A N A Š O L S K O L E T O Datotečni sistem E R S Š G L J U B L J A N A Š O L S K O L E T O 2 0 1 0 / 1 1 Vsebina Programska oprema Sistemska programska oprema Operacijski sistem Lupina (shell) Datotečni sistem Programska oprema

More information

Ljubljana,

Ljubljana, Ljubljana, 9. 4. 2018 Katalog znanj in vzorci nalog za izbirni izpit za vpis na magistrski študij Računalništvo in informatika 2018/2019 0 KATALOG ZNANJ ZA IZBIRNI IZPIT ZA VPIS NA MAGISTRSKI ŠTUDIJ RAČUNALNIŠTVO

More information

Fakulteta za elektrotehniko, računalništvo in informatiko Inštitut za avtomatiko Laboratorij za obdelavo signalov in daljinska vodenja

Fakulteta za elektrotehniko, računalništvo in informatiko Inštitut za avtomatiko Laboratorij za obdelavo signalov in daljinska vodenja Fakulteta za elektrotehniko, računalništvo in informatiko Inštitut za avtomatiko Laboratorij za obdelavo signalov in daljinska vodenja Navodila za vaje pri predmetu Internetne tehnologije VAJA 2 Dušan

More information

Nataša Knez. Primerjava relacijske in NoSQL podatkovne baze in opredelitev kriterijev za pomoč pri izbiri najprimernejše podatkovne baze

Nataša Knez. Primerjava relacijske in NoSQL podatkovne baze in opredelitev kriterijev za pomoč pri izbiri najprimernejše podatkovne baze UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Nataša Knez Primerjava relacijske in NoSQL podatkovne baze in opredelitev kriterijev za pomoč pri izbiri najprimernejše podatkovne baze DIPLOMSKO

More information

Osnove algoritmov in podatkovnih struktur I (OAPS I)

Osnove algoritmov in podatkovnih struktur I (OAPS I) Univerza v Ljubljani Fakultetazaračunalništvo in informatiko Igor Rožanc Osnove algoritmov in podatkovnih struktur I (OAPS I) 2. letnik, VSP Računalništvo in informatika, vse smeri PROSOJNICE ZA 8. PREDAVANJA

More information

Metodologija migracije iz Exchange v Office 365

Metodologija migracije iz Exchange v Office 365 UNIVERZA V LJUBLJANI F Grega Lausegger Metodologija migracije iz Exchange v Office 365 DIPLOMSKO DELO PRVE Ljubljana, 2018 UNIVERZA V LJUBLJANI F Grega Lausegger Metodologija migracije iz Exchange v Office

More information

UPORABA TEHNOLOGIJE XQUERY NA PRIMERU ISKALNIKA AMISTV

UPORABA TEHNOLOGIJE XQUERY NA PRIMERU ISKALNIKA AMISTV Martin Počkar UPORABA TEHNOLOGIJE XQUERY NA PRIMERU ISKALNIKA AMISTV Diplomsko delo Maribor, avgust 2013 UPORABA TEHNOLOGIJE XQUERY NA PRIMERU ISKALNIKA AMISTV Diplomsko delo Študent: Študijski program:

More information

ORODJE ZA TESTNO VODEN

ORODJE ZA TESTNO VODEN UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO GREGOR STAMAĆ ORODJE ZA TESTNO VODEN RAZVOJ JAVASCRIPT APLIKACIJ DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU MENTOR: PROF. DR. SAŠA DIVJAK LJUBLJANA,

More information

RAZVOJ ENOSTAVNE SPLETNE APLIKACIJE Z UPORABO FLEKSIBILNEGA OGRODJA NA ODPRTOKODNIH KNJIŢNICAH

RAZVOJ ENOSTAVNE SPLETNE APLIKACIJE Z UPORABO FLEKSIBILNEGA OGRODJA NA ODPRTOKODNIH KNJIŢNICAH UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO David Sedlar RAZVOJ ENOSTAVNE SPLETNE APLIKACIJE Z UPORABO FLEKSIBILNEGA OGRODJA NA ODPRTOKODNIH KNJIŢNICAH DIPLOMSKO DELO NA UNIVERZITETNEM

More information

RAZVOJ GENERATORJA POSLOVNIH SPLETNIH APLIKACIJ

RAZVOJ GENERATORJA POSLOVNIH SPLETNIH APLIKACIJ UNIVERZA V MARIBORU FAKULTETA ZA ORGANIZACIJSKE VEDE Smer: Informatika v organizaciji in managementu RAZVOJ GENERATORJA POSLOVNIH SPLETNIH APLIKACIJ Mentor: izr. prof. dr. Robert Leskovar Kandidat: Boštjan

More information

Lotus Quickr Najhitrejši način izmenjave poslovne vsebine

Lotus Quickr Najhitrejši način izmenjave poslovne vsebine Lotus Quickr Najhitrejši način izmenjave poslovne vsebine Zoran Povh, IT specialist zoran.povh@si.ibm.com 2007 IBM Corporation Vsebina Kaj je Lotus Quickr? Integracija z namiznimi programi Skupinski prostori

More information

Program za avtomatsko preverjanje algoritmov napisanih v programskem jeziku C++

Program za avtomatsko preverjanje algoritmov napisanih v programskem jeziku C++ Univerza v Ljubljani Fakulteta za računalništvo in informatiko Tadej Golobič Program za avtomatsko preverjanje algoritmov napisanih v programskem jeziku C++ DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI

More information

Obravnava izjem (exception handling)

Obravnava izjem (exception handling) Obravnava izjem (exception handling) Ko umre programer Uvod Ne glede na to, kako dobro smo načrtovali nek program, je še vedno možnost, da lahko med izvajanjem pride do kakšnih napak. Dobro načrtovan program

More information

Integracija povpraševanj nerelacijskih podatkovnih baz in doseganje visoke razpoložljivosti v računalniškem oblaku

Integracija povpraševanj nerelacijskih podatkovnih baz in doseganje visoke razpoložljivosti v računalniškem oblaku UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Matej Rojko Integracija povpraševanj nerelacijskih podatkovnih baz in doseganje visoke razpoložljivosti v računalniškem oblaku MAGISTRSKO

More information

Reševanje časovno zahtevnih opravil z orodjem ORACLE

Reševanje časovno zahtevnih opravil z orodjem ORACLE Ervin Črešnjovnjak Reševanje časovno zahtevnih opravil z orodjem ORACLE Diplomsko delo Maribor, junij 2011 I Diplomsko delo univerzitetnega študijskega programa REŠEVANJE ČASOVNO ZAHTEVNIH OPRAVIL Z ORODJEM

More information

PRIMERJAVA HITROSTI DELOVANJA SISTEMOV ZA UPRAVLJANJE PODATKOVNIH BAZ

PRIMERJAVA HITROSTI DELOVANJA SISTEMOV ZA UPRAVLJANJE PODATKOVNIH BAZ UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Uroš Maleš PRIMERJAVA HITROSTI DELOVANJA SISTEMOV ZA UPRAVLJANJE PODATKOVNIH BAZ DIPLOMSKO DELO NA VISOKOŠOLSKEM STROKOVNEM ŠTUDIJU MENTOR:

More information

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO. Dean Črnigoj. Izdelava odjemalca NFS za Windows DIPLOMSKO DELO

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO. Dean Črnigoj. Izdelava odjemalca NFS za Windows DIPLOMSKO DELO UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Dean Črnigoj Izdelava odjemalca NFS za Windows DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO IN INFORMATIKA

More information

SPLETNA APLIKACIJA ZA SPREMLJANJE PODATKOV O FILMIH

SPLETNA APLIKACIJA ZA SPREMLJANJE PODATKOV O FILMIH Simon Cedula SPLETNA APLIKACIJA ZA SPREMLJANJE PODATKOV O FILMIH Diplomsko delo Maribor, december 2012 I Diplomsko delo univerzitetnega študijskega programa SPLETNA APLIKACIJA ZA SPREMLJANJE PODATKOV

More information

Osnove programskega jezika C++

Osnove programskega jezika C++ Osnove programskega jezika C++ 1 O S N O V E P R O G R A M I R A N J A V C + + U P O R A B A P R O G R A M A CODE::B L O C K S programski stavek Nekaj osnovnih pojmov (1.) definicija, deklaracija, ukaz

More information

Razvoj spletne aplikacije za urejanje datotek JSON z ogrodjem Django

Razvoj spletne aplikacije za urejanje datotek JSON z ogrodjem Django UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Damjan Vidonja Razvoj spletne aplikacije za urejanje datotek JSON z ogrodjem Django DIPLOMSKO DELO UNIVERZITETNI ŠTUDIJ RAČUNALNIŠTVO IN IINFORMATIKA

More information

OGRODJE ZA IZDELAVO SPLETNIH STRANI V PHP

OGRODJE ZA IZDELAVO SPLETNIH STRANI V PHP Dal Rupnik OGRODJE ZA IZDELAVO SPLETNIH STRANI V PHP Diplomsko delo Maribor, september 2011 I Diplomsko delo univerzitetnega študijskega programa OGRODJE ZA IZDELAVO SPLETNIH STRANI V PHP Študent: Študijski

More information

Uporaba strežnika SharePoint za vodenje poteka dela pri izvajanju kompleksnih projektov

Uporaba strežnika SharePoint za vodenje poteka dela pri izvajanju kompleksnih projektov Univerza v Ljubljani Fakulteta za računalništvo in informatiko Roman Orač Uporaba strežnika SharePoint za vodenje poteka dela pri izvajanju kompleksnih projektov DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI

More information

Lab # 2 Hands-On. DDL Basic SQL Statements Institute of Computer Science, University of Tartu, Estonia

Lab # 2 Hands-On. DDL Basic SQL Statements Institute of Computer Science, University of Tartu, Estonia Lab # 2 Hands-On DDL Basic SQL Statements Institute of Computer Science, University of Tartu, Estonia Part A: Demo by Instructor in Lab a. Data type of MySQL b. CREATE table c. ALTER table (ADD, CHANGE,

More information

Osnove programskega jezika C

Osnove programskega jezika C Rok Vrabič, Lovro Kuščer Osnove programskega jezika C Gradivo za vaje pri predmetih Mehatronski sistemi in Diskretni krmilni sistemi Ljubljana, 2014 Kazalo 0 Uvod... 1 1 Prvi C program... 2 1.1 Zgodovina

More information

Učinkovito preiskovanje polnotekstovnih podatkov v splošnonamenskih podatkovnih sistemih

Učinkovito preiskovanje polnotekstovnih podatkov v splošnonamenskih podatkovnih sistemih Univerza v Ljubljani Fakulteta za računalništvo in informatiko Blaž Štempelj Učinkovito preiskovanje polnotekstovnih podatkov v splošnonamenskih podatkovnih sistemih DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI

More information

Skriptni jezik lupine Bash

Skriptni jezik lupine Bash Robert Meolic meolic@uni mb.si Skriptni jezik lupine Bash interno gradivo za predmet VSO, 2006/07 1. LITERATURA Pri sestavljanju gradiva o skriptnem jeziku lupine Bash sem uporabljal internet in naslednji

More information

Introduction to SQL on GRAHAM ED ARMSTRONG SHARCNET AUGUST 2018

Introduction to SQL on GRAHAM ED ARMSTRONG SHARCNET AUGUST 2018 Introduction to SQL on GRAHAM ED ARMSTRONG SHARCNET AUGUST 2018 Background Information 2 Background Information What is a (Relational) Database 3 Dynamic collection of information. Organized into tables,

More information

CSED421 Database Systems Lab. Index

CSED421 Database Systems Lab. Index CSED421 Database Systems Lab Index Index of Index What is an index? When to Create an Index or Not? Index Syntax UNIQUE Index / Indexing Prefixes / Multiple-column index Confirming indexes Index types

More information

Knjižnjice krmiljenje zaslona Uvod v sistemsko programiranje

Knjižnjice krmiljenje zaslona Uvod v sistemsko programiranje Knjižnjice krmiljenje zaslona Uvod v sistemsko programiranje Standardna knjižnjica C Funkcije z nizi int strlen( s) Vrne število znakov v nizu s (brez nultega znaka). char *strchr(s, c) Vrne kazalec na

More information

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO. Rok Bertoncelj. Parsek CMS 2.0 DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO. Rok Bertoncelj. Parsek CMS 2.0 DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Rok Bertoncelj Parsek CMS 2.0 DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU Mentor: prof. dr. Marko Bajec Ljubljana, 2010 IZJAVA O AVTORSTVU

More information

TI C2000: Družina za vgrajene (embedded) aplikacije

TI C2000: Družina za vgrajene (embedded) aplikacije CPU MIPS RAM (words) ROM (words) Flash (words) BootROM (words) Event Manager CAP/QEP TIMER PM(CMP) ADC TIMER Resolution 12 # ofchan 16 Conv time McBSP EXMIF atch Dog SPI SCI (UART) CAN Volts (V) # I/O

More information

UPORABA SILVERLIGHT 4 ZA PODPORO PRI ELEKTRONSKEM PREVERJANJU ZNANJA

UPORABA SILVERLIGHT 4 ZA PODPORO PRI ELEKTRONSKEM PREVERJANJU ZNANJA Matjaž Reberc UPORABA SILVERLIGHT 4 ZA PODPORO PRI ELEKTRONSKEM PREVERJANJU ZNANJA Diplomsko delo Maribor, junij 2011 I Diplomsko visokošolskega strokovnega študijskega programa UPORABA SILVERLIGHT 4

More information

Primož Hadalin IZDELAVA SPLETNEGA PORTALA POSLOVNE APLIKACIJE Z UPOŠTEVANJEM RAZLIK MED SPLETNIMI BRSKALNIKI

Primož Hadalin IZDELAVA SPLETNEGA PORTALA POSLOVNE APLIKACIJE Z UPOŠTEVANJEM RAZLIK MED SPLETNIMI BRSKALNIKI Univerza v Ljubljani Fakulteta za računalništvo in informatiko Primož Hadalin IZDELAVA SPLETNEGA PORTALA POSLOVNE APLIKACIJE Z UPOŠTEVANJEM RAZLIK MED SPLETNIMI BRSKALNIKI diplomska naloga na visokošolskem

More information

Dostop do podatkov Svetovne banke v orodju Orange

Dostop do podatkov Svetovne banke v orodju Orange Univerza v Ljubljani Fakulteta za računalništvo in informatiko Miha Zidar Dostop do podatkov Svetovne banke v orodju Orange DIPLOMSKO DELO UNIVERZITETNI ŠTUDIJSKI PROGRAM RAČUNALNIŠTVO IN INFORMATIKA Mentor:

More information

Primerjava izvornega in hibridnega razvoja mobilne aplikacije

Primerjava izvornega in hibridnega razvoja mobilne aplikacije UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Luka Vidmar Primerjava izvornega in hibridnega razvoja mobilne aplikacije DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE

More information

TINYINT[(M)] [UNSIGNED] [ZEROFILL] A very small integer. The signed range is -128 to 127. The unsigned range is 0 to 255.

TINYINT[(M)] [UNSIGNED] [ZEROFILL] A very small integer. The signed range is -128 to 127. The unsigned range is 0 to 255. MySQL: Data Types 1. Numeric Data Types ZEROFILL automatically adds the UNSIGNED attribute to the column. UNSIGNED disallows negative values. SIGNED (default) allows negative values. BIT[(M)] A bit-field

More information

Predelava javanskega navideznega stroja za štetje ukazov zložne kode

Predelava javanskega navideznega stroja za štetje ukazov zložne kode Univerza v Ljubljani Fakulteta za računalništvo in informatiko Nikolaj Janko Predelava javanskega navideznega stroja za štetje ukazov zložne kode DIPLOMSKO DELO UNIVERZITETNI ŠTUDIJSKI PROGRAM PRVE STOPNJE

More information

Razvoj napredne spletne trgovine z upoštevanjem zgodovine nakupov

Razvoj napredne spletne trgovine z upoštevanjem zgodovine nakupov UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Slobodan Jovanović Razvoj napredne spletne trgovine z upoštevanjem zgodovine nakupov DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM

More information

Testiranje spletne aplikacije z orodji Selenium in Windmill

Testiranje spletne aplikacije z orodji Selenium in Windmill UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Bogdan Urdih Testiranje spletne aplikacije z orodji Selenium in Windmill DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE

More information

Primerjava relacijskih, NoSQL in NewSQL podatkovnih baz

Primerjava relacijskih, NoSQL in NewSQL podatkovnih baz Univerza v Ljubljani Fakulteta za računalništvo in informatiko Marko Mikuletič Primerjava relacijskih, NoSQL in NewSQL podatkovnih baz DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE

More information

Metode logičnega snovanja Programabilne logične naprave in VHDL. Miha Moškon

Metode logičnega snovanja Programabilne logične naprave in VHDL. Miha Moškon Metode logičnega snovanja Programabilne logične naprave in VHDL Miha Moškon Programabilne logične naprave Metode logičnega snovanja, 1. laboratorijska vaja 2 Programabilna logična vezja V času proizvodnje

More information

Mobilna aplikacija za pregled informacij o prometu v Sloveniji

Mobilna aplikacija za pregled informacij o prometu v Sloveniji UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Miha Majzelj Mobilna aplikacija za pregled informacij o prometu v Sloveniji DIPLOMSKO DELO NA VISOKOŠOLSKEM STROKOVNEM ŠTUDIJU Ljubljana,

More information

Razvoj aplikacij na platformi Google App Engine

Razvoj aplikacij na platformi Google App Engine UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Jure Vrščaj Razvoj aplikacij na platformi Google App Engine DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU Mentor: prof. dr. Janez Demšar Ljubljana,

More information

Spletni urejevalnik JSON datotek s podano vsebinsko shemo

Spletni urejevalnik JSON datotek s podano vsebinsko shemo Univerza v Ljubljani Fakulteta za računalništvo in informatiko Marko Struna Spletni urejevalnik JSON datotek s podano vsebinsko shemo DIPLOMSKO DELO UNIVERZITETNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO

More information

SPLETNE SESTAVLJANKE IN POSLOVNI PORTALI

SPLETNE SESTAVLJANKE IN POSLOVNI PORTALI UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO Miha Pavlinek SPLETNE SESTAVLJANKE IN POSLOVNI PORTALI Diplomska naloga Maribor, marec 2008 I FAKULTETA ZA ELEKTROTEHNIKO,

More information

Podatkovne baze I in Osnove podatkovnih baz

Podatkovne baze I in Osnove podatkovnih baz Podatkovne baze I in Osnove podatkovnih baz dr. Rok Rupnik Šolsko leto 2007/2008-1 - Splošne informacije Priporočena literatura [1] Raghu Ramakrishnan, Johannes Gehrke (2003). Database Management Systems,

More information

Izdelava hibridnih mobilnih aplikacij z ogrodjem Ionic

Izdelava hibridnih mobilnih aplikacij z ogrodjem Ionic Univerza v Ljubljani Fakulteta za računalništvo in informatiko Janez Čadež Izdelava hibridnih mobilnih aplikacij z ogrodjem Ionic DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO

More information

Navodila za uporabo izdelkov programske opreme Microsoft

Navodila za uporabo izdelkov programske opreme Microsoft Navodila za uporabo izdelkov programske opreme Microsoft Kazalo Navodila za konfiguracijo odjemalca za e-pošto Outlook Splošno 3 Nastavitev poštnega predala s protokolom MAPI v odjemalcu Outlook 2007 s

More information

Razred File vsebuje osnovne metode za delo z datotekami, kot sta branje in zapisovanje.

Razred File vsebuje osnovne metode za delo z datotekami, kot sta branje in zapisovanje. Delo z datotekami Razred File Razred File vsebuje osnovne metode za delo z datotekami, kot sta branje in zapisovanje. Deklaracija objekta File poteka tako: File ime = new File(pot_do_datoteke_in_ime);

More information

Analiza uporabe GWT za razvoj spletnih aplikacij

Analiza uporabe GWT za razvoj spletnih aplikacij Univerza v Ljubljani Fakulteta za računalništvo in informatiko Saša Makorič Analiza uporabe GWT za razvoj spletnih aplikacij DIPLOMSKO DELO UNIVERZITETNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO IN

More information

Primerjava uporabe SOAP in REST za potrebe povezave mobilnih naprav s spletnimi storitvami

Primerjava uporabe SOAP in REST za potrebe povezave mobilnih naprav s spletnimi storitvami Univerza v Ljubljani Fakulteta za računalništvo in informatiko Matjaž Rajnar Primerjava uporabe SOAP in REST za potrebe povezave mobilnih naprav s spletnimi storitvami DIPLOMSKO DELO NA UNIVERZITETNEM

More information