Statistics
| Revision:

svn-gvsig-desktop / tags / v1_1_Build_1004 / libraries / libGDBMS / docs / gdbms.html @ 41849

History | View | Annotate | Download (9.85 KB)

1 1956 fjp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2
<HTML>
3
<HEAD>
4
        <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">
5
        <TITLE></TITLE>
6
        <META NAME="GENERATOR" CONTENT="OpenOffice.org 1.1.1  (Linux)">
7
        <META NAME="CREATED" CONTENT="20050304;9024500">
8
        <META NAME="CHANGED" CONTENT="20050323;16380400">
9
        <STYLE>
10
        <!--
11
                @page { size: 21.59cm 27.94cm }
12
        -->
13
        </STYLE>
14
</HEAD>
15
<BODY LANG="es-ES" DIR="LTR">
16
<P>GDBMS</P>
17
<OL>
18
        <LI><P STYLE="margin-bottom: 0cm">Introducci&oacute;n
19
        </P>
20
        <LI><P STYLE="margin-bottom: 0cm">Parseado
21
        </P>
22
        <LI><P STYLE="margin-bottom: 0cm">Extensibilidad
23
        </P>
24
</OL>
25
<OL START=3>
26
        <OL>
27
                <LI><P STYLE="margin-bottom: 0cm">Drivers</P>
28
                <LI><P STYLE="margin-bottom: 0cm">Funciones</P>
29
                <LI><P STYLE="margin-bottom: 0cm">Tipos
30
                </P>
31
        </OL>
32
</OL>
33
<OL START=4>
34
        <LI><P>Ejecuci&oacute;n de consultas
35
        </P>
36
</OL>
37
<P><BR><BR>
38
</P>
39
<P><B>1.- Introducci&oacute;n</B></P>
40
<P>GDBMS es una librer&iacute;a de acceso a datos extensible que
41
permite la ejecuci&oacute;n de un subconjunto del est&aacute;ndar SQL
42
sobre fuentes de datos heterog&eacute;neas. Esto quiere decir que se
43
puede realizar una instrucci&oacute;n SQL que involucre tablas que
44
residan en servidores de base de datos distintos, o incluso entre una
45
tabla de un servidor remoto y un fichero en local.</P>
46
<P><B>2.- Procesado de instrucciones</B></P>
47
<P>Para ejecutar las instrucciones primero hay que analizarlas
48
sint&aacute;cticamente. Esto se realiza con la librer&iacute;a <A HREF="https://javacc.dev.java.net/">javacc</A>
49
usando la gram&aacute;tica <A HREF="sql.html">sql.html</A>, lo cual
50
nos genera un &aacute;rbol sint&aacute;ctico asociado a la
51
instrucci&oacute;n y es en esta primera fase donde se detectan los
52
errores sint&aacute;cticos.
53
</P>
54
<P>Una vez obtenido el &aacute;rbol sint&aacute;ctico, se obtiene un
55
arbol de adaptadores de forma paralela en la que cada nodo de dicho
56
&aacute;rbol se basa en la informaci&oacute;n del nodo
57
correspondiente del &aacute;rbol sint&aacute;ctico para proporcionar
58
informaci&oacute;n de m&aacute;s alto nivel. Cada nodo del &aacute;rbol
59
de adaptadores tiene un nodo correspondiente en el arbol sint&aacute;ctico,
60
sin embargo, no sucede al rev&eacute;s. Un nodo del &aacute;rbol
61
sint&aacute;ctico no tiene por qu&eacute; tener una correspondencia
62
con un nodo del de adaptadores. Lo que quiere decir esto es que un
63
nodo adaptador puede representar un nodo sint&aacute;ctico o un
64
sub&aacute;rbol sint&aacute;ctico. Durante la ejecuci&oacute;n de las
65
instrucciones, se puede pedir informaci&oacute;n a dicho &aacute;rbol
66
tal como el valor de una expresi&oacute;n para una determinada fila.
67
En este caso, asociado a al nodo del &aacute;rbol sint&aacute;ctico
68
(nodo sint&aacute;ctico desde ahora) que representa la expresi&oacute;n
69
habr&aacute; un nodo adaptador que en base a los valores de los nodos
70
sint&aacute;cticos devolver&aacute; el valor de la expresi&oacute;n
71
para la fila que se est&aacute; evaluando.</P>
72
<P><B>3.- Extensibilidad</B></P>
73
<P>Hay varios puntos en los que se puede extender a gdbms</P>
74
<P STYLE="font-style: normal"><U>3.1.- Drivers</U></P>
75
<P>La fuente de datos sobre la que opera gdbms es un DataSource, que
76
es una clase que proporciona acceso a los datos que representa y
77
permite algunas operaciones adicionales como acceder a los campos por
78
nombre, etc. Adem&aacute;s existen DataSource que son producto de
79
operaciones, es decir, una join entre dos DataSource es otro
80
DataSource. Las DataSouce's usan a los drivers para acceder a los
81
datos.</P>
82
<P>Se pueden crear drivers para leer informaci&oacute;n de ficheros
83
de disco y para acceder a tablas de bases de datos. El acceso a estas
84
&uacute;ltimas se realiza mediante JDBC por lo que se puede acceder
85
actualmente a cualquier sistema de base de datos para el cual exista
86
un driver JDBC.</P>
87
<P>Para crear un DataSource en gdbms tenemos varias alternativas.
88
Todas ellas vienen definidas por la clase DataSourceFactory, que
89
proporciona varios m&eacute;todos para obtener los DataSource.
90
</P>
91
<P>Si la informaci&oacute;n se encuentra en un fichero o en una base
92
de datos podemos a&ntilde;adir la fuente de datos al sistema mediante
93
las llamadas addXXXDataSource y luego obtener los DataSource asociado
94
mediante la llamada createRandomDataSource(String sql). De &eacute;sta
95
&uacute;ltima llamada, podemos deducir que las fuentes de datos de
96
base de datos no tienen por qu&eacute; corresponderse con una tabla
97
completa y pueden ser una consulta sobre una tabla que recupere un
98
subconjunto de los campos y de los registros. Cabe destacar que en
99
estos m&eacute;todos estamos indicando datos que definen la fuente de
100
datos (ubicaci&oacute;n del fichero, nombres de las columnas, etc...)
101
por lo que si se cambia esta informaci&oacute;n seguramente no se
102
podr&aacute; obtener un DataSource asociado al origen de los datos.</P>
103
<P>Adem&aacute;s de los drivers de fichero y de base de datos,
104
existen unas interfaces que al ser implementadas permiten a la
105
factor&iacute;a crear DataSource. Esto es fundamental para integrar
106
gdbms en otros sistemas como por ejemplo gvSIG, en la que hay objetos
107
que han leido la informaci&oacute;n alfanum&eacute;rica y se quiere
108
obtener un DataSource que acceda a estos datos.</P>
109
<P>Si la informaci&oacute;n se encuentra en un objeto que ya contiene
110
la informaci&oacute;n por estar en un framework de otro sistema y
111
simplemente se quiere tener un DataSource con la informaci&oacute;n
112
de dicho objeto, se deber&aacute; usar la llamada
113
addDataSource(ReadDriver rd, String dataSourceName) y que dicho
114
objeto implemente la interfaz ReadDriver.</P>
115
<P><U>3.2.- Funciones</U></P>
116
<P><U>3.3.- Tipos</U></P>
117
<P><B>4.- Ejecuci&oacute;n de consultas</B></P>
118
<P STYLE="font-weight: medium">La ejecuci&oacute;n de una instrucci&oacute;n
119
SQL puede ser delegada en un servidor de base de datos, con el ahorro
120
temporal de la ejecuci&oacute;n, si los DataSource's implicados
121
cumple que son del mismo servidor y son accedidas con el mismo
122
usuario y password y est&aacute;n registrados de una determinada
123
manera. En caso de encontrarse una SQL que cumpla la condici&oacute;n
124
anterior se deber&aacute; de sustituir los nombres de los datasource
125
por los nombres de las tablas a las que acceden y al final de la
126
cl&aacute;usula where habr&iacute;a que a&ntilde;adir con AND las
127
condiciones where de los datasource. Una vez realizado eso se podr&iacute;a
128
delegar en el servidor dicha instrucci&oacute;n.</P>
129
<P STYLE="font-weight: medium">Las condiciones para delegar la
130
ejecuci&oacute;n en el servidor son:</P>
131
<UL>
132
        <LI><P STYLE="font-weight: medium">Que las tablas residan en el
133
        mismo servidor.</P>
134
        <LI><P STYLE="font-weight: medium">Que sean accedidas por el mismo
135
        usuario, porque de lo contrario el resultado podr&iacute;a tener
136
        datos que no fueran visibles completamente por ninguno de los
137
        usuarios de la base de datos</P>
138
        <LI><P><SPAN STYLE="font-weight: medium">Que est&eacute;n
139
        registradas mediante el m&eacute;todo addDBDataSource en el que se
140
        le especifica la tabla, la clausula where. Esto limita el conjunto
141
        de consultas SQL que se pueden delegar en el servidor ya que la
142
        complejidad se reduce significativamente. Hay que realizar un
143
        proceso de traducci&oacute;n de nombres de gdbms a los nombres
144
        propios del sistema donde se va a delegar la instrucci&oacute;n
145
        adem&aacute;s de a&ntilde;adir la cl&aacute;usula where de las
146
        tablas implicadas, etc, ...</SPAN></P>
147
</UL>
148
<P STYLE="font-weight: medium">Por otro lado cabe resaltar varios
149
inconvenientes que presenta el hecho de que se delegue en el servidor
150
la ejecuci&oacute;n. El primero es que las referencias a campos de la
151
tabla deben ser cualificadas, ya que de lo contrario se deber&iacute;a
152
de hacer peticiones adicionales al servidor con la finalidad de saber
153
a qu&eacute; tabla pertenece cada campo. El segundo es el coste
154
temporal de ejecutar una consulta sobre varias tablas sin que &eacute;sta
155
se delegue en el servidor. Por una parte hay que traerse del servidor
156
las tablas implicadas que no tiene por qu&eacute; estar en la m&aacute;quina
157
local (de hecho es l&oacute;gico que no sea as&iacute;) y por la
158
otra, una vez los datos han sido descargados se deber&aacute; de
159
realizar la operaci&oacute;n en Java que no destaca por la velocidad
160
de ejecuci&oacute;n. Es por esto que si se quiere realizar una
161
operaci&oacute;n con tablas que residan en el mismo servidor,
162
conviene a&ntilde;adir una nueva fuente de datos indicando la
163
consulta SQL que la define. De esta manera nos aseguramos de que la
164
ejecuci&oacute;n se realiza en el servidor.</P>
165
<P STYLE="font-weight: medium">En caso de que no se pueda delegar la
166
ejecuci&oacute;n en ning&uacute;n servidor el resultado se computa en
167
el n&uacute;cleo de gdbms mediante una serie de decoradores que se
168
ponen sobre los DataSouce's involucrados en la instrucci&oacute;n.
169
Estos decoradores implementan la interfaz DataSouce por lo que el
170
resultado de la operaci&oacute;n es tambi&eacute;n un DataSouce. Para
171
una ejecuci&oacute;n m&aacute;s eficiente se simplifica el arbol de
172
adaptadores. Durante la ejecuci&oacute;n de una instrucci&oacute;n,
173
se procesa el sub&aacute;rbol de expresiones m&uacute;ltiples veces
174
para evaluarla, es por esto que la simplificaci&oacute;n de este
175
&aacute;rbol aporta una aceleraci&oacute;n del procesado de las
176
instrucciones. Para simplificar el &aacute;rbol el proceso realizado
177
consiste en recorrer el sub&aacute;rbol de expresiones y para cada
178
expresi&oacute;n que s&oacute;lo tenga como hijo una subexpresi&oacute;n
179
y no realice ninguna operaci&oacute;n sobre el resultado de la
180
expresi&oacute;n anterior, se hace un bypass del padre a ese &uacute;nico
181
hijo, elimin&aacute;ndose el nodo en proceso. Los nodos susceptibles
182
de desaparecer son los siguientes:</P>
183
<UL>
184
        <LI><P STYLE="font-weight: medium">AndExpr</P>
185
        <LI><P STYLE="font-weight: medium">NotExpr</P>
186
        <LI><P STYLE="font-weight: medium">OrExpr</P>
187
        <LI><P STYLE="font-weight: medium">ProductExpr</P>
188
        <LI><P STYLE="font-weight: medium">SumExpr</P>
189
        <LI><P STYLE="font-weight: medium">Term</P>
190
</UL>
191
</BODY>
192
</HTML>