35
RĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte Multidatubāzes Individuālais darbs Multidatubāzes sistēmas izstrādāšana ar Python/TurboGears izmantošanu

A.Malahova - multiDB

Embed Size (px)

Citation preview

Page 1: A.Malahova - multiDB

RĪGAS TEHNISKĀ UNIVERSITĀTEDatorzinātnes un informācijas tehnoloģijas fakultāte

Multidatubāzes

Individuālais darbs

Multidatubāzes sistēmas izstrādāšana ar Python/TurboGears izmantošanu

Izstrādāja: Anna Malahova,Apl. Nr. 011LDK010,

DGDB-3Pārbaudīja: prof. Eiduks

Page 2: A.Malahova - multiDB

2006. / 2007.m.g.

2

Page 3: A.Malahova - multiDB

Saturs

Ievads....................................................................................................................................................31. Globālās shēmas integrācijas pieeja..................................................................................................4

1.1. Galvenās priekšrocības...............................................................................................................41.2. Galvenie trūkumi un grūtības.....................................................................................................5

2. Multibadubāzes sistēmas projekts.....................................................................................................62.1. MultiDB sistēmas projektēšana..................................................................................................62.2. Projekta izveidošana...................................................................................................................7

3. Datu bāzu izveidošana.......................................................................................................................83.1. SQLite........................................................................................................................................83.2. PostgreSQL..............................................................................................................................113.3. Oracle.......................................................................................................................................14

4. Globālās shēmas izveidošana..........................................................................................................165. Lietojuma izveidošana.....................................................................................................................18

5.1. Pieslēgšanās datu bāzēm un datu iegūšana..............................................................................185.2. Lietotāja saskarnes izveidošana...............................................................................................20

6. Multidatubāzes sistēmas darbība.....................................................................................................22Secinājumi...........................................................................................................................................26Avoti....................................................................................................................................................27

3

Page 4: A.Malahova - multiDB

Ievads

Šajā darbā tiks izskatīta multidatubāzes sistēmas izveidošana, izmantojot Active Python

programmēšanas valodu un TurboGears izstrādes vidi neviendabīgo datu bāzu sadarbspējas

nodrošināšanai. Multidatubāzu sistēmu darbības mehānisma pamatprincipu izskatīšanai tiks

izmantota globālās shēmas integrācijas pieeja.

Multidatubāzes sistēma ietvers 3 dažādas datu bāzes – SQLite, PostgreSQL un Oracle,

globālo shēmu, kurā būs noteikts, kādas datu bāzes, to tabulas un lauki būs pieejami globālajam

lietotājam, kurš pieslēgsies sistēmai ar Web-orientēta lietojuma palīdzību.

Lai no Python lietojuma būtu iespējams vērsties pie datu bāzes, nepieciešams uzstādīt

attiecīgās datu bāzes saskarni. Pēc adreses http://wiki.python.org/moin/DatabaseInterfaces var atrast

datu bāzu saskarņu sarakstu, kuras ir pieejamas Python izstrādātājiem. Iepriekšminētām datu bāzēm

no šī saraksta var izmantot SQLite 3, psycorpg 2 un cx_Oracle. Pieslēgšanas datu bāzēm caur šīm

saskarnēm tiks izskatīta šajā darbā.

4

Page 5: A.Malahova - multiDB

1. Globālās shēmas integrācijas pieeja

Globālās shēmas integrācijas pieejas pamatā ir datu dalīšanas nodrošināšana caur globālo

shēmu. Globālā shēma nepieciešama globālo vaicājumu izpildīšanai. Šī pieeja vairāk piemērota

nelielām multidatubāzēm. Integrācijas procesa veikšanai nepieciešams saprast datu semantiku.

Pieejas izmantošana uzliek zināmus ierobežojumus, jo palielinoties shēmu skaitam, tiek pagrūtināta

apstrāde. 1. attēlā globālas shēmas integrācijas pieeja parādīta shematiski.

1. att. Globālās shēmas integrācijas pieeja

1.1. Galvenās priekšrocības

ļauj izpildīt vaicājumus, kas skar daudzas datubāzes;

tiek nodrošināta caurspīdīga pieeja mērķa shēmām.

5

Page 6: A.Malahova - multiDB

1.2. Galvenie trūkumi un grūtības

nevar pielietot automātisko translāciju shēmas labošanā (update) un integrācijā (izmaiņās

komponentshēmās var izraisīt nepieņemamas izmaiņas globālajā shēmā un otrādi);

nepieciešamība saprast un interpretēt, ko dažādas entītijas nozīmē, un kaut kādā veidā translēt to

no vienas shēmas uz citu;

nepieciešamība uzturēt globālās shēmas komponentshēmu biežas evolucionēšanas dēļ.

Vienas centralizētas shēmas dēļ lēmumu pieņemšana ir centralizēta, līdz ar to pastāv vājas

vietas ātrdarbībā.

6

Page 7: A.Malahova - multiDB

2. Multibadubāzes sistēmas projekts

2.1. MultiDB sistēmas projektēšana

Kā redzams uz shēmas (2. att.), multidatubāzes sistēma ietver vairākas sastāvdaļas:

neviendabīgus datu avotus; lietojumu, ar kuru strādā globālais lietotājs; globālo shēmu, kur

lietojums atrod informāciju par tām tabulām, kuras ir pieejamas globālajām lietotājam (tabulas īstais

vārds datubāzē un datu bāzes unikālais identifikators (dburi), kas satur informāciju par to, kādā

veidā lietojums var pieslēgties norādītai datu bāzei).

2. att. Multidatubāzes sistēmas struktūra

Jāatzīmē, ka ne visas lokālās datu bāzes tabulas var būt pieejamas globālajam lietotājam,

tāpat kā globālajam lietotājam var būt pieejami tikai atsevišķi tabulas lauki (šim nolūkam var

izmantot skatus). Tādā veidā, no SQLite datu bāzes „darbinieki” globālajam lietotājam būs

pieejamas tikai tabulas „adreses”, „klases”, „apmaksa” un „setnieki”; no PostgreSQL datu bāzes būs

pieejamas visas tabulas un no Oracle datu bāzes būs pieejami 2 skati: „furniture” un „devices” (skat.

sadaļu „Datu bāzu izveidošana”).

7

Page 8: A.Malahova - multiDB

2.2. Projekta izveidošana

TurboGears vidē jaunā projekta izveidošanai tiek izmantota komanda tg-admin quickstart.

TurboGears projekta inicializēšanas laikā tiek pieprasīts ievadīt projekta nosaukumu un pakotnes

nosaukumu, kā arī noteikt, vai projektā tiks izmantota identifikācija pēc lietotāja vārda un paroles

(3.att.).

3. att. TurboGears projekta inicializēšana

Pēc projekta inicializēšanas pašreizējā direktorijā (uz C: diska) tiks izveidota jauna

direktorija ar nosaukumu ama, kurā būs atrodami arī Web servera konfigurēšanas datnes, veidnes un

citas datnes, nepieciešamas Web lietojuma izstrādes uzsākšanai.

Web servera palaišana un projekta datņu kompilēšana notiek ar komandas „C:\ama>python

start-ama.py” palīdzību (4. attēls). Pēc tās izpildīšanas projektu var atvērt pārlūkprogrammā,

norādot adresi „http://localhost:8080/”.

4. att. Web servera palaišana

8

Page 9: A.Malahova - multiDB

3. Datu bāzu izveidošana

3.1. SQLite

Lai izveidotu SQLite datu bāzi, komandrindā tiek ievadīta komanda sqlite3, aiz kuras seko

norāde uz vietu, kur glabāsies datu bāzes datne un datu bāzes nosaukums (datu bāzes datnei būs tāds

pats nosaukums, kā datu bāzei): „sqlite3 c:/ama/sqlite_db/darbinieki”. 5. attēlā parādīta datu bāzes

izveidošana un tabulu definēšana.

5. att. SQLite datu bāzes izveidošana. Tabulu definēšana

Ievadīt datus izveidotajās tabulās var līdzīgi tam, kā tās tika definētas – nolāsot datnes ar

SQL skriptu saturu (6. att.). Šim nolūkam SQLite izmanto komandu .read

c:/ama/sql/insert_db1.sql, kur parametrs aiz atslēgvārda .read ir SQL faila nosaukums.

9

Page 10: A.Malahova - multiDB

10

Page 11: A.Malahova - multiDB

11

Page 12: A.Malahova - multiDB

6. att. Datu ievade datu bāzē „darbinieki”

Pēc datu bāzes izveidošanas norādītajā direktorijā jāparādās datnei ar datu bāzes nosaukumu

(7. att.).

7. att. Datu bāzes „darbinieki” datne

SQLite datu bāzē esošās tabulas var tikt apskatītas ar komandas .tables palīdzību. 8. attēlā

parādītas datu bāzes „darbinieki” tabulas un tajās ierakstītie dati.

12

Page 13: A.Malahova - multiDB

8. att. Datu bāzes „darbinieki” tabulas un tajās ievadītie dati

No visām datu bāzes „darbinieki” tabulām globālajam lietotājam būs pieejamas tikai

„adreses”, „klases”, „apmaksa” un „setnieki”, pie tam, tabulai „sētnieki” tiks piešķirts cits

nosaukums globālajā datu bāzē – tā sauksies „darbinieki”.

3.2. PostgreSQL

Uzsakot darbu ar PostgreSQL, tika izveidots lietotājs anna ar paroli qwuerty123, kura

uzskaites ieraksts tiks izmantots Python lietojumā pieslēgšanai datu bāzei:

> create user anna with login password ‘qwerty123’;

Pēc tam tika izveidota datu bāze, kuras īpašnieks ir jaunizveidots lietotājs:

> create database test with owner =anna;

13

Page 14: A.Malahova - multiDB

PostgreSQL lietotāji atšķiras no sistēmas lietotājiem. Autentifikācijas datne atrodas

PostgeSQL datu direktorijā – tā ir Host Based Authentication datne ar nosaukumu pg_hba.conf.

PostgeSQL ir vairākas lietotāju autentifikācijas metodes. Pārbaudīsim, lai šīs datnes beigās būtu

norādītas sekojošas rindas:

# TYPE DATABASE USER CIDR-ADDRESS METHOD

local all all trust

host all all 127.0.0.1/32 trust

# IPv4 local connections:

host all all 127.0.0.1/32 md5

Kad datu bāze „test” ir izveidota, var pieslēgties tai kā lietotājs anna ar komandas ar

sekojošās komandas palīdzību:

> psql –U anna test

Tad tiek izveidotas 2 tabulas: „contacts” un „pricelist”. Šo tabulu definēšana parādīta 9.

attēlā.

9. att. Datu bāzes „test” tabulu definēšana

10. attēlā parādīta datu ievade tabulā „contacts”. Ar vienkāršā SELECT vaicājuma palīdzību

tiek pārbaudīts, ka dati tika veiksmīgi ierakstīti tabulā.

14

Page 15: A.Malahova - multiDB

10. att. Datu ievade tabulā „contacts”

11. attēlā parādīta datu ievade tabulā „pricelist”. Vienkāršais SELECT vaicājums ļauj

pārliecināties, ka dati tika korekti ierakstīti tabulā.

11. att. Datu ievade tabulā „pricelist”

No datu bāzes „test” tabulām globālajām lietotājam būs pieejamas abas tabulas – gan tabula

„contacts”, gan tabula „pricelist”.

15

Page 16: A.Malahova - multiDB

3.3. Oracle

Kā Orace datu bāzes piemēru izmantosim jau izveidotu telpisko datu bāzi. Lai globālais

lietotājs var piekļūt datiem no 4 šīs datu bāzes tabulām: „mebeles”, „mēbeles_atr”, „iekartas” un

„iekartas_atr”. 12. attēlā parādīta šo tabulu definēšanas informācija.

Izskatīsim, kā var ierobežot tabulas laukus, kuri būs pieejami globālajam lietotājam.

Pieņemsim, ka globālajam lietotājam jābūt iespējai atlasīt un apskatīties lauku „m_num”,

„m_nosaukums” vērtības no tabulas mēbeles un lauku „ma_krasa”, „ma_materiali”,

„ma_izgatavotajs”, „ma_apraksts” vērtības no tabulas „mēbeles_atr”. Savukārt no tabulas iekārtas

viņam būs nepieciešams apskatīties laukus „i_num”, „i_nosaukums”, bet no tabulas „iekartas_atr” –

laukus „ia_izgatavotajs” un „ia_raksturojumi”. Lai to panāktu izveidosim divus skatus, kuri turpmāk

tiks ierakstīti globālajā shēmā un globālais lietotājs vērsīsies nevis tieši pie tabulām, bet pie

izveidotiem skatiem.

12. att. Telpiskās Oracle datu bāzes tabulu definēšanas informācija

13. attēlā parādīta skatu „furniture” un „devices” izveidošana.

16

Page 17: A.Malahova - multiDB

13. att. Skatu „furniture” un „devices” izveidošana

Kā jau bija minēts, globālajam lietotājam no Oracle datu bāzes būs pieejami tikai divi skati –

„furniture” un „devices”.

17

Page 18: A.Malahova - multiDB

4. Globālās shēmas izveidošana

Globālai shēmai izveidosim vienu tabulu ar nosaukumu „global_schema”. Ievietosim to jau

izveidotajā PostgreSQL datu bāzē „tests”. 14. attēlā parādīta globālās shēmas izveidošana

informācijas par globāli pieejamām tabulām ievadīšana.

Redzams, kā tabula „global_schema” satur 4 laukus:

1. „alias” – lauks, kurā glabājas tabulas nosaukums globālajā datu bāzē (multidatubāzu

sistēmā);

2. „tablename” – lauks, kurā atrodams tabulas īstais nosaukums lokālajā datu bāzē;

3. „dburi” – lauks, kas satur datu bāzes unikālo identifikatoru, kurš, savukārt, satur

informāciju par datu bāzes tipu, atrašanas vietu un nosaukumu;

4. „id” – primārās atslēgas lauks, kas satur tabulas ieraksta identifikatoru.

18

Page 19: A.Malahova - multiDB

14. att. Globālās shēmas izveidošana

19

Page 20: A.Malahova - multiDB

5. Lietojuma izveidošana

5.1. Pieslēgšanās datu bāzēm un datu iegūšana

Pieslēgšanās neviendabīgām datu bāzēm un datu iegūšana tiks realizēta Python valodā.

Zemāk ir atrodams datnes ama/controllers.py saturs, kur komentāros aprakstītas izveidotas

funkcijas un visas veicamās darbības. CherryPy, kas ir TurboGears sastāvdaļa, sniedz iespēju viegli

strādāt ar pavedieniem un datu bāzu pieslēgumiem, nepievēršot uzmanību tādiem zema līmeņa

detāliem, kā protokolu, savienojumu (socket) un procesu/pavedienu vadība. Datu bāzes saskarnes

moduļa uzstādīšana dod iespēju Python interpretatoram piekļūt datu bāzei un izpildīt vaicājumus.

Tā kā TurboGears Web serveris tika uzstādīts uz datora, kur jau bija Oracle 9i ar Apache

Web serveru, lai nerastos konflikta šo serveru starpā pora 8080 dēļ, TurboGears projektam šis ports

tika izmainīts uz 8081 – rinda „server.socket_port=8081” datnē dev.cfg.

Datne ama/controllers.py

# Skripta sākumā importējam moduļus, kas neietilpst Python valodāfrom turbogears import controllers, exposefrom model import *from cherrypy import request, responseimport cherrypyfrom pysqlite2 import dbapi2 as sqliteimport psycopg2import cx_Oracle

def connect(thread_index): # Izveidojam pieslēgumus datu bāzēm un ievietojam tos pašreizējā pavedienā

(thread)try:

cherrypy.thread_data.db1 = sqlite.connect("c:/ama/sqlite_db/darbinieki")cherrypy.thread_data.db2 = cx_Oracle.connect('system/malahova@studydb')cherrypy.thread_data.db3 = psycopg2.connect("dbname='test' user='anna'

host='localhost' password='qwerty123'")except:

print "I am unable to connect to the database"

cherrypy.server.on_start_thread_list.append(connect)

class Root(controllers.RootController):# Ja pārlūkprogrammas loga adreses laukā ievadīt „http://localhost:8081/”,# tiks parādīta TurboGears sākumlapa, kurai atbilst veidne

ama/templates/welcome.kid@expose(template="ama.templates.welcome")

20

Page 21: A.Malahova - multiDB

def index(self): import time# log.debug("Happy TurboGears Controller Responding For Duty")return dict(now = time.ctime())

# Lappuse, kura tiks attēlota, ja pārlūkprogrammas loga adreses laukā ievadīt# „http://localhost:8081/dblist” , kurai atbilst veidne

ama/templates/showdblist.kid@expose(template = "ama.templates.showdblist", allow_json = True)def dblist(self):

# PostgreSQL datu bāzei „test” izmantosim kursoruc = cherrypy.thread_data.db3.cursor()# Izpildām vaicājumu globālai shēmai,# kura rezultātā tiek iegūts tabulas vārds globālajā datu bāzē un tabulas

idquery = """

SELECT alias, idFROM global_schema;

"""c.execute(query)# Ievietojām atlasītos ierakstus masīvārows = []while (1):

row = c.fetchone()if row == None:

breakrows.append(row)

c.close()# Funkcija dblist(self) nodod veidnei kā parametru vārdnīcu,# kurā ir viena atslēga – vaicājuma izpildīšanas rezultātā atlasīto ierakstu

masīvsreturn dict(tables = rows)

# Lappuse, kura tiks attēlota, kad pārlūkprogramma vērsīsies pie adreses# „http://localhost:8081/showtable” , kurai atbilst veidne

ama/templates/showtable.kid# Pie izsaukšanas saņem kā parametru tabulas id vērtību @expose(template = "ama.templates.showtable", allow_json = True)def showtable(self, id):

# PostgreSQL datu bāzei „test” izmantosim kursoruc = cherrypy.thread_data.db3.cursor()# Izpildām vaicājumu globālai shēmai, kura rezultātā tiek iegūts norādītās# tabulas dburi, īsts vārds lokālajā DB un tabulas vārds globālajā DBquery = """

SELECT dburi, tablename, aliasFROM global_schemaWHERE id = %d

""" % int(id)c.execute(query)# No kursora tiek saņemtas atlasīta ieraksta lauku vērtības# ar tabulas dburi, vārdu un globālo nosaukumuconnparams = c.fetchone()dburi = connparams[0]table = connparams[1]alias = connparams[2]# Atkārībā no mainīgā dburi vērtības, tiek izvēlēts,

21

Page 22: A.Malahova - multiDB

# kuras datu bāzes kursoru nepieciešams izveidotc = {"sqlite://localhost/darbinieki" : cherrypy.thread_data.db1.cursor(), "sqlite://127.0.0.1/darbinieki" : cherrypy.thread_data.db1.cursor(), "oracle://localhost/studydb" : cherrypy.thread_data.db2.cursor(), "psycopg2://localhost/test" : cherrypy.thread_data.db3.cursor(),}[dburi]# Vaicājums, kura izpildīšanas rezultātā tiek iegūti visi ieraksti no uzdotās

tabulasquery = """

SELECT *FROM %s

""" % tablequery = query.lstrip().rstrip()c.execute(query)# Ievietojām atlasītos ierakstus masīvārows = []while (1):

row = c.fetchone()if row == None:

breakrows.append(row)

# Ievietojām masīvā norādītās tabulas lauku nosaukumuscolumns = []for fieldDesc in c.description:

column = fieldDesc[0]if column == None:

breakcolumns.append(column)

c.close()# Funkcija showtable(self, id) nodod veidnei kā parametru vārdnīcu,# kurā ir 3 atslēgas: norādītās tabulas ierakstu masīvs, tabulas vārds globālajā

DB# un tabulas lauku nosaukumu masīvsreturn dict(rows = rows, tablename = alias, fieldnames = columns)

5.2. Lietotāja saskarnes izveidošana

Multidatubāzes sistēmas saskarne ar lietotāju tiks īstenota ar divām Web lappusēm: uz

pirmās lappuses globālajam lietotājam tiks piedāvāts izvēlēties tabulu no visu datu bāzu globāli

pieejamo tabulu saraksta, uzklikšķinot uz kuras nosaukuma notiks pāreja uz otru lappusi, kurā tiks

izvadīti visi izvelētās tabulas ieraksti. Pirmās lappuses saturs aprakstīts ar xml palīdzību veidnē

ama/templates/showtable.kid, bet otrās lappuses saturs – veidnē ama/templates/showdblist.kid.

Šo datņu saturs atrodams zemāk.

Datne ama/templates/showdblist.kid<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#" py:extends="'master.kid'"><head>

<meta content="text/html; charset=utf-8" http-equiv="Content-Type" py:replace="''"/>

22

Page 23: A.Malahova - multiDB

<title></title></head>

<body><h1>Multidatubāzu sistēma</h1><ul>

- - Izmantojam for ciklu, lai izvadītu masīvā tables atrodamus- - tabulu globālos nosaukumus nesakārtotā saraksta veidā.<li py:for="table in tables">

<a href="showtable?id=${table[1]}" py:content="table[0]"></a></li>

</ul></body>

</html>

Datne ama/templates/showtable.kid<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#" py:extends="'master.kid'"><head>

<meta content="text/html; charset=utf-8" http-equiv="Content-Type" py:replace="''"/><title></title>

</head><body>

[<a href="/dblist">BACK</a>]<p/><h2>Displaying table: ${tablename}</h2><table class="mytable"><tr class="header">

- - Ar for cikla palīdzību izvadam tabulas kolonu nosaukumus- - no masīva fieldnames<th class="mycell" py:for="field in fieldnames" py:content="field"/>

</tr>- - Tabulas pāra rindas izceļam ar pelēko krāsu<tr py:for="i,row in enumerate(rows)" class="${i%2 and 'odd' or 'even'}">

- - Ar cikla palīdzību aizpildām tabulas šūnas ar datiem no masīva<td class="mycell" py:for="cell in row" py:content="cell"/>

</tr></table>

</body></html>

Izveidoto tīmekļa lappušu izskatu var mainīt ar CSS palīdzību. Izskatītajā gadījumā datnē

ama/static/css/style.css tika pievienotas 4 jaunas klases, kuras apraksta tabulas, tabulas nosaukuma,

šūnu un pāra rindu izskatu.

Datne ama/static/css/style.css.mytable { font-size: 100%; border: 1px solid; border-collapse: collapse; }.header {

23

Page 24: A.Malahova - multiDB

background: #aaaaaa; }.mycell { border: 1px solid; padding: 10px; margin: 0; text-align: center; }.odd { background: #eeeeee; }

24

Page 25: A.Malahova - multiDB

6. Multidatubāzes sistēmas darbība

Lai pārbaudītu multidatubāzes sistēmas darbību, palaidīsim Web serveru izveidotajam

projektam (ievadot komandrindā „python C:\ama\start-ama.py”) un pārlūkprogrammas loga

adreses laukā ievadīsim „http://localhost:8081/dblist”. 15. attēlā paradīta tīmekļa lappuse, kura tiek

attēlota ievadot norādīto adresi. Šī lappuse satur globāli pieejamo tabulu sarakstu – nosaukumi,

piešķirtie tabulām globālajā shēmā, kuri tiek attēloti kā saites. Uzklikšķinot uz jebkuras no šīm

saitēm, lietotājam tiek parādīts izvēlētās tabulas dati.

15. att. Multidatubāzes tabulas, pieejamas globālajam lietotājam

16. attēlā parādīta datu izvade no SQLite datu bāzes „darbinieki” tabulas „setnieki”, kurai

globālajā shēmā piešķirts nosaukums „Darbinieki”.

25

Page 26: A.Malahova - multiDB

16. att. Datu izvades piemērs no SQLite datu bāzes tabulas

17. attēlā parādīta datu izvade no Oracle datu bāzes „studydb” skata „furniture”, kuram

globālajā shēmā piešķirts nosaukums „Mēbeles”.

26

Page 27: A.Malahova - multiDB

17. att. Datu izvades piemers no Oracle datu bāzes tabulas

18. attēlā parādīta datu izvade no PostgreSQL datu bāzes „test” tabulas „contacts”, kurai

globālajā shēmā piešķirts nosaukums „Kontakti”.

27

Page 28: A.Malahova - multiDB

18. att. Datu izvades piemērs no PostgreSQL datu bāzes tabulas

28

Page 29: A.Malahova - multiDB

Secinājumi

Darbā tika izskatīta multidatubāzes sistēmas izveidošana, izmantojot Active Python

programmēšanas valodu un TurboGears izstrādes vidi neviendabīgo datu bāzu sadarbspējas

nodrošināšanai. Multidatubāzu sistēmu darbības mehānisma pamatprincipu izskatīšanai tika

izmantota globālās shēmas integrācijas pieeja.

Globālās shēmas integrācijas pieejas pamatā ir datu dalīšanas nodrošināšana caur globālo

shēmu. Šai pieejai ir savas priekšrocības un trūkumi, bet jāatzīmē, ka tā ir vairāk piemērota nelielām

multidatubāzēm. Pieejas izmantošana uzliek zināmus ierobežojumus, jo palielinoties shēmu skaitam,

tiek pagrūtināta apstrāde.

Uzprojektēta multidatubāzes sistēma ietver 3 sastāvdaļas: 1) neviendabīgus datu avotus, 2)

lietojumu, ar kuru strādā globālais lietotājs, un 3) globālo shēmu, kur lietojums atrod informāciju par

tām tabulām, kuras ir pieejamas globālajām lietotājam (tabulas īstais vārds datubāzē un datu bāzes

unikālais identifikators (dburi), kas satur informāciju par to, kādā veidā lietojums var pieslēgties

norādītai datu bāzei).

Izveidotā multidatubāzes sistēma ietver 3 dažādas datu bāzes – SQLite, PostgreSQL un

Oracle, globālo shēmu, kurā noteikts, kādas datu bāzes, to tabulas un lauki ir pieejami globālajam

lietotājam, kurš pieslēdzās sistēmai ar Web-orientēta lietojuma palīdzību.

Pieslēgšanās neviendabīgām datu bāzēm un datu iegūšana tika realizēta Python valodā.

CherryPy, kas ir TurboGears sastāvdaļa, sniedz iespēju viegli strādāt ar pavedieniem un datu bāzu

pieslēgumiem, nepievēršot uzmanību tādiem zema līmeņa detāliem, kā protokolu, savienojumu

(socket) un procesu/pavedienu vadība. Datu bāzes saskarnes moduļa uzstādīšana dod iespēju Python

interpretatoram piekļūt datu bāzei un izpildīt vaicājumus.

29

Page 30: A.Malahova - multiDB

Avoti

1. Bouguettaya, M. Papazoglou and R. Kings. On Building Hyperdistributed Database. In

Information Systems, Great Britain, volume 20, No. 7, pp. 557-577 (1995).

2. Guido van Rossum. Python Tutorial. – http://docs.python.org/tut/tut.html

3. Python Database Interfaces. http://wiki.python.org/moin/DatabaseInterfaces

4. TurboGears: Front-to-Back Web Development. – http://www.turbogears.org/

5. TurboGears Documentation. The 20 Minutes Wiki. –

http://docs.turbogears.org/1.0/Wiki20/Page1

6. SQLite home page. http://www.sqlite.org/

7. SQLite Tutorial by Mike Chirico. –

http://souptonuts.sourceforge.net/readme_sqlite_tutorial.html

8. pysqlite usage guide. – http://initd.org/pub/software/pysqlite/doc/usage-guide.html

9. PostgreSQL 8.3devel Documentation. – http://developer.postgresql.org/pgdocs/postgres/

10. PostgreSQL 8.3devel Documentation. The pg_hba.conf file. –

http://developer.postgresql.org/pgdocs/postgres/auth-pg-hba-conf.html

11. Accessing PostgreSQL with Python and Psycopg2. –

http://www.devx.com/opensource/Article/29071/0

12. Wrapping Your Brain Around Oracle + Python. –

http://www.oracle.com/technology/pub/articles/devlin-python-oracle.html

30