Oracle ja NoSQL Riku Nykänen 28.3.2012
Sisältö Oracle-tietokanta Oraclen historiaa Tietokannan rakenne ja arkkitehtuuri Oraclen ominaisuuksia Tietokannan hallintatyökalut No SQL NoSQL: mitä ja miksi? CAP teoreema Cassandra Tietotyypit Tietokannan luonti, tiedon lisääminen ja haku
Oracle lyhyesti Perustettu 1977 Ensimmäisenä tuotteena tietokanta Kasvanut innokkaasti yritysostoilla Viimeisimmät merkittävät hankinnat MySQL ja Sun Aiemmin tuotteina vain ohjelmistoja ja palveluita, mutta nykyisin myös laitteita Valmiiksi integroituja laite- ja ohjelmistoratkaisuja
Oraclen tuotteita Tietokantojen lisäksi Oracle on paljon muita tuotteita lähinnä yritysten ja suurten organisaatioiden käyttöön Lisäksi nykyisin Oracle omistaa Java-kielen oikeudet Oraclen käyttöjärjestelmiä: Oracle Linux ja Solaris Tuoteryhmiä: Middleware Collaboration Suite Financial Applications Oracle Project Portfolio Management Oracle E-Business Suite
Oraclen tietokannan erikoispiirteitä Suorituskykyorientoitunut Paljon omia laajennuksia SQL-kielessä Data dictionary -näkymät PL/SQL-kieli Java- ja XML-tuki
Oraclen tietokantatuotteita Oracle 11g R2 Express, Standard, Enterprise TimesTen BerkleyDB MySQL NoSQL BigData Appliance Exadata Database Machine
Oracle-tietokannan rakenne Yksi Oracle-sovellus voi sisältää useita tietokantainstansseja Tietokantainstansseja voidaan hallita itsenäisesti Yksi tietokantainstanssi voi pitää sisällään useita skeemoja sisältää omat käyttäjänsä (voidaan linkittää myös käyttöjärjestelmän käyttäjiin) käyttää omia tallennustiedostoja Jokainen tietokantainstanssi voi sisältää useita taulualueita, jotka taas voivat käyttää useita tietokantatiedostoja
Oraclen muistialueet Program Global Area (PGA) Yhden Oracle-prosessin käyttämä muistialue Jokaisella palvelin prosessilla on oma, jakamaton PGAmuistialueensa System Global Area (SGA) Jaettu muistialue, joka sisältää tietoa yhdestä tietokantainstanssista Useat käyttäjät voivat jakaa muistialueen avulla tietoa tietokannan tilasta Suuri SGA alue vähentää tietojen kirjoittamista ja lukemista levyltä eli parantaa suorituskykyä
Arkkitehtuuri Windowsissa tietokantaprosessi koostuu useista säikeistä (tai taustaprosesseista) Prosessi käynnistyy automaattisesti Windows-palveluna Jokaisella samalla koneella toimivalla tietokantaprosessilla on omat taustaprosessit Kuva Oracle
Joitakin SGA alueella jaettuja tietoja Buffer cache Kaikkien käyttäjäprosessien jakama välimuisti, josta kaikki tietokannan tieto luetaan ja kirjoitetaan Shared pool Uudelleen käytettävät SQL-lauseet (valmiiksi käännettyjä) Käyttäjien, taulujen ja indeksien tietoja Tietoja käyttöoikeuksista Tietoja tallennetuista proseduureista Redo log buffer Tallentaa suoritetut transaktiot ennen kuin varsinaisia tietokantatiedostoja päivitetään
DBA-käyttäjätunnukset SYS-käyttäjä Luodaan tietokannan luonnin yhteydessä automaattisesti Saa automaattisesti DBA-käyttäjäroolin Kaikki perustaulut ja näkymät luodaan SYS-käyttäjälle SYS-käyttäjän tauluja ja näkymiä saa muokata vain järjestelmä SYSTEM-käyttäjä Luodaan tietokannan luonnin yhteydessä automaattisesti Saa automaattisesti DBA-käyttäjäroolin Hallinnollinen käyttäjätunnus, joka voi luoda tauluja
Hallinnolliset käyttäjäroolit DBA-rooli Luodaan automaattisesti tietokannan luonnin yhteydessä Sisältää suurimman osan tietokannan hallintaan tarvittavista oikeuksista => ei tulisi missään tilanteessa myöntää tavalliselle käyttäjälle Ei sisällä SYSDBA- tai SYSOPER-rooleja SYSDBA- ja SYSOPER-roolit Luodaan automaattisesti tietokannan luonnin yhteydessä Molemmilla rooleilla oikeus käynnistää ja pysäyttää tietokantainstanssi Voivat hallita tietokantaa, vaikka se ei olisi auki
Oraclen dynaamiset ja staattiset näkymät Yli tuhat erilaista näkymää, joista löytyy tietoa tietokannasta ja sen objekteista Dokumentoitujen näkymien lisäksi löytyy myös dokumentoimattomia näkymiä DICTIONARY-näkymästä löytyy kaikkien dokumentoitujen näkymien nimi ja kuvaus Näkymät jakaantuvat pääasiassa staattisiin ja dynaamisiin näkymiin
Staattiset näkymät Sisäänrakennettustaattisia näkymiä on kolmea tyyppiä ALL_<tarkenne> DBA_<tarkenne> USER_<tarkenne> Taulujen metatiedot löytyvät esimerkiksi ALL_TABLES tai USER_TABLES näkymistä USER_TABLES-näyttää vain kirjautuneen käyttäjän tiedot Kaikkien tietokannan objektien tiedot löytyvät ALL_OBJECTS-näkymästä
V$-näkymät Dynaamisia näkymiä, jotka sisältävät tietoa tietokannasta ja sen tilasta Joitakin käytetyimpiä näkymiä V$PARAMETER, V$DATABASE, V$INSTANCE, V$SGA, V$SGASTAT V$SESSION, V$TRANSACTION, V$LOCK V$SQL, V$SQLAREA, V$SQLTEXT V$LOG, V$LOGFILE
SQL-funktioita TO_CHAR: muuttaa päiväyksen merkkijonoksi TO_CHAR(sysdate, 'DD-MON-YYYY HH24:MI:SS') TO_DATE: muuttaa merkkijonon päiväykseksi TO_DATE('260120101500', 'DDMMYYYYHH24MI') SYSDATE: nykyinen päiväys ja kellonaika Matemaattisia funktioita: FLOOR, CEIL, MOD, POWER, SIGN,... Merkkijonofunktioita: UPPER, LOWER, TRIM, CONCAT, REPLACE
Muita erikoisuuksia Jokaisessa taulussa sarake ROWID Jokaiselle riville yksikäsitteinen tunniste (saman tietokannan sisällä) Nopein tapa hakea yksittäinen rivi taulusta DUAL-taulu Yhden sarakkeen taulu, jossa yksi rivi Löytyy jokaisesta Oracle-tietokannasta SELECT SYSDATE FROM DUAL
PL/SQL-proseduurit PL/SQL on proceduraalinen ohjelmointikieli, jota Oracle-tietokannat tukevat versiosta 7.3 alkaen PL/SQL:llä voidaan tehdä funktioita tietokantaan, joita voidaan suorittaa osana SQL-kyselyitä tai SQL*Plus-työkalulla Proseduureilla voidaan suorittaa loogisia operaatioita, jotka eivät ole SQL-kielessä mahdollisia Proseduureille mahdollista antaa parametreja ja saada paluuarvoja
PL/SQL esimerkki DECLARE var_salary number(6); var_emp_id number(6) = 1000; BEGIN SELECT salary INTO var_salary FROM employee WHERE emp_id = var_emp_id; dbms_output.put_line(var_salary); dbms_output.put_line( 'The employee ' var_emp_id ' has salary ' var_salary); END; /
Java-funktiot Java-luokkia ja funktioita on mahdollista tallentaa tietokantaan kuten PL/SQL-proseduureja Java-luokat toteutetaan tietokannan ulkopuolella Java-luokka ladataan tietokantaan loadjavakomennolla Tämän jälkeen funktio julkaistaan tallennettuna proseduurina Sen jälkeen funktiota voidaan kutsua esim SQL*Plus:sta SQL> EXECUTE add_new_book('jon Ronson', 'The Men Who Stare At Goats'); Esimerkkejä: http://www.oracle.com/technology/sample_code/tech/ja va/jsp/dbwebservices.html
Oracle-tietokannan sovelluksia Database Configuration Assistant Net Configuration Assistant Enterprise Manager Administration Assistant SQL Developer SQL*Plus isql*plus
Oracle DBCA Database Configuration Assistant on työkalu uuden tietokantainstanssin luomiseen tai olemassa olevan asetusten muuttamiseen
Oracle DBCA DBCA kyselee instanssin luomiseen tarvittavat tiedot Wizard-tyyppisesti Asetukset on mahdollista tallentaa malliksi DBCA on mahdollista käynnistää komentorivillä ja antaa parametrit response-tiedostossa
Tietokannan luonti DBCA:lla Valitse tietokannantyyppi General Purpose or Transaction Processing Custom Database Data Warehouse Anna tietokannalle nimi (Global Database Name) ja määritä SID (Oracle System Identifier) Määritä hälytysten vastaanottajat Anna pääkäyttäjien salasanat Määritä tallennuspaikka Määritä palautusasetuset (optionaalinen, Flash Recovery Area) Valitse mahdolliset esimerkkiskeemat Määritä oletusasetukset Määritä tietoturva-asetukset Määritä tallennustiedostojen sijainnit Lopuksi luo tietokanta (voit myös tallentaa asetukset malliksi)
Oracle Net Listener Oracle Net Listener on Oracletietokantapalvelimen komponentti, joka kuuntelee asiakassovellusten yhteydenmuodostuspyyntöjä Yhteysosoitteet konfiguroidaan yleensä asiakassovelluksen tnsnames.oratiedostossa Tiedostoa voi muokata myös Net Configuration Assistant-työkalulla
Enterprise Manager Selainkäyttöinen hallintasovellus Käytännössä lähes kaikki tietokannan hallintaoperaatiot on mahdollista tehdä EM:n kautta Löytyy osoitteesta http://palvelin:5500/em 5500 oletusportti
Enterprise Managerin toimintoja Dashboard-tilanäyttö Asetusten hallinta Varmuuskopioiden hallinta ja ottaminen Logien näyttäminen Resurssien- ja käyttäjienhallinta Skeemojen selaaminen ja muokkaaminen SQL Worksheet SQL-komentojen suorittamiseen...
Oracle Administration Assistant Graafisella käyttöliittymällä varustettu hallintasovellus Lähinnä käyttäjien, ryhmien ja roolien hallintaan
Oracle SQL*Plus SQL*Plus on klassinen Oracle-tietokantojen käyttöliittymä, jolla voidaan suorittaa SQLkomentoja SQL*Plus:n ominaisuuksia tekstipohjainen käyttöliittymä SQL-skriptien suorittaminen tulosteen tallentaminen tiedostoon (myös HTML-muodossa)
SQL*Plus käynnistäminen Käynnistettynä Windowsin aloitusvalikosta SQL*Plus ottaa yhteyden oletustietokantaan Komentoriviltä käynnistettäessä on mahdollista antaa käyttäjä ja tietokanta parametrina: sqlplus käyttäjä/salasana@tietokanta SQL-tiedoston antaminen parametriksi: sqlplus me/passme@db @c:\script.sql Kirjautuminen käyttöjärjestelmän tunnuksella sqlplus /
SQL*Plus käyttö Komentokehoitteeseen voi kirjoittaa minkä tahansa SQL-lauseen tai SQL*Plus komennon SQL-lauseen loppuun lisättävä ; merkki loppuun SELECT SYSDATE FROM DUAL; / ajaa edellisen komennon uudestaan @tiedosto ajaa tiedoston sisältämät SQL-lauseet!komento suorittaa käyttöjärjestelmän komennon QUIT ja EXIT komennot sulkevat sovelluksen
SQL*Plus:n komentoja CONNECT SYS AS SYSDBA Ota yhteys pääkäyttäjänä SET PAGESIZE 100 Aseta sivun 100 riviä Kenttien otsikkorivit tulostuvat jokaiselle sivulle kerran SET LINESIZE 100 Aseta rivinleveydeksi 100 merkkiä SPOOL <tiedoston nimi> Tallenna kaikki komennot ja tulostukset tiedostoon SPOOL OFF Lopeta tallennus
SQL*Plus:n komentoja DESC TABLE/VIEWNAME Näyttää taulun tai näkymän rakenteen SHOW PARAMETERS Näyttää käytössä olevat parametrit SET TIMING ON/OFF Näyttää SQL-lauseen suoritusajan SET PAUSE ON/OFF Näyttää PAGESIZE:n muokaisen määrän rivejä kerrallaan SET AUTO ON/OFF Aseta autocommit päälle/pois
isql*plus Selainkäyttöinen versio SQL*Plus sta Palvelu täytyy käynnistää palvelimella: isqlplusctl start Tämän jälkeen isql*plus on käytettävissä selaimella osoitteessa: http://palvelimennimi:5560/isqlplus
Oracle Datapump (export/import) dpexp-sovelluksella voidaan viedä tietokannasta pois tietoa, esimerkiksi toiseen tietokantaan dpimp-sovelluksella voidaan tuoda tietoa tietokantaan
Lisää luettavaa Oracle 11R2 http://www.oracle.com/pls/db112/homepage 2-day DBA http://www.oracle.com/pls/db112/to_toc?pathname =server.112/e10897/toc.htm Oracle Technology Network http://www.oracle.com/technology/index.html
NoSQL
Mikä NoSQL? NoSQL tietokannanhallintajärjestelmien luokka, johon kuuluu sekalainen joukko tietokantoja Tyypillisiä NoSQL-tietokantojen ominaisuuksia Eivät käytä SQL kyselykielenä (jotkut tukevat) Ei tiukkoja skeeman määrityksiä Ei-ACID (atomicity, consistency, isolation, durability) Avain-arvo tyyppiset rakenteet Tukevat suuria datamassoja
Miksi NoSQL? Aika
Hajautetut tietokannat Kun käyttäjämäärät ja tiedon määrä kasvavat, tietokanta on käytännössä pakko hajauttaa Tietokantainstansseja voidaan yhdistää tietokantaklustereiksi Perinteisissä tietokannoissa tiedonvaihto tietokantainstanssien kesken (replikointi) on vaatinut paljon ennakkosuunnittelua ja konfigurointia Perinteisessä replikoinnissa on usein ns master-node, joka ohjaa replikointia Useimmissa NoSQL-tuotteissa kaikki solmut ovat tasa-arvoisia Hajautuksessa ongelmia aiheuttavat yhteyksien viiveet ja katkeamiset sekä tiedon yhtenäisyyden säilyttäminen
CAP teoreema Teoreeman mukaan et voi saada kaikkia kolmea ominaisuutta Yhtenäisyys Saatavuus (käytettävyys) Partitioitumisen kestävyys Voit valita kaksi ja säilyttää viiveen kohtuullisena Availability Consistency Cassandra Partition tolerance
Cassandra Cassandra on yksi yleisimmin käytetyistä NoSQLtietokannoista Cassandraa käyttävät mm Twitter, Netflix, Reddit.. Apache-projekti: http://cassandra.apache.org/ Tärkeimpiä ominaisuuksia Vikasietoinen Lineaarisesti skaalautuva eli soveltuu suurille tietomassoille Aidosti hajautettu (ei SPF:iä) Klusterointi helppoa Soveltuu pienistä todella suuriin petatavujen kokoisiin tietokantoihin
Tiedon rakenteen määrittäminen Cassandrassa tietorakenteet eivät suoraan vastaa relaatiotietokantojen rakenteita Tärkeimmät rakenteet ovat Column SuperColumn ColumnFamily SuperColumnFamily Keyspace
Column Column on pari (tuple), johon liittyy aikaleima Käytännössä yksi column muodostaa nimi-arvoparin, jolla on aikaleima Esimerkki columnista JSON-notaatiolla { "name": "email", "value": "riku.nykanen@relator.fi", "timestamp": "123456789" }
SuperColumn SuperColumn on pari (tuple), jonka arvon muodostaa joukko Column eja Käytännössä SuperColumn on kartta (map) Columneista Esimerkki SuperColumnista JSON-notaatiolla { "name": "osoite", } "value": { "katusoite": {"name": "katusoite, "value : "Kauppakatu27B18, "timestamp": "123456789 }, "postitoimipaikka": {"name": "postitoimipaikka, "value": "Jyväskylä", "timestamp": "123456789 }, "postinumero": {"name": "postinumero, "value": 40100", "timestamp": "123456789"}}
ColumnFamily ja SuperColumnFamily ColumnFamily vastaa relaatiotietokantojen taulua Se kokoaa joukon column eja yhteen ja voi sisältää rajattoman määrän näitä joukkoja (rivejä) SuperColumnFamily eroaa ColumnFamily:sta siten, että pelkkien nimi-arvo-parien (column) sijasta rivi muodostuu joukosta SuperColumneita (eli kartasta) Relaatiotietokannassa SuperColumnFamily täytyy yleensä esittää useampana tauluna ja viittauksina niiden välillä
ColumnFamily esimerkki User = { riku.nykanen: { firstname: Riku", lastname: Nykänen", country: Finland" }, admin: { lastname: Administrator", country: Finland", }, }
SuperColumnFamily esimerkki UserLicenses = { riku.nykanen: { office: { name: MS Office, key: ABCDE-12345 }, sophos: { name: Sophos AV, key: A123, expdate: 1.1.2014 }, vmware: { name: VMware workstation, key: 12345 }, }, admin: { sophossrv: { name: Sophos Server, key: ABC123 }, vmwareesx: { name: VMware ESXi, key: 123, expdate: 1.6.2015 }, }, }
Keyspace Keyspace vastaa tietokantainstanssia Se alle voidaan luoda column eja ja family jä Tyypillisesti yhden sovelluksen käyttämät tiedot ovat saman keyspacen alla (kuten relaatiotietokannoissa yhdessä tietokannassa) Yksi Cassandra asennus voi sisältää useamman keyspacen Replikointia kontrolloidaan keyspace:ittäin
Relaatiotietokanta vs Cassandra http://www.datastax.com/docs/1.0/ddl/about-data-model#comparing-the-cassandra-data-model-to-a-relational-database
Relaatiotietokanta vs Cassandra http://www.datastax.com/docs/1.0/ddl/about-data-model#comparing-the-cassandra-data-model-to-a-relational-database
Cassandra CLI Muista ; komennon loppuun!
Cassandra CLI Yhteydenmuodostus tietokantaan komennolla connect connect localhost/9160; Keyspacen valinta komennolla use (vrt MySQL) use demospace; Poistuminen komennolla quit tai exit
Tietokannan luominen create keyspace appdata; use appdata; create column family User with comparator = UTF8Type and column_metadata = [ {column_name: firstname, validation_class: UTF8Type}, {column_name: lastname, validation_class: UTF8Type} ];
Columnin lisääminen update column family User with column_metadata = [ {column_name: firstname, validation_class: UTF8Type}, {column_name: lastname, validation_class: UTF8Type}, {column_name: country, validation_class: UTF8Type, index_type: KEYS} {column_name: logincount, validation_class: LongType} ];
Rivien lisääminen set User[utf8( admin')]['lastname'] = 'Administrator'; set User[utf8( admin')]['country'] = 'Finland'; assume User keys as utf8; set User['riku.nykanen']['firstname'] = 'Riku'; set User['riku.nykanen']['lastname'] = 'Nykänen'; set User['riku.nykanen']['country'] = 'Finland';
[default@demo] get User where firstname='riku'; No indexed columns present in index clause with operator EQ Haku [default@demo] list User;... [default@demo] get User where country='finland'; ------------------- RowKey: riku.nykanen => (column=country, value=finland, timestamp=1332760256857000) => (column=firstname, value=riku, timestamp=1332760256767000) => (column=lastname, value=nykänen, timestamp=1332760256815000) ------------------- RowKey: admin => (column=country, value=finland, timestamp=1332760255465000) => (column=lastname, value=administrator, timestamp=1332760255432000) 2 Rows Returned. Elapsed time: 81 msec(s).
CQL Cassandra Query Language SQL:n kaltainen kyselykieli Helpottaa relaatiokannoista NoSQL:n siirtymistä
Cassandra API Ohjelmointirajapintoja löytyy useille eri kielille: Java, C++,.NET, Python, Scala, Perl, PHP... http://wiki.apache.org/cassandra/clientoptions Ei tue ODBC/JDBC-ajureita erilaisten tietomallien vuoksi Paras dokumentaatio löytyy Datastaxin sivuilta http://www.datastax.com/docs
Oracle NoSQL Useita eroja Cassandraan Tietomalli perustuu enemmän avain-arvo-pareihin Ei sisällä esim SuperColumnFamily:n tapaista tyyppiä Luvataan ACID-ominaisuudet Klusterointi hyvin saman tyyppistä Canssandran kanssa
Oracle NoSQL Key Features (Oraclen mukaan) Simple Data Model Key-value pair data structure, keys are composed of Major & Minor keys Easy-to-use Java API with simple Put, Delete and Get operations Scalability Automatic, hash-function based data partitioning and distribution Intelligent NoSQL Database driver is topology and latency aware, providing optimal data access Predictable behavior ACID transactions, configurable globally and per operation Bounded latency via B-tree caching and efficient query dispatching High Availability No single point of failure Built-in, configurable replication Resilient to single and multistorage node failure Disaster recovery via data center replication Easy Administration Web console or command line interface System and node management Shows system topology, status, current load, trailing and average latency, events and alerts
Harjoitus Luo Cassadra-CLI:llä tietokanta, jonne voi tallentaa henkilöiden osoitetietoja Hae tietokannasta tietoja CQL-työkalula
Cassandra CLI bugi Jos keyspacen luominen epäonnistuu virheeseen cassandra.yaml tiedoston puuttumisesta, korjaa CLI:n suoritushakemisto Mene Start-menussa Cassandra CLI Utilityn päälle valitse hiiren oikealla näppäimellä Properties. Muuta Start in hakemiston viimeiseksi osaksi \conf\ (oletuksena \bin\)