Base de Dados em Memória - Dei-Isep

Propaganda
Instituto Superior de Engenharia do Porto
Projecto de Licenciatura de
Engenharia Informática
Computadores e Sistemas
Base de Dados em Memória
Sistema de Indexação
Aluno: Luís Manuel Oliveira Marques
Orientador: Eng.º Alexandre Bragança
Setembro de 2002
IMDB – Sistema de Indexação
Índice
Índice
ÍNDICE..................................................................................................... 2
ÍNDICE DE FIGURAS.............................................................................. 6
ÍNDICE DE TABELAS ............................................................................. 8
AGRADECIMENTOS .............................................................................. 9
PREFÁCIO ............................................................................................ 10
OBJECTIVOS........................................................................................ 12
1. INTRODUÇÃO................................................................................... 14
1.1
Estrutura do relatório................................................................................................. 15
1.2
Soluções comerciais ..................................................................................................... 16
2.
CARACTERIZAR IMDB ................................................................. 18
2.1
IMDB – definições ....................................................................................................... 18
2.1.1
Onde usar..................................................................................................................... 18
2.2
Casos de utilização ...................................................................................................... 19
2.2.1 DataSet - ADO.NET ...................................................................................................... 19
2.2.2 DataSet - Java ................................................................................................................ 22
2.2.3 SQL – IMDB ................................................................................................................. 23
2.2.4 XML – IMDB ................................................................................................................ 25
2.2.5 Motor de indexação MySQL ......................................................................................... 27
2.3
Necessidade de Indexação........................................................................................... 28
2.3.1 Analogia IMBD com XML............................................................................................ 28
ISEP – DEI
2
IMDB – Sistema de Indexação
Índice
2.4
Problemas e pontos a reter ......................................................................................... 29
3.
BTREES ++ .................................................................................... 30
3.1
Introdução – outros sistemas...................................................................................... 30
3.1.1 Árvores ADT ................................................................................................................. 30
3.1.2 Árvores AVL ................................................................................................................. 31
3.1.3 Árvores Red-Black ........................................................................................................ 32
3.2 Caracterização ..................................................................................................................... 33
3.3 Estrutura de uma BTree ..................................................................................................... 33
3.3.1 Altura das b-Trees.......................................................................................................... 34
3.4 Operações em BTrees.......................................................................................................... 35
3.4.1 B-Tree-Search(x, k) ....................................................................................................... 36
3.4.2 B-Tree-Create(T) ........................................................................................................... 36
3.4.3 B-Tree-Split-Child(x, i, y) ............................................................................................. 37
3.4.4 B-Tree-Insert.................................................................................................................. 37
3.4.5 B-Tree-Delete ................................................................................................................ 39
3.5 Exemplos de aplicações de BTrees ..................................................................................... 39
3.5 Aplicações............................................................................................................................. 42
3.5 Problemas e vantagens ........................................................................................................ 42
4.
SGBDOC ........................................................................................ 45
4.1
Considerações Genéricas ............................................................................................ 45
4.1.1 Definição de Documento no SGBdoc............................................................................ 46
4.1.1.1 Analogia com XML ............................................................................................... 48
4.1.2 Definição de colecção.................................................................................................... 48
4.1.3 Funcionamento interno – parâmetros e funções............................................................. 50
4.1.4 Indexação sobre uma colecção....................................................................................... 51
4.1.4.1 Porquê a indexação no SGBdoc? ........................................................................... 53
4.2
Exemplo de utilização ................................................................................................. 54
4.3
Exemplos de uso reais – I2S ....................................................................................... 55
4.3.1 CODOMO...................................................................................................................... 55
4.3.1.1 Arquitectura ........................................................................................................... 56
4.3.1.2 Características Gerais das Aplicações baseadas em CODOMO ............................ 58
ISEP – DEI
3
IMDB – Sistema de Indexação
Índice
4.3.1.2.1 Desempenho ................................................................................................... 58
4.3.1.2.2 Interoperabilidade........................................................................................... 59
4.3.1.2.3 Escalabilidade................................................................................................. 59
4.3.1.2.4 Programabilidade ........................................................................................... 60
4.3.2 EURO – BigBang .......................................................................................................... 60
5.
BTREES NO SGBDOC .................................................................. 63
5.1 Procedimento anterior à inserção de BTrees .................................................................... 63
5.1.1 Exemplo de navegação sem BTrees............................................................................... 64
5.2 Inserção de funções da árvore no SGBdoc ........................................................................ 66
5.2.1 Descrição das funções elaboradas.................................................................................. 71
5.2.1.1 Abertura de indexação - lps_f_Idx_Open .............................................................. 71
5.2.1.2 Guardar dados - lps_f_Idx_Save ............................................................................ 71
5.2.1.3 Fecho da indexação - lps_f_Idx_Close .................................................................. 72
5.2.1.4 Inserção de uma nova chave - lps_f_Idx_Insert ..................................................... 72
5.2.1.5 Eliminação de uma chave - lps_f_Idx_Delete........................................................ 72
5.2.1.6 Pesquisa de uma chave - lps_f_Idx_Find ............................................................... 72
5.2.1.7 Posicionar no início - lps_f_Idx_First .................................................................... 72
5.2.1.8 Posicionar no fim - lps_f_Idx_Last ........................................................................ 73
5.2.1.9 Posicionar próximo - lps_f_Idx_Next .................................................................... 73
5.2.1.1 Posicionar anterior - lps_f_Idx_Prev...................................................................... 73
5.2.2 Problemas encontrados no desenvolvimento ................................................................. 73
5.2.3 Funções de posicionamento ........................................................................................... 74
5.2.4 Guardar árvore e reabri-la.............................................................................................. 74
5.3 Resultado final ..................................................................................................................... 75
5.3.1 Exemplo de navegação com BTrees .............................................................................. 76
5.3.2 Comparação de resultados ............................................................................................. 78
5.4 Inovações futuras................................................................................................................. 78
6.
CONCLUSÕES .............................................................................. 80
GLOSSÁRIO E LINGUAGEM ESPECÍFICA......................................... 82
REFERÊNCIAS ..................................................................................... 86
BIBLIOGRAFIA ..................................................................................... 87
ISEP – DEI
4
IMDB – Sistema de Indexação
Índice
ÍNDICE REMISSIVO.............................................................................. 88
ANEXOS................................................................................................ 91
A.1 I2S, S.A. – Informática Sistemas e Serviços ..................................................................... 91
A.2 XML..................................................................................................................................... 92
A.3 ADO ..................................................................................................................................... 94
A.4 .NET..................................................................................................................................... 97
ISEP – DEI
5
IMDB – Sistema de Indexação
Índice de Figuras
Índice de Figuras
Figura 1 – Modelo do DataSet ........................................................................................ 20
Figura 2 – Os suportes do DataSet e interligação com o DapaApdater SQLDataAdapter .................................................................................................... 21
Figura 3 – Encaixar documento XML numa tabela de memória.................................... 26
Figura 4 – Exemplo de SQL em XML-IMDB................................................................ 26
Figura 5 – SQL (UPDATE e DELETE) em XML - IMDB............................................ 26
Figura 6 – Exemplo de uma árvore ADT ....................................................................... 31
Figura 7 – Exemplo de árvores AVL e não AVL ........................................................... 31
Figura 8 – Exemplo de uma árvore red-black ................................................................ 32
Figura 9 – Cálculo da altura de uma BTree .................................................................... 34
Figura 10 – Algoritmo de pesquisa numa BTree ............................................................ 36
Figura 11 – Algoritmo de criação de uma b-tree vazia................................................... 36
Figura 12 – Algoritmo de divisão do filho numa BTree................................................. 37
Figura 13 – Algoritmo de inserção com um nó cheio..................................................... 38
Figura 14 – Algoritmo de inserção numa árvore com um nó vazio................................ 38
Figura 15 – Exemplo de uma b-tree................................................................................ 39
Figura 16 – Sequência de pesquisa numa b-tree............................................................. 40
Figura 17 – Sequência de inserção de um valor numa b-tree com split (divisão) .......... 42
Figura 18 – Documentos no CODOMO ......................................................................... 47
Figura 19 – Exemplo do código necessário para a criação de um documento no SGBdoc
................................................................................................................................ 50
Figura 20 – Laboratório do CODOMO .......................................................................... 56
Figura 21 – Arquitectura CODOMO .............................................................................. 57
Figura 22 – Ilustração do problema encontrado na migração dos dados EURO – Big
Bang I2S ................................................................................................................. 62
Figura 23 – Carregamento dos dados para uma colecção............................................... 64
Figura 24 – Lista de dados obtidos a partir do AS/400 .................................................. 65
Figura 25 – Obter um registo não usando indexação...................................................... 66
Figura 26 – Exemplo de incrementação de uma função no SGBdoc ............................. 69
ISEP – DEI
6
IMDB – Sistema de Indexação
Índice de Figuras
Figura 27 – Exemplo do código lps_f_Idx_Open ........................................................... 71
Figura 28 – Ilustração de como guardar um árvore (idx_save) e reabrir a árvore
guardada.................................................................................................................. 75
Figura 29 – Carregar dados na b-tree.............................................................................. 76
Figura 30 – Pesquisa de um valor na árvore balanceada ................................................ 77
Figura 31 – Posicionar na colecção usando indexação................................................... 78
Figura 32 – Hierarquia de indexação .............................................................................. 79
Figura 33 – Exemplo de documento XML ..................................................................... 92
Figura 34 – Permuta de dados entre dois sistemas distintos com XML ......................... 94
Figura 35 – Objectos e colecções ADO.......................................................................... 97
ISEP – DEI
7
IMDB – Sistema de Indexação
Índice de Tabelas
Índice de Tabelas
Tabela 1 – Configuração de relações entre tabelas num DataSet usando XML............. 21
Tabela 2 – Capacidades do SQL – IMDB ...................................................................... 25
Tabela 3 – Analogia entre o que suporta SGBdoc e o que suporta a tecnologia XML .. 48
Tabela 4 – Tabela de operações de indexação ................................................................ 51
Tabela 5 – Tabelas de exemplificação de movimentação de operações......................... 52
Tabela 6 – Funções de posicionamento necessárias para uma indexação ...................... 52
Tabela 7 – Mapeamento das funções de BTree ++ para o SGBdoc............................... 68
Tabela 8 – Associar um retorno a uma função do SGBdoc............................................ 68
Tabela 9 – Descrição dos parâmetros de uma função a inserir numa dada tabela do
SGBdoc de modo a definir o comportamento da função........................................ 70
Tabela 10 – Funções de posicionamento no SGBdoc..................................................... 74
Tabela 11 – Descriçãos dos objectos e colecções ADO ................................................. 96
ISEP – DEI
8
IMDB – Sistema de Indexação
Agradecimentos
Agradecimentos
Neste último ano de curso tenho que começar por agradecer ao ISEP, por todos
os momentos lá passados e por tudo aquilo que me foi ensinado, neste contexto, como é
óbvio, está inserido o DEI e todos os seus professores.
Também gostaria de agradecer a pessoas que trabalham comigo na I2S como o
Sérgio Ribeiro, Sérgio Nogueira, Filipe Miranda, António Correia, Rui Duarte, Nuno
Ferreira, Paulo Vilela, entre outros...
De seguida tenho de começar por agradecer a todos os meus colegas de curso,
mas terei obrigatoriamente de agradecer de um modo mais explícito a alguns... Deste
modo os meus agradecimento vão para o Sérgio Lopes, Américo Silva, Sérgio Matos,
Ricardo Teixeira, António Amaral, Vítor Moreira, Anabela Vieira, Celina Pereira, entre
outros...
Apesar de já todos os professores terem sido evidenciados, não posso deixar de
salientar aquele que mais me apoiou e ajudou como ninguém para a conclusão deste
projecto, até por acaso é meu orientador... Obrigado, Eng.º Alexandre Bragança...
Tenho também de agradecer à minha família, pais e irmãos por todo o apoio...
E por último ao meu anjo... a minha mais que tudo Sandra, por ter estado sempre
por aqui...
ISEP – DEI
9
IMDB – Sistema de Indexação
Prefácio
Prefácio
O projecto apresentado neste relatório diz respeito ao curso de licenciatura em
Engenharia Informática – ramo de Computadores e sistemas – do Instituto Superior de
Engenharia do Porto (ISEP).
A escolha deste projecto começou em Março, após ideia do Engenheiro
Alexandre Bragança, já que esta era uma tecnologia a inserir numa aplicação existente
na empresa I2S S.A. – Informática Sistemas e Serviços (tecnologia abordada neste
relatório – SGBdoc).
O projecto sobre o qual me debrucei tenta abordar alguns dos temas mais
importantes dos nossos dias:
o Manipulação em memória de elevadas quantidades de dados
o Indexação de dados.
É, portanto, importante desde já referir que este estudo é bastante interessante.
Além do relatório, é também importante abordar todo o curso onde são
adquiridos outros valores, além dos já conhecidos académicos, pedagógicos e técnicos
de cada área. Posso evidenciar que os valores incutidos ao longo de um curso são a
experiência que mais tarde nos ajuda, no decorrer de uma vida ao nível profissional e
pessoal. No ISEP encontrei amigos, e ideais, mas também descobri a verdadeira
essência que devemos personificar nos objectivos que temos pela nossa vida fora.
Contudo, e apesar de já estar activo profissionalmente, sinto que uma nova fase
se aproxima e para a qual novos obstáculos irão ser encontrados, mas também sinto que
todos os momentos passados no ISEP, e todos os amigos que lá conheci, estarão sempre
comigo para me ajudar a ultrapassar esses difíceis obstáculos para os quais todo o apoio
é pouco.
ISEP – DEI
10
IMDB – Sistema de Indexação
Prefácio
A conclusão deste relatório e deste curso constituem um objectivo alcançado, no
entanto existem dois sentimentos que se contrapõem… um, é lógico, a conclusão do
curso... o outro será o deixar para trás todos os bons momentos passados na bela casa de
ensino que é o ISEP.
ISEP – DEI
11
IMDB – Sistema de Indexação
Objectivos
Objectivos
Para o desenvolvimento de um projecto, trabalho ou serviço, é sempre
necessário definir certos limites (objectivos), de modo a tornar a produção o mais
concisa possível, baseado nesta ideia foram também idealizadas certas fronteiras na
elaboração deste projecto.
O projecto efectuado tem como base inicial o estudo de bases de dados
indexadas em memória, e um estudo aprofundado de forma (s) de implementar este tipo
de tecnologia.
A principal vertente deste projecto é demonstrar como poderemos ter o referido
objectivo, manuseando um determinado conjunto de dados (n bytes ou uma base de
dados) em memória sem tornar o sistema insustentável (Bases de Dados em Memória).
Análises efectuadas permitem chegar à conclusão, que um modo eficaz de efectuar esta
gestão será através de árvores balanceadas, mais concretamente BTrees++. O objectivo
deste projecto é o de demonstrar a viabilidade do descrito, assim como, abordar um
exemplo concreto do uso desta tecnologia.
Um dos grandes problemas de tecnologias como o XML (para melhor
compreender o XML ver Anexo A.2) é o manuseamento de dados em memória que por
vezes é bastante complexo de suportar, provocando com que a referida tecnologia possa
ser bastante lenta. Tal como o XML, também outras tecnologias sofrem deste problema,
mas principalmente aplicações que trabalhem com Internet (caso do XML), em que a
velocidade de processamento é deveras importante e, todos os pedaços de tempo têm
que ser devidamente aproveitados. Ainda mais impraticável é a indexação de bases de
dados em memória.
O SGBdoc (ver capítulo 4) é um sistema gestor de base de documentos,
permitindo a representação e gestão de documentos, esta é uma tecnologia muito em uso
na empresa I2S (ver Anexo A.1).
ISEP – DEI
12
IMDB – Sistema de Indexação
Objectivos
Tal como o XML também o SGBdoc pode sofrer da referida dificuldade (gestão
de bases de dados em memória e sua indexação), devido a elevadas quantidades de
informação existentes em memória e, ao seu manuseamento. Para exemplificar bases de
dados indexadas em memória foi usado então, o SGBDoc.
Além dos conceitos referidos, também outros serão abordados neste relatório,
mais explicitamente tecnologias relacionadas com a gestão de base de dados em
memória (indexação) e, tecnologias relacionadas com SGBdoc.
Em forma de conclusão, os objectivos deste projecto são um estudo profundo do
uso de bases de dados indexadas em memória (alguns exemplos existentes), usando
árvores balanceadas no SGBDoc (CODOMO), e tirando deste estudo ideias sobre como
melhor aplicar estes conceitos no futuro.
ISEP – DEI
13
IMDB – Sistema de Indexação
Introdução
1. Introdução
O problema que se nos coloca é de como tratar um grande volume de dados em
memória de forma eficaz. Este problema coloca-se hoje em dia com particular
significado, pois o processamento das eAplicações consiste em grande parte no
processamento de documentos (por exemplo em formato XML) com grande volume de
dados e, estruturas relativamente complexas. Muitas vezes esse processamento também
é complexo, pelo que é essencial que seja efectuado de forma rápida. Este problema tem
sido alvo de estudo recente nomeadamente no contexto do XML. A I2S encara também
este problema numa outra vertente que é a do seu Sistema Gestor de Base de
Documentos, SGBDoc.
O projecto que vou apresentar de seguida é relacionado com a indexação de
bases de dados em memória. Hoje em dia existem bases de dados com grandes
quantidades de informação, o que traz graves problemas, nomeadamente o seu
carregamento de um disco rígido (hoje em dia trinta mil milhões de bytes para um disco
é perfeitamente normal) para memória (uma memória para um bom PC será de duzentos
e cinquenta e seis mil bytes), para isto bastava imaginar que existisse uma base de dados
com quinhentos milhões de bytes! Primeiramente este projecto tenta ultrapassar este
obstáculo, no entanto poderemos considerar outra dificuldade a ultrapassar, que será a
de podermos ordenar/indexar uma coluna! Como é lógico, seria impraticável indexar
tamanha quantidade de informação, que não fosse de um modo que nos permitisse
indexar em tempo útil um sistema deste tipo. A solução poderá ser o uso de árvores
balanceadas – “BTrees ++”.
IMDB é uma sigla que tem como significado base de dados em memória (IMDB
– “In Memory Database”). IMDB é, então, a representação fiel de uma base de dados
existente, por exemplo num disco rígido, em memória, podendo eventualmente efectuar
a sua gestão (transações, ou manipulação da pretensa informação existente nas tabelas).
O Sistema de Indexação que é parte integrante do projecto vem tornar as IMDB mais
eficiente.
ISEP – DEI
14
IMDB – Sistema de Indexação
Introdução
No projecto irá ser apresentado um exemplo prático do uso de IMDB com
“BTrees ++” num projecto existente na I2S – SGBdoc, será exemplificado como foi
feito o mapeamento de funções de modo a obter um sistema de indexação no referido
projecto – SGBdoc.
Neste âmbito tentarei ao longo deste relatório enquadrar Bases de Dados em
Memória e, a sua necessidade de indexação, assim como os diversos usos que, cada vez
mais, são importantes nos dias que correm.
1.1 Estrutura do relatório
Para a elaboração deste relatório tentei formular uma compreensão progressiva
de toda a informação, começando por definir determinados conceitos teóricos até à parte
prática que elaborada.
O relatório é constituído por cinco capítulos principais, a saber:
o Introdução – efectuação de uma introdução ao tema.
o IMDB (bases de dados em memória) – exemplificação teórica do que se
entende por IMDB e alguns exemplos de uso.
o BTrees++ – Definições relacionadas com árvores balanceadas (sistema
usado na parte prática elaborada neste projecto)
o SGBdoc – Abordagem a esta aplicação da I2S, sistema também usado na
parte prática do projecto
o BTrees no SGBdoc – Parte prática elaborada para o projecto um sistema
de indexação.
Os estrangeirismos e alguns termos técnicos são representados em itálico, e
algumas das suas definições encontram-se no Glossário e linguagem específica.
As referências encontram-se marcadas com um número entre parênteses rectos,
por exemplo [1].
ISEP – DEI
15
IMDB – Sistema de Indexação
Introdução
O capítulo em falta será o 6 – Conclusões (conclusões do projecto).
1.2 Soluções comerciais
Como já foi dito anteriormente as empresas têm bases de dados em crescimento
exponencial e, como tal, é essencial uma boa forma de as manusear.
Nem todas as bases de dados contêm milhões de registros a necessitarem de
muitos gigabytes de armazenamento, contudo existem algumas que ocupam esse espaço
gigantesco.
Por
exemplo,
a
TELSTRA,
uma
companhia
australiana
de
telecomunicações, mantém uma base de dados de facturamento ao cliente com mais de
51 biliões de linhas com 4,2 terabytes de dados. Para que a base de dados seja útil e
utilizável, ela deve suportar as operações desejadas, tais como a recuperação e o
armazenamento, de uma forma eficiente e rápida [1].
Existe também uma base de dados de nome Polyhedra que é um servidor de
base dados relacional com respostas em tempo real, esta foi desenhada para aplicações
especiais. Aplicações que precisem de respostas em tempo real para determinadas
variações de informação, com sistemas complexos e com tolerância a falhas
(transacções e sempre disponível). A base de dados Polyhedra tem como requisito um
bom desempenho temporal (rapidez), podendo variar desde uma comunicação sem fios,
a uma gestão normal de network, ou até mesmo funcionar com a Internet. Como o
objectivo é funcionar em tempo real, pretende-se que se faça a menor computação
possível e, que responda em tempos aceitáveis. Funciona também em diversas
plataformas (Unix, Windows). Para que sejam possíveis todas estas capacidades
(principalmente respostas em tempo real) é essencial o facto da base de dados residir
sempre em memória, sem esta característica seria incomportável (tempo de computação
muito superior) [2].
Existem também outras bases de dados com este tamanho, basta pensar numa
base de dados com toda a informação militar de um país, ou a informação dos
contribuintes portugueses (e aceder a estes dados pela Internet!). O XML, a tecnologia
ISEP – DEI
16
IMDB – Sistema de Indexação
Introdução
mais usada na Internet para estes casos, apresenta bastantes dificuldades de performance
para lidar com esta quantidade de informação.
Pode-se considerar urgente a investigação de novos métodos para conseguir
manipular elevadas quantidades de informação, de modo a determinados sistemas não
se tornarem incomportáveis.
ISEP – DEI
17
IMDB – Sistema de Indexação
2.
Caracterizar IMDB
Caracterizar IMDB
2.1 IMDB – definições
IMDB é uma sigla que representa “In Memory Database” (Bases de Dados em
Memória), uma sigla cada vez mais usada nos dias que correm, extremamente
importante pelo crescimento exponencial do tamanho das bases de dados e, da
capacidade dos suportes magnéticos mais vulgares (discos rígidos, CDs, entre outros).
No entanto a referida sigla aparece não só com intuito de manipular bases de dados com
elevada quantidade de informação em memória “RAM”, mas, também com o propósito
de se encontrar um solução viável no sentido de manipular essa mesma base de dados
em memória.
IMBD teve já associado ao conhecido Dataset da Microsoft, sobre o qual
falaremos mais à frente, pois, primeiramente o nome de Dataset seria IMDB, mas por
questões comerciais (já que não estava a ter o impacto esperado) esse mesmo nome teve
que ser alterado para o referido Dataset.
2.1.1 Onde usar
O uso de IMDB é necessário quando é imprescindível a manipulação de
quantidades elevadas de informação em memória.
Poderemos usar IMDB quando desejamos ter tempos de acesso a dados
bastantes rápidos e, representar estruturas complexas de dados em memória, manipular
os dados de uma forma bastante eficiente, um exemplo prático onde cada vez mais
poderá ser essencial o uso de IMBD será em tecnologias relacionadas com a Internet.
ISEP – DEI
18
IMDB – Sistema de Indexação
Caracterizar IMDB
Contudo, o seu uso estará sempre dependente da quantidade de informação que
estamos a tratar e, como é lógico, das capacidades de hardware (mais explicitamente
memória) que dispomos.
2.2 Casos de utilização
Neste capítulo tentaremos ilustrar alguns exemplos importantes na informática
dos nossos dias, como o DataSet – ADO.NET –, o DataSet do Java, o SQL-IMDB, o
XML-IMDB e o motor de indexação do mysql. Como abordagem inicial ao DataSet
poderemos desde já expor que o seu uso apenas está ao nível de utilizadores, analistas
ou programadores experimentados, quer isto dizer que o DataSet exige o conhecimento
prévio de outras tecnologias, a saber:
o ActiveX (ver Glossário)
o Data Objects (ADO) (ver Anexo – A.3)
o OLE DB (ver Glossário)
o SQL Server (ver Glossário)
o Plataforma .NET (ver Anexo – A.4)
2.2.1 DataSet - ADO.NET
A última “revolução” da Microsoft foi a introdução de Record Set dinâmicos
com IMDB.
ADO.NET é o modelo de acesso a dados para aplicações .NET. O DataSet no
ADO.NET pretende fazer uma representação da informação de bases de dados em
memória, contendo múltiplas tabelas relacionadas de uma forma hierárquica. Por este
facto, devemos tentar compreender como devemos navegar desde o registo pai até aos
registos filhos é uma tarefa fundamental para esta tecnologia que não é compreensível
de uma forma intuitiva – especialmente nas ocasiões em que estamos a tentar aceder a
tabelas que estão no fundo da relação hierárquica.
ISEP – DEI
19
IMDB – Sistema de Indexação
Caracterizar IMDB
O ADO.NET pode-se usar para aceder a bases de dados relacionais, tais como o
SQL Server 2000 e outros Data Sources (ver Glossário) nos quais exista um serviço
OLE DB. ADO.NET é a última evolução da tecnologia ADO, contudo, ADO.NET (ver
Anexo – A.4 e A.3) introduz grandes mudanças e inovações específicas como a herança,
importantes para aplicações de natureza WEB.
Uma das principais mudanças que o ADO.NET introduz é a substituição do
Recordset ADO pela combinação dos objectos DataTable, DataSet, DataAdapter e o
DataReader. A DataTable representa um conjunto de linhas de uma só tabela e, neste
aspecto torna-se similar ao RecordSet.
Figura 1 – Modelo do DataSet
Um DataSet representa uma colecção de objectos DataTable, estes com as
relações e constrangimentos é que se interligam as várias tabelas. De facto, um DataSet
estruturado em memória relacionado é construído com suporte para o conhecido XML
(Extensible Markup Language – ver Anexo A.2).
De seguida, demonstra-se como usar um DataSet com várias tabelas
relacionadas, navegando de uma tabela para outra usando uma terceira tabela – Tabela
intermediária (relações de N para N). Elucidando com um exemplo prático a
configuração de uma tabela em relação a outra (XML).
ISEP – DEI
20
IMDB – Sistema de Indexação
Caracterizar IMDB
Quando geramos um DataSet não são criadas as relações entre tabelas
automaticamente. As relações poderão ser criadas por programação ou visualmente
(usando o XML Designer) como verificamos na tabela seguinte, em que a tabela
“Trabalhador_Programador” tem como tabela pai “Trabalhador” e tabela filha
“Programador”.
Elemento
Configuração
Nome da tabela
Trabalhador_Programador
Nome da tabela Pai
Trabalhador
Nome da tabela Filho
Programador
Campos chaves
TrabalhadorID
Campos chaves estrangeiras
TrabalhadorID
Tabela 1 – Configuração de relações entre tabelas num DataSet usando XML.
Uma das principais características do DataSet é que é uma entidade usada para
representar colecções de dados, a sua flexibilidade em fazer binding (mapeamento) dos
dados e de poder ser passada de componente para componente através de diferentes
aplicações. Pode também ser formulada através de dados XML, fazendo do DataSet
ideal para transferir dados entre diferentes plataformas. ADO.NET usa o objecto
DataAdapter para comunicar com o DataSet e vice-versa. O objecto DataAdapter
também permite actualizações transparentes (em batch – invisíveis para o utilizador),
permitindo compatibilidade com o que já existia no RecordSet (ver Glossário).
Figura 2 – Os suportes do DataSet e interligação com o DapaApdater - SQLDataAdapter
ISEP – DEI
21
IMDB – Sistema de Indexação
Caracterizar IMDB
Na figura anterior é usado um DataAdapter – SQLDataAdapter – para
comunicar com o DataSet, e o DataSet, por sua vez, usa o SQLDataAdapter para
comunicar com a base de dados [3].1
2.2.2 DataSet - Java
O DataSet em Java providencia acesso directo a uma base de dados.
O modelo DataSet assenta nos seguintes pontos:
o Uma implementação de um serviço DataSet (Interface DataSet.Provider)
que lê informação a partir de um data source (neste caso o JDBC - ver
Glossário - ou um servidor EJB – Enterprise Java Beans - ver Glossário)
de uma base de dados, como é óbvio. A informação obtida é colado em
cache, para isto necessitamos de uma implementação de um DataSet que
guarda esses mesmos dados (Interface DataSet.Store). Para colocar os
dados em memória é usado o DataSet.Store.
o Manipulação dos dados fornecidos. O DataSet fornece diversas
funcionalidades com os dados e as tabelas obtidas como a edição,
navegação, ordenação, filtragem, agregação, constrangimentos, gestão,
relações de N para 1 e de 1 para N.
o Permite guardar ou editar a informação em cache, através de um ou mais
DataSet, no data source (para guardar informação é usado um Interface
DataSet.Resolver). O DataSet trata de identificar todas as operações de
inserção, actualização e eliminação feitas em cache, permitindo assim
guardar os dados no data source de um modo optimista, guardando
apenas as alterações.
A principal funcionalidade do DataSet em Java é que não está “preocupado”
com a origem dos dados (DataSet.Provider), a informação sobre a qual está a fazer
cache (DataSet.Store), ou aquilo que vai guardar e onde depois das alterações em cache
1
Ver algumas definições importantes sobre no Glossário, para uma melhor compreensão.
ISEP – DEI
22
IMDB – Sistema de Indexação
Caracterizar IMDB
(DataSet.Resolver). Esta separação de responsabilidades permite-nos misturar e
encaixar as implementações destes três interfaces, independentemente de plataformas e
bases de dados em que estamos a trabalhar
A vantagem que o DataSet nos apresenta é a sua grande capacidade, já que
consegue guardar quase 2 biliões de linhas por tabela. No entanto, também tem em
conta
a
persistência,
porque
permite
a
efectuação
de
transacções
e
a
recuperação/tolerância a falhas.
A API DataSet providencia acessos bastantes interessantes para navegação,
edição, filtragem e principalmente a indexação/ordenação [4].
2.2.3 SQL – IMDB
SQL – IMDB é um componente de base dados em memória (em ActiveX, DLL
ou LIB – ver Glossário), para SQL e manuseamento de XML, desenhado pela empresa
QuiLogic.
É bastante rápido e, até nem pesa muito em memória, isto para um componente
IMDB com transacção, é UNICODE (ver Glossário) e com suporte de multi-processos
(multi-thread- ver Glossário). SQL-IMDB providencia “variáveis globais” na forma de
tabelas SQL, sempre acessíveis da própria aplicação ou de outras aplicações em
diferentes endereços de processamento. Com o SQL – IMDB é possível gerir os dados
de uma aplicação de uma maneira declarativa em vez do modo normal (de uma forma
procedimental), todo gerido na memória principal. Suporta Enterprise Application
Integration (EAI) através de memória partilhada, troca de dados entre diferentes
linguagens e diferentes ambientes (C++, VBA, ASP, Office...).
Esta tecnologia vem substituir outras estruturas mais tradicionais como vectores,
listas, tabelas de hash (ver Glossário)... através do suporte da base de dados em
memória.
ISEP – DEI
23
IMDB – Sistema de Indexação
Caracterizar IMDB
Como já referido o SQL-IMDB está disponível em ActiveX, DLL ou um
componente LIB, tudo isto em UNICODE. É bastante útil no desenvolvimento de ASP
(Active Server Page – ver Glossário). A troca de dados entre aplicações em diferentes
espaços de processamento é tão simples como executar um comando de SQL (INSERT
ou SELECT).
Independentemente de usar C++ ou um script em VBA, usando SQL-IMDB os
problemas de troca de informação entre aplicações estão resolvidos. Esta tecnologia
quase que nos fornece respostas em tempo real, ideal para aplicações e-business, isto
porque é baseado numa estrutura in-memory database, usando memória partilhada
(shared memory) com tempos de resposta muito aceitáveis. Tem também um bom
sistema de cache, que nos permite gerir ou gravar informação em memória de uma
forma muito simplista.
Para a indexação o SQL-IMDB usa o algoritmo TST-tree. Este algoritmo, foi
publicado por Bentley e Sedgewick (1998), combina a rapidez de acesso tabela de hash
com a ordem de acesso que as árvores binárias nos oferecem. Contudo, o algoritmo
inicialmente tinha requisitos de espaço muito superiores a uma árvore normal, mas a
empresa QuiLogic inventou um modo especial para comprimir os requisitos de espaço,
ficando quase comparável a uma árvore binária normal [5].
Característica
Tamanho
Capacidade máxima de armazenamento
~ 2GB
Número máximo de tabelas
65535
Número máximo de indexações numa
32
tabela
Número máximo de colunas numa
1
indexação
Tamanho máximo do nome da tabela
48
Tamanho máximo dos nomes das colunas
32
Número máximo de colunas numa tabela
32
Número máximo de linhas numa tabela
64
Tamanho máximo para um tamanho fixo
4096
ISEP – DEI
24
IMDB – Sistema de Indexação
Caracterizar IMDB
de uma coluna
Tamanho máximo para colunas binárias
32
Número máximo de aberturas simultâneas
256
de cursores
Tabela 2 – Capacidades do SQL – IMDB
2.2.4 XML – IMDB
XML-IMDB é uma base de dados representada em XML e é também parte da
empresa QuiLogic. Foi desenhada no intuito de unificar informação estruturada e não
estruturada de bases de dados relacional, documentos XML, e ficheiros normais. Com o
XML-IMDB, pode-se facilmente aceder a dados relacionais como se de informação
XML se tratasse; fazer vistas e diversas pesquisas sobre a informação; aceder aos dados
em tempo real e pesquisar dados ao longo de um documento XML; como o XMLIMDB é baseado na nova versão XML, o Xquery, pode-se também usar comandos de
SQL.
Esta tecnologia suporta o processamento de documentos XML assim como a
gestão in-memory-database. Esta tecnologia é, no fundo, baseada na mesma gestão de
memória usada pelo SQL-IMDB (ver atrás).
O XML-IMDB é dinamicamente optimizado, durante a execução, baseando-se
na informação a pesquisar e nos resultados intermédios.
É bastante rápido a processar os documentos XML, usando uma tecnologia de
indexação da empresa QuiLogic, assim como, a indexação mais tradicional – árvores e
tabelas de hash. Esta tecnologia também é eficiente porque se baseia num sistema de
cache de ficheiros, com XML em tabelas de memória (localmente ou remotamente).
Atentar no exemplo seguinte para melhor entender como se consegue encaixar
um documento XML numa tabela de memória. O exemplo seguinte demonstra a criação
de uma tabela, o carregamento de um documento XML (book.xml) para a tabela
anteriormente criada, e finalmente demonstra como podemos eliminar a tabela criada.
ISEP – DEI
25
IMDB – Sistema de Indexação
Caracterizar IMDB
db.ExecXql("CREATE TABLE TX")
db.ExecXql("LOAD 'book.xml' INTO TX")
...
db.ExecXql("DROP TABLE TX")
Figura 3 – Encaixar documento XML numa tabela de memória
Como já descrito anteriormente o XML-IMDB suporta código SQL (isto porque
usa pesquisas XQuery), para melhor compreensão seria útil atentarmos no exemplo
seguinte. Este demonstra-nos o modo de integrar um SELECT ou um INSERT no
código XML-IMDB.
"FOR $X IN (SELECT * FROM TR WHERE ...)
...
RETURN $X"
"FOR $X IN DOCUMENT('abc.xml') WHERE $X/B/text() = (SELECT ... WHERE b =
$X/ID/number()) RETURN $X"
"FOR $X IN DOCUMENT('abc.xml') ... RETURN (INSERT INTO TR
VALUES($X/A/text(), $X/B/number()))"
Figura 4 – Exemplo de SQL em XML-IMDB
Também são suportadas as funções de UPDATE (REPLACE) e DELETE, de
uma forma fácil.
"FOR $X IN TX .... DELETE $X/..."
"FOR $X IN TX .... RENAME $X/... TO 'abc'"
"FOR $X IN TX .... REPLACE $X/text() WITH 'abc'"
"FOR $X IN TX .... REPLACE $X WITH <>...<>"
"FOR $X IN TX .... REPLACE $X/@A WITH ATTRIBUT('abc',12)"
"FOR $X IN TX .... INSERT <>...<> INTO $X"
....
Figura 5 – SQL (UPDATE e DELETE) em XML - IMDB
ISEP – DEI
26
IMDB – Sistema de Indexação
Caracterizar IMDB
De igual modo ao SQL-IMDB, também o XML-IMDB é distribuído em
ActiveX, DLL ou em LIB, contudo é apenas suportado na plataforma Windows
(95/98/NT/2000/XP) [6].
2.2.5 Motor de indexação MySQL
Dentro do MySQL apenas nos iremos concentrar nas tabelas InnoDB. Este
providencia-nos transacções, fazer commit e rollback assim com recuperação depois de
falhas. Este também suporta multi-utilizador, e podemos colocar esta tecnologia em
pequenos espaços de memória. As tabelas InnoDB também suportam chaves
estrangeiras.
Consegue computar grandes quantidades de informação, com uma eficiência de
CPU bastante considerável. É basicamente o suporte para bases de dados existente no
MySQL. Funciona em memória principal (RAM).
Cada tabela InnoDB tem uma indexação chamada de “clustered index”, onde a
informação de todas as linhas da tabela está guardada. Se foi definida uma chave
primária na nossa tabela, então a indexação da chave primária será o “clustered index”.
Se, por outro lado, não definirmos uma chave primária na nossa tabela, o InnoDB irá
internamente gerar um “clustered index”, em que, as linhas serão ordenadas pelo ID
que o InnoDB fornece às respectivas linhas da tabela. O ID é um campo de 6 caracteres
que será incrementado cada vez que uma nova linha é inserida. As linhas estarão, então,
ordenadas pela ordem de inserção.
Aceder a uma linha através do “clustered index” é rápido, porque a informação
da linha estará na mesma página de memória para onde a indexação nos direcciona (em
algumas bases de dados a informação é guardada em diferentes páginas da indexação).
InnoDB usa a chave primária para procurar pela linha através do “clustered
index”.
ISEP – DEI
27
IMDB – Sistema de Indexação
Caracterizar IMDB
Todas as indexações usam o algoritmo B-Tree (ver capítulo 3), tal qual o
sistema de indexação desenvolvido neste projecto, onde os registos de indexação são
guardados.
2.3 Necessidade de Indexação
Um dos usos mais vulgares para a tecnologia IMDB será o DataSet (Java ou
Microsoft como já referido anteriormente), ao qual estará sempre associado o XML.
Pois, o XML é uma das tecnologias que hoje em dia mais se usa na Internet e, como já
foi referido anteriormente, esta é uma área em que urge a integração de IMDB.
A indexação é importante na Internet, porque nos pode permitir diminuir o
tempo gasto com carregamentos de dados, aumentando bastante a performance a este
nível. Este facto torna-se ainda mais gritante quando existem cada vez mais aplicações a
trabalhar com Internet.
2.3.1 Analogia IMBD com XML
Esta secção tem interesse no sentido em que se tenta comprovar a importância
da existência de IMDB, nada melhor para despertar o interesse, do que fazer uma
analogia com a famosa tecnologia XML.
Uma desvantagem que o XML nos apresenta é o facto de sempre que desejarmos
abrir um documento XML teremos que carregá-lo todo para memória. E, como o XML
representa os dados de uma forma hierárquica (estilo uma árvore a expandir), pode-se
mesmo dizer que o XML tem a estrutura de documento encaixado, torna-se importante
um fácil e rápido acesso aos dados (a rapidez é, portanto, uma característica em falta no
XML).
Para a solução do problema seria, por exemplo, usar esta tecnologia em conjunto
como os já descritos DataSet, ou um SQL-IMDB, ou um XML-IMDB permitindo desta
forma ter todos os documentos em memória com todas as suas relações, assim como,
ISEP – DEI
28
IMDB – Sistema de Indexação
Caracterizar IMDB
gerir o documento XML (permitindo indexação da informação), sem pesar em demasia o
sistema.
2.4 Problemas e pontos a reter
Em primeira instância é preciso definir quais os limites que desejamos atingir,
por outras palavras, quanto queremos guardar em memória (RAM) e quanto queremos
guardar no disco rígido.
O que se pretende realçar é que devemos pensar que nem em todas as ocasiões
os dados deverão remanescer em memória, já que, poderão pesar o sistema. Ou seja, ao
ocuparmos memória de um sistema em demasia poderemos provocar a instabilidade
deste, de tal modo que sejam impraticáveis as mais básicas operações num sistema de
indexação em memória (sistema demasiado lento).
No entanto é de reter que um sistema IMDB na sua plenitude, é sempre aquele
que mais nos satisfaz em eficiência e rapidez.
ISEP – DEI
29
IMDB – Sistema de Indexação
3.
BTrees ++
BTrees ++
3.1 Introdução – outros sistemas
Neste capítulo irá ser apresentado o sistema usado para a indexação das bases de
dados em memória – BTrees++, este código tem por base uma implementação Open
Source (ver Glossário), que foi adaptada ao sistema de indexação pretendido. Contudo,
seria importante salientar que esta não é a única tecnologia existe para esta finalidade.
Existem outros tipos de árvores que poderão produzir o mesmo efeito, de seguida
apresentam-se alguns exemplos:
o Árvores ADT
o Árvores AVL
o Árvores Red-Black
Foram
escolhidas
as
BTrees
porque
nos
apresentavam
um
melhor
manipulamento da memória, sendo talvez mais rápidas, e porque se adequavam melhor
e mais facilmente ao SGBDoc.
3.1.1 Árvores ADT
Uma árvore ADT pode ser definida para suportar as seguintes operações:
o Retornar o Pai
o Retornar Filho mais à esquerda
o Retornar a raiz
o Colocar árvore como nula
o Calcular altura
ISEP – DEI
30
IMDB – Sistema de Indexação
BTrees ++
o Calcular profundidade
o Criar árvore – criando uma parecida com a da figura que se segue [7]
Figura 6 – Exemplo de uma árvore ADT
3.1.2 Árvores AVL
Também conhecidas como árvores binárias de pesquisa balanceadas. Procura,
inserção e eliminação podem ser implementadas.
Uma árvore AVL é uma árvore binaria de pesquisa em que:
o A altura da sub-árvore direita e da sub-árvore esquerda diferem da raiz
de pelo menos 1.
o A sub-árvore esquerda e a sub-árvore direita são elas próprias árvore
AVL [7]
Figura 7 – Exemplo de árvores AVL e não AVL
ISEP – DEI
31
IMDB – Sistema de Indexação
BTrees ++
3.1.3 Árvores Red-Black
Permite efectuar procuras binárias pela árvore onde o caminho da raiz até a um
último nó (leaf), não maior do que o dobro do outro caminho da raiz até outro último nó
qualquer.
Uma árvore é descrita com red-black se satisfaz as seguintes condições:
o Qualquer nó é red ou black.
o Qualquer último nó é sempre black.
o Se um nó é red os seus filhos são black
o
Qualquer caminho desde um nó até aos seus últimos descendentes conte
o mesmo número de nós black [7]
Figura 8 – Exemplo de uma árvore red-black
ISEP – DEI
32
IMDB – Sistema de Indexação
BTrees ++
3.2 Caracterização
As estruturas de árvore suportam várias operações dinâmicas básicas incluindo a
pesquisa, o predecessor, o seguinte, o menor, o maior, a inserção e a eliminação
proporcional à altura da árvore. Idealmente, uma árvore será equilibrada se a altura for
log n, onde n é o número de nós da árvore. Para assegurar-se de que a altura da árvore
seja tão pequena quanto possível e, forneça consequentemente o melhor tempo de
execução possível, uma estrutura de árvore balanceada como a árvore red-black tree
(ver 3.1.3) , a árvore de AVL (ver 3.1.2), ou a b-tree (BTree++) deve ser usada.
Ao manusear com grandes quantidades dos dados, não é frequentemente
possível, ou desejável, manter toda estrutura inteira na memória principal (RAM). Ao
contrário, uma parcela relativamente pequena da estrutura de dados é mantida em RAM,
e os restantes dados são lidos de um repositório secundário (por exemplo disco rígido)
conforme for necessário. Infelizmente, um disco rígido, a forma mais comum de
armazenamento secundário, é significativamente mais lento do que a memória RAM.
De facto, o sistema gasta frequentemente mais tempo em ir buscar os dados do que a
processá-los.
As b-trees são árvores balanceadas que são optimizadas para situações quando
parte ou toda a árvore deve ser mantida em memória secundária, usando por exemplo
um disco rígido. Como os acessos ao disco são dispendiosos (tempo que consome), as
b-trees tentam minimizar o número de acessos ao disco. Por exemplo, uma b-tree com
uma altura de 2 e um factor de 1001 pode armazenar mais que um bilião de chaves mas,
requerem pelo menos dois acessos ao disco para pesquisar por um nó qualquer.
3.3 Estrutura de uma BTree
Ao contrário de uma árvore binária, cada nó de uma b-tree pode ter um número
variável de chaves e de filhos. As chaves são armazenadas em ordem crescente. Cada
chave tem um filho associado que pode ser a raiz de uma sub-árvore que contem todos
ISEP – DEI
33
IMDB – Sistema de Indexação
BTrees ++
os nós com chaves menores ou iguais à chave, mas maiores do que a chave precedente.
Um determinado nó pai tem também um filho adicional mais à direita, que pode ser a
raiz para uma sub- árvore que contem todas as chaves maiores do que todas as chaves
do nó pai.
Uma b-tree tem um número mínimo de filhos para cada nó, chamado o factor de
minimização. Se t for o factor de minimização, então cada nó deve ter pelo menos t - 1
chaves. Sob determinadas circunstâncias, ao nó raiz é permitido violar esta propriedade
tendo menos do que t - 1 chaves. Cada nó pode ter no máximo 2t - 1 chaves ou,
equivalente, 2t filhos.
Sabendo que cada nó tende a ter um factor ramificação grande (um grande
número de filhos – branching factor), é normalmente necessário atravessar
relativamente poucos nós antes de encontrar a chave desejada. Se o acesso a cada nó
requerer um acesso a disco, então a b-tree tentará minimizar o número de acessos ao
disco. O factor de minimização é escolhido geralmente de modo a que o tamanho total
de cada nó corresponda a um múltiplo do tamanho de bloco do dispositivo de
armazenamento subjacente (do disco rígido, por exemplo). Esta escolha simplifica e
optimiza o acesso ao disco. Consequentemente, uma b-tree é uma estrutura de dados
ideal para as situações onde todos os dados não podem residir no armazenamento
preliminar e os acessos ao armazenamento secundário (disco) são comparativamente
demorosos (tempo consumido).
3.3.1 Altura das b-Trees
Para n maior do que ou igual a um, a altura de uma ‘n - chave b-tree T’ de altura
h com um grau mínimo t maior do que ou o igual a 2,
Figura 9 – Cálculo da altura de uma BTree
ISEP – DEI
34
IMDB – Sistema de Indexação
BTrees ++
O pior caso de altura será em O(log n). Já que, a "ramificação" de uma b-tree
pode ser grande, isto quando comparada a muitas outras estruturas de árvore
balanceadas, a base do logaritmo tende a ser grande; consequentemente, o número da
nós visitados durante uma busca tende a ser menor do que requerido por outras
estruturas de árvore. Embora isto não afecte a pior altura simétrica, as b-trees tendem a
ter alturas menores do que outras árvores com a mesma altura simétrica.
3.4 Operações em BTrees
Os algoritmos de search (busca), create (criar), e os de operações de insert
(inserção) são visualizados abaixo. Note-se que estes algoritmos são de uma única
passagem; ou seja não existem passagem de baixo para cima. Sabendo que as b-trees
tentam minimizar acessos ao disco e, os nós são armazenados geralmente em disco, esta
aproximação de uma única passagem reduzirá o número de visitas a um nó e, logo, o
número de acessos ao disco. Umas aproximações simples de dupla passagem que sejam
passagens de baixo para cima na árvore, ajudam a reparar possíveis falhas.
Já que todos os nós são supostos serem guardados em armazenamento
secundário (disco), em vez de serem armazenados em memória (RAM), todas as
referências a um dado nó dado devem precedidas por uma operação de leitura
denominada Disk-Read. Similarmente, uma vez um nó modificado e, não sendo mais
preciso, deve ser escrito para armazenamento secundário com uma operação da escrita
denominada de Disk-write. Os algoritmos abaixo supõem que todos os nós
referenciados nos parâmetros já tiveram a correspondente operação Disk-Read. Os nós
novos são criados e o armazenamento é atribuído com a chamada ao Allocate-Node. Os
detalhes da implementação das funções Disk-read, Disk-write, e do Allocate-Node são
dependentes do sistema operativo e da implementação.2
2
No fundo será este um dos processos a serem alterados, já que, os nossos desejos não são os
mencionados. Para uma melhor compreensão atentar em 5.1, mais concretamenta, nas alterações de
leitura e escrita efectuadas no sistema de indexação.
ISEP – DEI
35
IMDB – Sistema de Indexação
BTrees ++
3.4.1 B-Tree-Search(x, k)
i <- 1
while i <= n[x] and k > keyi[x]
do i <- i + 1
if i <= n[x] and k = keyi[x]
then return (x, i)
if leaf[x]
then return NIL
else Disk-Read(ci[x])
return B-Tree-Search(ci[x], k)
Figura 10 – Algoritmo de pesquisa numa BTree
A operação de busca numa b-tree é análoga a uma busca numa árvore binária.
Em vez de escolher entre um filho à esquerda e à direita como numa árvore binária, uma
pesquisa numa b-tree deve fazer a escolha de n maneiras. O filho correcto é escolhido
executando uma pesquisa linear aos valores do nó. Após ter encontrado o valor maior
do que ou igual ao valor desejado, o ponteiro do filho imediatamente à esquerda desse
valor é seguido. Se todos os valores forem menores do que o valor desejado, o ponteiro
mais à direita do filho será seguido. Naturalmente, a busca pode ser terminada assim que
o nó desejado for encontrado. Sabendo que o tempo de execução de uma pesquisa
depende da altura da árvore, B-Tree-Search é no tempo de execução O(log t n) .
3.4.2 B-Tree-Create(T)
x <- Allocate-Node()
leaf[x] <- TRUE
n[x] <- 0
Disk-Write(x)
root[T] <- x
Figura 11 – Algoritmo de criação de uma b-tree vazia
A operação B-Tree-Create cria uma b-tree vazia e aloca um nó novo, a raiz, que
não tem nenhuma chave. Somente o nó a raiz pode ter esta propriedade; todos nós
restantes devem seguir os critérios esboçados previamente. A operação B-Tree-Create
demora O(1) .
ISEP – DEI
36
IMDB – Sistema de Indexação
BTrees ++
3.4.3 B-Tree-Split-Child(x, i, y)
z <- Allocate-Node()
leaf[z] <- leaf[y]
n[z] <- t - 1
for j <- 1 to t - 1
do keyj[z] <- keyj+t[y]
if not leaf[y]
then for j <- 1 to t
do cj[z] <- cj+t[y]
n[y] <- t - 1
for j <- n[x] + 1 downto i + 1
do cj+1[x] <- cj[x]
ci+1 <- z
for j <- n[x] downto i
do keyj+1[x] <- keyj[x]
keyi[x] <- keyt[y]
n[x] <- n[x] + 1
Disk-Write(y)
Disk-Write(z)
Disk-Write(x)
Figura 12 – Algoritmo de divisão do filho numa BTree
Se um nó se tornar "demasiado cheio", é necessário executar uma operação de
divisão. A operação de divisão move a chave mediana do nó x para o seu pai y onde x é
o na posição iº filho de y. Um nó novo, z , é alocado, e todas as chaves à direita de x da
chave mediana são movidas para z. As chaves à esquerda da chave mediana continuam
no nó original x. O novo nó, z, torna-se no filho imediatamente à direita da chave
mediana que foi movida para o pai y, e o nó original, x, trona-se no filho imediatamente
à esquerda da chave mediana que foi movida no pai y.
A operação de split (divisão) transforma um nó cheio com 2t – 1 chaves em dois
nós com t - 1 as chaves cada um. Note-se que uma chave é movida para o nó pai. O
algoritmo B-Tree-Split-Child demorará O(t), onde t é constante.
3.4.4 B-Tree-Insert
B-Tree-Insert(T, k)
r <- root[T]
if n[r] = 2t - 1
then s <- Allocate-Node()
root[T] <- s
leaf[s] <- FALSE
ISEP – DEI
37
IMDB – Sistema de Indexação
BTrees ++
n[s] <- 0
c1 <- r
B-Tree-Split-Child(s, 1, r)
B-Tree-Insert-Nonfull(s, k)
else B-Tree-Insert-Nonfull(r, k)
Figura 13 – Algoritmo de inserção com um nó cheio
B-Tree-Insert-Nonfull(x, k)
i <- n[x]
if leaf[x]
then while i >= 1 and k < keyi[x]
do keyi+1[x] <- keyi[x]
i <- i - 1
keyi+1[x] <- k
n[x] <- n[x] + 1
Disk-Write(x)
else while i >= and k < keyi[x]
do i <- i - 1
i <- i + 1
Disk-Read(ci[x])
if n[ci[x]] = 2t - 1
then B-Tree-Split-Child(x, i, ci[x])
if k > keyi[x]
then i <- i + 1
B-Tree-Insert-Nonfull(ci[x], k)
Figura 14 – Algoritmo de inserção numa árvore com um nó vazio
Para executar uma inserção numa b-tree, o nó apropriado para a chave deve ser
encontrado usando um algoritmo similar ao B-Tree-Search. Em seguida, a chave deve
ser introduzida no nó. Se o nó não estiver cheio antes da inserção nenhuma acção
especial será requerida; contudo, se o nó estiver cheio, este deve ser divido (split), de
modo a abrir espaço para a nova chave. Sabendo que dividir nó é mover uma chave para
o nó pai, o nó pai não deve estar cheio ou uma outra operação de divisão é requerida.
Este processo pode-se repetir até a raiz e, pode ser preciso dividir o nó da raiz. Esta
aproximação requer duas passagens. A primeira passagem encontra o nó onde a chave
deve ser introduzida; a segunda passagem executa todos os splits (divisões) requeridos
pelo nó filho.
Cada acesso a um nó pode corresponder a um acesso caro ao disco, é desejável
evitar a segunda passagem assegurando-se de que o nó pai nunca esteja cheio. Para
realizar isto, o algoritmo apresentado divide (faz split) sobre todos os nós cheios
encontrados ao descer a árvore. Embora esta aproximação possa resultar em operações
de split desnecessárias, garante que o pai nunca necessita de ser divido e elimina a
ISEP – DEI
38
IMDB – Sistema de Indexação
BTrees ++
necessidade de uma segunda passagem até ao topo da árvore. Um split funciona em
tempo linear, tem pouco efeito no tempo de execução que faz o algoritmo B-Tree-Insert
– tempo de execução O(t t n).
Dividir o nó da raiz é processado como um caso especial, já que uma raiz nova
deve ser criada para conter a chave mediana da raiz antiga. A b-tree crescerá a partir do
topo.
3.4.5 B-Tree-Delete
A eliminação de uma chave de uma b-tree é possível; contudo, cuidados
especiais devem ser tomados para se assegurar de que as propriedades de uma b-tree
sejam mantidas. Diversos casos devem ser considerados. Se a eliminação reduzir o
número das chaves num nó abaixo do grau mínimo da árvore, esta violação deve ser
corrigida combinando diversos nós e possivelmente reduzindo a altura da árvore. Se a
chave tiver filhos, os filhos devem ser reorganizados.
3.5 Exemplos de aplicações de BTrees
De seguida apresenta-se uma b-tree exemplo:
Figura 15 – Exemplo de uma b-tree
Agora tenta-se exemplificar a sequência da pesquisa da chave 21 numa b-tree:
ISEP – DEI
39
IMDB – Sistema de Indexação
BTrees ++
Figura 16 – Sequência de pesquisa numa b-tree
Agora exemplifica-se a inserção da chave 33 com split (divisão):
ISEP – DEI
40
IMDB – Sistema de Indexação
BTrees ++
Mediana
ISEP – DEI
41
IMDB – Sistema de Indexação
BTrees ++
Figura 17 – Sequência de inserção de um valor numa b-tree com split (divisão)
3.5 Aplicações
Uma base de dados é uma colecção de dados organizados numa forma que
facilite actualizar, ler, recuperar, e controlar os dados. Os dados podem consistir em
qualquer coisa, incluindo, mas não limitado aos nomes, aos endereços, ás imagens, e
aos números. As bases de dados são muito usuais hoje em dia. Por exemplo, um sistema
de reservas de uma linha aérea pode manter uma base de dados de voos disponíveis, de
clientes, e de bilhetes emitidos. Um professor pode manter uma base de dados com
nomes de estudantes e de turmas.
Porque os PC computam rapidamente e são exactos, manipulando,
armazenando, e recuperando dados, as bases de dados são mantidas frequentemente
electronicamente usando um sistema de gestão de base de dados. Os sistemas de gestão
de base de dados são componentes essenciais de muitas operações de negócio que
acontecem diariamente. Os produtos de base de dados como o Microsoft SQLSERVER,
o IBM DB2, Sybase Adaptative e o Oracle (ver Glossário) servem para sistemas como
contabilidade, sistemas de inventário, sistema médicos, sistemas de reserva de linha
aérea, e outros aspectos importantes de negócios modernos.
3.5 Problemas e vantagens
Como as bases de dados não podem tipicamente ser mantidas inteiramente em
memória, as b-trees são usadas frequentemente para posicionar nos dados e fornecer
acessos rápidos. Por exemplo, procurar em dados não indexados e não ordenados numa
base de dados que contem n valores chaves terá uma pesquisa demasiadamente
demorosa (tempo O(n)); se os mesmos dados forem armazenados com uma b-tree, a
ISEP – DEI
42
IMDB – Sistema de Indexação
BTrees ++
mesma operação de pesquisa funcionará em O(log n). Para executar uma pesquisa de
uma única chave com um milhão de chaves (1.000.000), uma busca linear requererá na
a maioria dos casos 1.000.000 comparações. Se os mesmos dados forem posicionados
com uma b-tree de grau mínimo 10, 114 comparações serão necessárias no pior caso.
Claramente, posicionar em grandes quantidades de dados pode significativamente
melhorar o desempenho da pesquisa.
Embora outras estruturas de árvore equilibradas possam ser usadas, uma b-tree
optimiza também os acessos demorosos ao disco que são interessantes ao tratar de séries
de dados de grandes volumes. O acesso simultâneo às bases de dados das B-Trees
funciona tipicamente nos ambientes multi-utilizador onde muitos utilizadores podem
simultaneamente executar operações na base de dados.
Infelizmente, este cenário muito comum introduz complicações. Por exemplo,
imagine uma base de dados a armazenar balanços de um cliente de banco. Suponha
agora que alguém tenta retirar 40Є de um cliente que contem 60Є. Primeiramente, o
balanço actual é verificado para assegurar fundos suficientes. Depois dos fundos
descontados, o balanço do cliente está reduzido. Suponha, ainda, que uma outra pessoa
tenta simultaneamente retirar 30Є do mesmo cliente. O balanço do cliente é verificado
no mesmo espaço temporal da primeira pessoa, o balanço do cliente é recuperado
também para a segunda pessoa. Desde que nenhuma pessoa estivesse a pedir mais
fundos do que estavam na altura disponíveis, ambos os pedidos são satisfeitos para um
total de 70Є. Após a transação da primeira pessoa, 20Є devem remanescer (60Є - 40Є),
assim que o novo balanço é gravado como 20Є. Em seguida, o balanço do cliente após
transação para a segunda da pessoa, 30Є (60Є - 30Є), é gravado o balanço de 20Є.
Infelizmente, 70Є foram levantados, mas o balanço do cliente foi diminuído somente
30Є. Claramente, este comportamento é indesejável, e devem ser tomadas precauções
especiais. Uma b-tree sofre de problemas similares num ambiente multi-utilizador. Se
dois ou os mais processos estiverem a usar a mesma árvore, é possível para a árvore
tornar-se corrupta e resultar na perda ou em erros de dados.
A solução mais simples é colocar em série o acesso à estrutura de dados. Ou seja
se um outro processo estiver a usar a árvore, todos restantes processos devem esperar.
Embora isto seja praticável em muitos casos, pode colocar um limite desnecessário e
ISEP – DEI
43
IMDB – Sistema de Indexação
BTrees ++
“dispendioso” no desempenho, porque muitas operações podem ser executadas
simultaneamente sem o risco [8].
ISEP – DEI
44
IMDB – Sistema de Indexação
SGBDoc
4. SGBDoc
O SGBDoc é um sistema que foi desenvolvido na I2S, como o próprio nome
indica é um sistema que permite gerir documentos em memória e com o conceito de
repositório, este permite guardar os dados num sistema de ficheiros e numa base de
dados relacional (SQL Server, AS/400, Linux). Para melhor perceber todos os conceitos
mais importantes desta tecnologia, que contém aspectos bastantes interessantes, então
deve-se atentar neste capítulo, que nos pretende elucidar acerca de considerações
importantes relacionadas com o SGBdoc assim como do uso do SGBdoc em algumas
aplicações (I2S).
4.1 Considerações Genéricas
O SGBdoc é um sistema gestor de base de documentos, permitindo a
representação e gestão de documentos.
Os documentos do SGBdoc são objectos com identidade que permitem
representar de forma adequada a informação tratada por sistemas de informação e
aplicações informáticas.
O SGBdoc permite representar, tratar e armazenar informação e regras de
tratamento dessa informação.
A representação da informação é feita através dos campos que compõem um
Documento. O tratamento da informação é efectuado através de métodos. O
armazenamento dos Documentos é efectuado em repositórios.
Os Documentos do SGBdoc são objectos fortemente tipados, ou seja, a sua
estrutura é bem definida embora possa evoluir ao longo do tempo. Para garantir essa
ISEP – DEI
45
IMDB – Sistema de Indexação
SGBDoc
coerência existe o conceito de Tipo de Documento. Qualquer Documento é de um Tipo.
Os Tipos especificam a estrutura e comportamento dos Documentos.
O SGBdoc mantém Documentos e Tipos armazenados em Repositórios. Nos
Repositórios ficam registadas todas as versões dos Tipos de Documentos assim como
dos Documentos.
4.1.1 Definição de Documento no SGBdoc
Um documento, no âmbito do sistema SGBdoc ou CODOMO (ver 4.3.1), é um
objecto com identidade que serve para armazenar objectos de dados complexos assim
como métodos que modelam o comportamento desses objectos. Os objectos de dados
que podem fazer parte de um documento vão desde os tipos de dados escalares até
objectos colecções e objectos compostos a partir desses objectos. Isto é, num
documento podemos representar objectos com uma estrutura quase arbitrária,
nomeadamente relações numa forma não normalizada ou na forma NNF (Non Normal
Form).
Os métodos são escritos numa linguagem de programação extensível (LPS – ver
Glossário), com características de uma linguagem procedimental e com instruções de
acesso universal a dados. O compilador da LPS e o ambiente de execução são parte
integrante do CODOMO.
Normalmente os documentos são armazenados num repositório num formato
binário nativo. Este formato de persistência é utilizado para fazer circular documentos
entre camadas de uma aplicação ou entre sistemas desde que estes tenham o sistema
operativo Windows ou AS/400. Os documentos também podem ser criados em memória
e alimentados a partir de programas ou a partir de dados externos utilizando-se para isso
métodos com as instruções de acesso universal a dados. Esta ultima característica
permite utilizar o documento para criar uma visão desconectada de uma parte de uma
base de dados e, se necessário, com transformações estruturais.
ISEP – DEI
46
IMDB – Sistema de Indexação
SGBDoc
A descrição da estrutura de um documento e os métodos LPS são armazenados
num documento especial designado por tipo de documento. Um tipo de documento
permite representar uma classe de documentos: documentos que partilham a mesma
estrutura e os mesmos métodos. Isto implica que cada documento esteja
necessariamente associado a um tipo de documento.
A utilização de documentos é suportada numa aplicação especializada que foi
denominada de CODOMO.
Para que os documentos possam ser utilizados e geridos o CODOMO tem as
seguintes funcionalidades:
Criação de tipos de documentos que consiste na especificação das
características estruturais e de comportamento que deverão ter os documentos de um
dado tipo. Estas especificações são realizadas através de uma linguagem de definição de
tipos de documentos (LDTD).
Manipulação de documentos através de uma linguagem de manipulação de
documentos (LMD).
Gestão de repositórios de documentos.
o Gestão de versões de um dado tipo de documento
o Gestão de versões de um dado documento
A figura seguinte mostra a arquitectura CODOMO:
Figura 18 – Documentos no CODOMO
ISEP – DEI
47
IMDB – Sistema de Indexação
SGBDoc
4.1.1.1 Analogia com XML
Em termos concretos o XML é uma tecnologia hierárquica baseada em
documentos, o SGBdoc baseia-se numa estrutura de documentos. O SGBdoc nem
sempre necessita de carregar todo o conteúdo de um documento, por sua vez, o XML
sempre que deseja obter um documento tem de carregá-lo em memória.
Na tabela seguinte podemos visualizar quais as funções suportadas por uma e
por outra tecnologia.
Função
SGBdoc
XML
Tipos
S
N3
Métodos
S
N
Documentos
S
S
Classes
S
S4
Hierárquico
N5
S
Multiplataforma
S
S
Binário
S
N
Repositórios
S
N
Tabela 3 – Analogia entre o que suporta SGBdoc e o que suporta a tecnologia XML
4.1.2 Definição de colecção
Tentaremos nesta parte não só exemplificar o que é uma colecção mas também
permitir que se tenha uma ideia mais esclarecedora de como construir um documento no
SGBdoc.
3
4
Também existe o XML Schema que pode simular um tipo de um documento.
Não necessáriamente através de funções nativas do XML, mas de outros sistemas que
interafem com o XML, como o ANT.
5
A nível das colecções (o que estamos a abordar) só existe um nível, no entanto usando vectores
poderíamos ter níveis ilimitados de hierarquias.
ISEP – DEI
48
IMDB – Sistema de Indexação
SGBDoc
Entende-se por colecção no SGBdoc como um conjunto de valores podendo ser
inteiros, ou strings, ou mesmo uma estrutura (como nos mostra a figura seguinte –
estrutura com os campos Name, Age, BthDate e Gender).
A linguagem de definição de tipos de documentos (LDTD) permite uma forma
simples e amigável definir tipos de documentos sem ser através da utilização da API.
Assim o utilizador pode definir um ficheiro de texto (script, normalmente com a
extensão lps) contendo a definição de um tipo de documento segundo a gramática da
LDTD. Este ficheiro pode ser então utilizado, por exemplo na Consola CODOMO (ver
4.3.1), para criar tipos de documentos ou versões de tipos de documentos.
Se atentarmos na figura, que se segue, podemos verificar que primeiramente
definimos a estrutura info e posteriormente definimos uma colecção – AllPersons –
baseada na estrutura info. Linhas mais à frente poderemos visualizar um método
(comando methods) e, como efectuamos a inserção de um elemento através do SGBdoc
– comando addnew.
ISEP – DEI
49
IMDB – Sistema de Indexação
SGBDoc
Figura 19 – Exemplo do código necessário para a criação de um documento no SGBdoc
4.1.3 Funcionamento interno – parâmetros e funções
O SGBdoc serve de base para uma linguagem de programação existente na I2S
(LPS – Linguagem para seguros). A manipulação das funções e dos parâmetros
internamente é processado do modo mais comum, através de uma pilha (LIFO – “Last
In First Out” – o último a entrar será o último a sair). Assim quando procedemos à
busca de parâmetros dentro de uma determinada função, esta é processada de modo
inverso, ou seja, do último para o primeiro (ver caso prático – 5.2.2, problemas
encontrados).
ISEP – DEI
50
IMDB – Sistema de Indexação
SGBDoc
4.1.4 Indexação sobre uma colecção
Entende-se indexação sobre uma colecção como a efectuação de uma
determinada ordem nos dados sobre um determinado campo de uma colecção, ou seja,
permitindo que nos coloquemos numa dada posição de modo eficiente e rápido.
Possuindo determinadas funções como nos mostra a seguinte tabela:
Tabela 4 – Tabela de operações de indexação.
Função
Descrição
Encontrar primeiro
Encontrar a primeira posição segundo a
indexação de um campo
Encontrar Último
Encontrar a última posição segundo a
indexação de um campo
Encontrar Próximo
Encontrar a próxima posição
Encontrar Anterior
Encontrar a posição Anterior
Encontrar chave
Encontrar um campo segundo uma dada
chave
Posicionar
Obter um código segundo uma posição
Tabela 4 – Tabela de operações de indexação
No fundo ao usar indexação estamos a tentar permitir com que as referidas
operações possam usar cursores6.
Para melhor entendermos a importância deste facto seria de bom atentarmos nas
seguintes tabelas – Tabela 5 – Tabelas de exemplificação de movimentação de
operações.
Imaginando só que nos encontrávamos no código 1 e nos desejávamos
posicionar no código N, segundo apenas a primeira tabela, seria necessário percorrer
todos os códigos entre os referidos (mais concretamente os códigos 2 e 3). Contudo, se
6
Os cursores são variáveis que nos permitir movimentar entre registos de forma eficiente, no
SGBdoc deverão ser variáveis “leves”.
ISEP – DEI
51
IMDB – Sistema de Indexação
SGBDoc
atentarmos na segunda tabela, verificamos que segundo um código obtemos uma
posição. Através desta posição, o deslocamento (na primeira tabela) é quase imediato
(por exemplo: “posicionar N”)!
Código
Valor
1
Valor1
2
Valor2
3
3
N
ValorN
Código
Posição
1
1
2
2
3
3
ValorN
N
Tabela 5 – Tabelas de exemplificação de movimentação de operações
Isto leva-nos a concluir que, além das referidas operações (ver Tabela 4 – Tabela
de operações de indexação), teríamos que ter também uma função que nos permitissem
posicionar numa determinada posição directamente (ver 5.2.4, para verificar as funções
criadas). O que se pretende é que depois de obtermos a posição, consigamos
posicionarmo-nos nessa posição da colecção de uma forma automática.
Seriam, então, necessárias duas funções, como nos mostra o seguinte quadro.
Função
Retornar posição
Posicionar
Descrição
Retornar a posição de uma dada colecção
Posicionar numa dada posição de um
colecção
Tabela 6 – Funções de posicionamento necessárias para uma indexação
ISEP – DEI
52
IMDB – Sistema de Indexação
SGBDoc
4.1.4.1 Porquê a indexação no SGBdoc?
A indexação no SGBdoc torna-se então uma necessidade, já que, se atentarmos
no
ISEP – DEI
sector
anterior
(
53
IMDB – Sistema de Indexação
SGBDoc
4.1.4 Indexação sobre uma colecção), verificamos que a eficiência melhora, e de que
maneira, usando indexação.
E, quando estamos perante elevadas quantidades de dados desejando
movimentarmo-nos numa tabela segundo a ordem de uma determinada coluna, este tipo
de processo torna-se impraticável.
A indexação facilita-nos o processo de navegação entre registos e ainda nos
permitir usufruir de todas as anteriores funções existentes – sem indexação.
4.2 Exemplo de utilização
Imaginemos que desejamos representar um sistema de informação de Facturas.
Analisando o problema facilmente chegamos a conclusão que todas as facturas
têm elementos comuns: dizem respeito a um cliente, têm uma data, têm um conjunto de
produtos ou serviços vendidos e respectivo preço e normalmente têm também valores
globais como por exemplo a quantia total a pagar. Toda esta informação tipifica o que é
uma Factura. Temos então a informação necessária para especificar o que é um Tipo de
Documento Factura (pelos menos ao nível da sua estrutura de dados...).
Algumas informações de um Tipo de Documento Factura tomam valores
específicos em cada Documento Factura (instância do Tipo de Documento Factura). Por
exemplo, o cliente ou os artigos comprados variam de Factura para Factura. Por outro
lado, nalguns casos, existem informações que são constantes em todos os Documentos.
Por exemplo, se desejarmos representar numa Factura a identificação da empresa que a
emite (existem empresas que produzem pre-impressos com essa informação constante já
empresa no papel).
No que diz respeito às regras associadas à manipulação de uma Factura existem
vários exemplos que podemos apresentar. Um dos casos mais simples é a existência de
valores calculados num Documento. No caso da Factura poderíamos concluir que o
valor total da factura é uma informação calculada com base no valor de todos os
produtos e/ou serviços vendidos. Essa lógica poderia estar especificada num método do
ISEP – DEI
54
IMDB – Sistema de Indexação
SGBDoc
Tipo de Documento Factura. Podemos alargar esta análise. Por exemplo, se a empresa
que emite a Factura permitir o pagamento parcial desta poderemos ter um método que
especifica o comportamento de uma Factura quando há um pagamento parcial (que pode
implicar uma actualização dos artigos ou serviços que se consideram pagos assim como
do montante em dívida).
Este é um exemplo prático onde o SGBdoc é passível de ser usado, contudo,
para uma melhor compreensão seria útil atentar nos próximos parágrafos.
4.3 Exemplos de uso reais – I2S
Como já foi referido anteriormente o SGBdoc é utilizado em algumas aplicações
I2S. Pode mesmo já ser considerado um componente nuclear no seio das aplicações da
referida empresa.
4.3.1 CODOMO
O CODOMO é um modelo da I2S que incorpora o SGBdoc, é uma tecnologia
que incorpora diversos componentes da I2S (dos quais falaremos mais à frente), a saber:
o SAUD – Sistema universal de acesso a dados (ver Glossário)
o LPS – Linguagem para seguros
o SGBdoc
o Laboratório – aplicação visual para usar o CODOMO
ISEP – DEI
55
IMDB – Sistema de Indexação
SGBDoc
Figura 20 – Laboratório do CODOMO
Descrever as características do CODOMO é importante não só para descrever
algum componente que use o SGBdoc, mas também, para nos elucidarmos sobre a
aplicação onde foram executados testes de indexação para o sistema prático
desenvolvido.
4.3.1.1 Arquitectura
O CODOMO consiste basicamente num Sistema Gestor de Base de Documentos
(SGBdoc), com funcionalidades análogas às de sistemas gestores de bases de dados, que
possibilita uma gestão centralizada de documentos.
Um conceito fundamental do CODOMO é o de repositório entendendo-se este
como um sistema de gestão do armazenamento de documentos (documentos e tipos de
documentos).
ISEP – DEI
56
IMDB – Sistema de Indexação
SGBDoc
A figura seguinte mostra, a cinzento, os componentes da arquitectura
CODOMO.
Figura 21 – Arquitectura CODOMO
Com o repositório o CODOMO mantém versões de documentos e tipos de
documentos, identificando universalmente os documentos através de UDIDs (Universal
Document ID) e os tipos de documentos através de UTIDs (Universal Document Type
ID). Os repositórios são identificados por RIDs (Repository ID).
O CODOMO disponibiliza uma linguagem de definição de tipos de documentos
(LDTD) e uma linguagem de manipulação de documentos (LMD), já referenciadas
anteriormente.
A linguagem LDTD permite definir os diversos tipos de documentos, isto é,
definir a estrutura dos objectos de dados e os métodos.
A linguagem LMD permite que os utilizadores finais (componentes/aplicações)
possam criar novos documentos (de um determinado tipo) e trabalhar com documentos,
ou seja, alterar os seus objectos de dados, invocar métodos, executar comandos LPS
sobre documentos, etc.
Analisando a arquitectura apresentada verificamos que:
ISEP – DEI
57
IMDB – Sistema de Indexação
SGBDoc
O CODOMO fornece APIs que possibilitam o acesso a todas as suas
funcionalidades quer na vertente LDTD quer na vertente LMD.
O repositório é suportado, neste momento, em memória, sistema de ficheiros do
S.O. ou base de dados relacional. Quando suportado em base de dados relacional é
utilizado o sistema de acesso universal a dados (SAUD).
Para facilitar a definição de tipos de documentos existe a possibilidade de
utilização da LDTD sobre a forma de linguagem de script.
As aplicações e componentes de negócio devem utilizar a vertente Object
Oriented da API em COM.
Está disponível uma Consola CODOMO que permite o trabalho interactivo com
repositórios CODOMO, podendo-se criar e alterar documentos e tipos de documentos
de diversos repositórios.
4.3.1.2 Características Gerais das Aplicações baseadas em
CODOMO
Com as funcionalidades do CODOMO é possível desenvolver aplicações
caracterizadas por elevados graus de desempenho, de interoperabilidade, de
escalabilidade e de programabilidade.
4.3.1.2.1 Desempenho
O CODOMO é “thread safe” e foi desenvolvido em linguagem C. Além disso
possui um elevado desempenho no acesso ao repositório de documentos (ver
escalabilidade) possibilitando que os documentos sejam mais rapidamente processados
e transmitidos.
ISEP – DEI
58
IMDB – Sistema de Indexação
SGBDoc
4.3.1.2.2 Interoperabilidade
Um documento pode ser transformado pelo CODOMO num formato binário
(formato nativo de persistência) altamente compactado ou pode ser transformado no
formato XML.
No primeiro caso qualquer aplicação baseada na tecnologia CODOMO poderá
processar o documento. É o formato adequado para fazer passar um documento entre
camadas ou aplicações proprietárias (intra sistema).
No segundo caso qualquer aplicação que possa ler XML poderá processar os
dados do documento (somente os dados). Este formato é adequado para fazer passar um
documento entre aplicações não proprietárias (inter sistemas).
4.3.1.2.3 Escalabilidade
Escalabilidade é a capacidade de um sistema distribuído suportar o aumento da
quantidade de utilizadores sem degradar o seu desempenho. Um recurso que afecta a
escalabilidade é o conjunto de conexões a uma base de dados. A utilização de dados em
memória, isto é, desconectados de qualquer base de dados, contribui para uma solução
escalonável porque não retém “locks” nem mantém conexões abertas.
Se o documento estiver persistente, a sua escrita realiza-se através de uma única
operação e, a sua leitura realiza-se também com uma única operação incluída numa
operação de «check in» se a leitura for realizada para actualização.
Como a persistência de um documento se realiza através de um elemento num
formato binário, isto é, escreve-se todo o documento numa única operação de escrita e
lê-se todo o documento numa única operação de leitura e como após a leitura se pode
ISEP – DEI
59
IMDB – Sistema de Indexação
SGBDoc
desfazer a conexão ao sistema de armazenamento, pensamos que a escalabilidade está
optimizada.
Se o documento for alimentado a partir de uma base de dados, após a
transferência dos dados das tabelas para o documento a ligação à base de dados pode ser
desfeita, mesmo num processo de actualização da base de dados utilizando-se uma
estratégia optimista.
4.3.1.2.4 Programabilidade
Parte da lógica dos objectos de negócio pode ser implementada com métodos
escritos na linguagem LPS, a programação restante será realizada utilizando as
diferentes APIs disponibilizadas pelo CODOMO, como por exemplo, a interface COM
[9].
4.3.2 EURO – BigBang
A I2S, como quase todas as empresas informáticas da União Europeia (apenas
aqueles países que aderiram ao euro), tiveram a difícil tarefa de migrar todos os dados
monetários de escudos (ou na moeda correspondente) para EUROS. Usou-se o referido
CODOMO, juntamente com as funções SAUD e, claro, com a ajuda do SGBdoc. Esta
funcionalidade funcionava do seguinte modo, seleccionávamos uma base de dados a
converter e outra para onde enviar os dados convertidos. No caso concreto até eram
tabelas do AS/400 pelo que os campos até eram numéricos (os valores monetários eram
assinalados por uma outras configuração), os valores são assumidos de estarem em
escudos e serão convertidos para EURO na nova base de dados destino.
No entanto este procedimento teve alguns defeitos os quais veremos mais à
frente.
ISEP – DEI
60
IMDB – Sistema de Indexação
SGBDoc
Como já referido anteriormente existia uma dificuldade na conversão dos dados
em EUROS, este facto deve-se precisamente à inexistência de indexação no SGBdoc.
Este era um grave defeito do SGBdoc, o de não podermos ordenar logicamente os dados
de forma diferente da sua ordem física! No referido exemplo esta dificuldade constituiu
um grave problema. A conversão acabou por se revelar algo lenta. Isto implicou com
que o SGBDoc tivesse que carregar as colecções já de forma ordenada e que se
introduzisse alguma complexidade no código de conversão visto não ser possível (ou
fácil) obter outras ordenações dos dados após estes terem sido carregados para as
colecções.
Na risco temos uma colecção com os dados de um risco (ex: capital, etc) e que
está ordenada por código de risco. A colecção de participantes contém as pessoas que
subscreveram um seguro de determinado risco. Esta colecção esta ordenada por código
de risco e código de participante no risco. Se estamos no 1º participante do risco 2 e nos
desejamos colocar no 1º participante do risco 3 como o fazemos? Actualmente devemos
percorrer todos os elementos a partir do actual até alcançarmos um novo risco (como
nos ilustra a figura que se segue). Muitas vezes era também necessário voltar para trás,
para por exemplo guardar valores totais dos capitais de todos os participantes de um
risco e colocar esse resultado no primeiro participante (este simboliza o grupo dos
participantes do risco). Para fazer isto, tinha que se andar com o cursor da colecção até
encontrar o primeiro participante do risco em questão.7
Contudo, com indexação seria extremamente rápido e eficaz, já que só
necessitávamos de conhecer o código do código do Risco e, podíamos posicionar o
cursor no primeiro participante desse Risco. Como mostra, a vermelho, a seta da figura
que se segue.
7
Há também que considerar que uma colecção no SGBdoc apenas pode conter um cursor, ou
seja, não poderíamos colocar um cursor no primeiro participante de um risco de modo a proceder ao
posicionamento de modo automático
ISEP – DEI
61
IMDB – Sistema de Indexação
SGBDoc
Risco 1 – 1º Participante
Risco 1
Risco 1 – 2º Participante
Risco 1 – Nº Participante
Risco 2
Risco 2 – 1º Participante
Risco 2 – 2º Participante
Risco 2 – Nº Participante
Risco 3
Risco 3 – 1º Participante
Risco 3 – 2º Participante
Risco 3 – Nº Participante
Risco N
Risco N – 1º Participante
Risco N – 2º Participante
...
Risco N – Nº Participante
...
Figura 22 – Ilustração do problema encontrado na migração dos dados EURO – Big Bang I2S
ISEP – DEI
62
IMDB – Sistema de Indexação
BTrees no SGBdoc
5. BTrees no SGBDoc
A introdução de árvores balanceadas do SGBdoc foi, como já referido, no
âmbito de possibilitar a indexação de campos. Neste capítulo tentar-se-á exemplificar
como se procedeu à introdução de “BTrees ++” no SGBdoc, desde o processo de
análise até ao desenvolvimento propriamente dito.
Como o código Open Source estava escrito em linguagem C, tal como o
SGBdoc (um dos motivos porque funciona em multi-plataforma), também as alterações
ao código das árvores balanceadas foi procedido em linguagem C, assim como, as
funções, que descrevemos neste capítulo, escritas no SGBdoc para permitir a indexação
de dados.
5.1 Procedimento anterior à inserção de BTrees
Antes da inserção de árvores balanceadas no SGBdoc toda a navegação dentro
de uma colecção de registos era procedida sequencialmente, segundo a ordem de
entrada na colecção, ou seja, era impossível levar em linha de conta a ordem alfabética
de um dado campo da colecção.
Assim, quando pretendíamos movermo-nos de um registo para outro no SGBdoc
(ver capítulo anterior – 4.1 – Considerações Genéricas), teríamos obrigatoriamente de
passar pelos que se encontravam entre os dados registos comparando sempre os valores
por cada registo passado. Para pensarmos na impraticabilidade deste sistema basta
pensarmos que contínhamos as idades de N pessoas não ordenadas, e pretendíamos
obter aquele que tinha a maior idade, teríamos que fazer N comparações para obtermos
o que tinha maior idade! Com a introdução de árvores balanceadas bastaria obter a
última da árvore que logo nos forneceria o indivíduo com maior idade.
ISEP – DEI
63
IMDB – Sistema de Indexação
BTrees no SGBdoc
5.1.1 Exemplo de navegação sem BTrees
Para o exemplo que é apresentado de seguida temos de ter em linha de conta que
existe uma estrutura com os dados de uma pessoa:
o name – nome da pessoa
o age – idade da pessoa
o bthdate – data de nascimento
o Gender – Classificação das pessoas
Na imagem que se segue tenta-se traduzir (no texto seleccionado – função
SQL_SELECTINTOCOL) como foi procedido o carregamento dos dados (da tabela
PESSOAS do AS/400) a manipular para colecção (ALLPERSONS), claro que
anteriormente houve uma conexão ao AS/400 – função SQL_START. No quadro inferior
direito podemos visualizar que o tempo de carregamento deste registos – 125 345 – foi
procedido em aproximadamente trinta segundos.
Figura 23 – Carregamento dos dados para uma colecção
ISEP – DEI
64
IMDB – Sistema de Indexação
BTrees no SGBdoc
Na figura seguinte ilustram-se os dados obtidos a partir do AS/400, a tabela
PESSOAS com os campos referidos anteriormente (NAME, AGE, BTHDATE e
GENDER).
Figura 24 – Lista de dados obtidos a partir do AS/400
Na figura apresenta-se, além do já referido carregamento dos dados, no texto
seleccionado um ciclo para a obtenção da pessoa – “ZE MANUEL TESTE”. Neste ciclo
posicionamo-nos na primeira posição da colecção ALLPERSONS (função MOVEFIRST)
e depois vamos percorrendo a colecção (função MOVENEXT) e comparando o valor
actual com o valor pretendido. Era isto que poderíamos fazer antes de termos indexação.
Poderemos verificar (no painel do quanto inferior direito) que esta pesquisa demorou
aproximadamente setecentos milésimos de segundos.
ISEP – DEI
65
IMDB – Sistema de Indexação
BTrees no SGBdoc
Figura 25 – Obter um registo não usando indexação
5.2 Inserção de funções da árvore no SGBdoc
O programa de árvores balanceadas que estudamos (“BTrees ++”) era ideal
para o que desejávamos executar no SGBdoc, no entanto encontramos uma pequena
dificuldade, que era o facto de a leitura dos dados ser feita do disco rígido (ficheiro) e a
sua escrita dos dados depois de manipulados também seria executada no disco. Como os
dados do SGBdoc eram manipulados em memória seria necessária uma alteração no
referido procedimento, ou seja, em vez da abertura de uma b-tree receber um ficheiro de
leitura seria um buffer de dados e, como é óbvio, os dados depois de manipulados
seriam também escritos no referido buffer.
Contudo, para poder trabalhar com um buffer, tivemos de fazer novas funções de
escrita no ficheiro, assim como, variáveis que nos permitissem retornar a posição actual
do buffer e o tamanho deste.
ISEP – DEI
66
IMDB – Sistema de Indexação
BTrees no SGBdoc
Era então, necessário o desenvolvimento de funções de mapeamento do SGBdoc
para as árvores binários, para um melhor esclarecimento atentar na tabela seguinte.
Ainda teriam de ser desenvolvidas novas funções, relacionado com o facto de podermos
obter a posição de uma colecção e posicionamento numa colecção (ver 5.2.3).
Função SGBdoc
lps_f_Idx_Open
Função BTrees
Nome para invocação
++
externa
bOpen
IDX_OPEN
Observações
Abertura de uma
nova indexação a
partir
de
um
buffer,
que
estivesse
se
nulo
seria criado um
novo
lps_f_Idx_Save
I2s_Save
IDX_SAVE
Função que seria
desenvolvida
no
intuito de colocar
todos
os
dados
existentes
no
buffer para um
outro
buffer
passado
por
parâmetro
lps_f_Idx_Close
bClose
IDX_CLOSE
Fechar
uma
indexação
lps_f_Idx_Insert
bInsertKey
IDX_INSERT
Inserir uma nova
chave na árvore
lps_f_Idx_Delete bDeleteKey
IDX_DELETE
Remover
um
elemento
da
árvore
lps_f_Idx_Find
bFindKey
IDX_FIND
Pesquisa de uma
chave na árvore
lps_f_Idx_First
ISEP – DEI
bFindFirstKey
IDX_FIRST
Procura
a
67
IMDB – Sistema de Indexação
BTrees no SGBdoc
primeira chave da
árvore
lps_f_Idx_Last
bFindLastKey
IDX_LAST
Pesquisa a última
chave da árvore
lps_f_Idx_Next
bFindNextKey
IDX_NEXT
Pesquisa
a
próxima chave da
árvore
(em
relação à posição
onde
nos
encontramos
no
buffer)
lps_f_Idx_Prev
bFindPrevKey
IDX_PREV
Pesquisa a chave
anterior da árvore
(em
relação
à
posição onde nos
encontramos
no
buffer)
Tabela 7 – Mapeamento das funções de BTree ++ para o SGBdoc
De seguida iremos tentar exemplificar de um modo mais prático de como foi
efectuada a função lps_f_Idx_Open, as outras foram efectuadas de modo análogo.
No SGBdoc, existem determinadas regras que devem ser seguidas para
podermos acrescentar uma nova função, a saber:
o Primeiramente é necessário acrescentar uma entrada numa tabela que
contém todas as funções assim como o seu retorno, para o exemplo da
tabela que se segue,
Retorno
Nome da função
Real
lps_f_Idx_Open
Tabela 8 – Associar um retorno a uma função do SGBdoc
seria necessário acrescentar a seguinte entrada
{ lps_t_Real,
ISEP – DEI
lps_f_Idx_Open }
68
IMDB – Sistema de Indexação
o Posteriormente
BTrees no SGBdoc
teremos
que
associar
o
nome
da
função
(lps_f_Idx_Open), acrescentando mais uma entrada, sendo esta um
incremento em relação a uma suposta função anterior como demonstra na
figura o texto marcado a negrito (exemplo para o lps_f_Idx_Open)
#define ANTERIOR
1
#define TESTE
ANTERIOR + 1
#define LPS_F_IDX_OPEN
LPS_F_DESCRIBECMD + 1
Figura 26 – Exemplo de incrementação de uma função no SGBdoc
o Por último teremos que inserir uma entrada para configurar o
comportamento da função. Atentar na tabela que se segue.
Descrição
Nome Externo
Nome
abreviada
mapear
à
Valor do Exemplo
para IDX_OPEN
função
correspondente
(lps_f_Idx_Open)
Código de Identificação
Código
único
de 10630
identificação da função
Número de caracteres do Número de caracteres que o 8
Número Externo
Prioridade
nome externo contém
Prioridade de invocação da 0
função
Retorno
Número de parâmetros
Retorno da função
lps_t_Real
Número de parâmetros que 3
a função contém (máximo
de oito parâmetros
Descrição de cada
Descrição
parâmetro8
parâmetro
8
de
cada lps_t_Bin_Ref,
existente
lps_t_Real,
na lps_t_Real_Ref, 0, 0, 0, 0, 0
Os parâmetros não existentes têm descrição “0” (zero).
ISEP – DEI
69
IMDB – Sistema de Indexação
BTrees no SGBdoc
função, num máximo de
oito parâmetros
Tabela 9 – Descrição dos parâmetros de uma função a inserir numa dada tabela do
SGBdoc de modo a definir o comportamento da função
O exemplo que se segue ilustra a entrada efectuada para o exemplo que
estamos a abordar:
{ "IDX_OPEN", 10630, 8, 0, lps_t_Real, 3, { lps_t_Bin_Ref, lps_t_Real, lps_t_Real_Ref, 0, 0, 0, 0, 0}}
De seguida apresentamos um pouco do código exemplo que introduzimos para o
mapeamento da função bOpen, na criação, como é lógico, da função lps_f_Idx_Open.
Como já descrito mais à frente (ver 5.2.2) e também anteriormente (ver capítulo
anterior - 4.1.3), a obtenção dos parâmetros era feito de um modo inverso com
demonstras o código que se segue; p1, significa o primeiro parâmetro, embora
possamos verificar que é o último a obter; por sua vez, p3, será o terceiro e último
parâmetro, no entanto, verificamos no código que é o primeiro parâmetro obtido.
Posteriormente à obtenção dos parâmetros verificamos no código à função
mapeada – bOpen - e a respectiva passagem dos valores obtidos por parâmetro numa
estrutura interna (bOpenType).
/*
Abre um índice com base num campo binário
Parametros de entrada
BIN_REF -> buffer com o indice
NUM -> tamanho da chave
Parametros de saida
NUM_REF -> handle do indice
Retorno
-> 0 se conseguiu abrir o indice
*/
if( lps_i_PopRef(&(p_rtAux->rtStack), &p3) == lps_TRUE )
/* NUM_REF ->Handle do Indice */
if( lps_i_PopDoubleVal(&(p_rtAux->rtStack), &p2) == lps_TRUE )/* NUM ->Tamanho da chave */
if( lps_i_PopRef(&(p_rtAux->rtStack), &p1) == lps_TRUE )/* BIN_REF -> buffer com o indice */
if( lps_i_PopWH(&(p_rtAux->rtStack), &wh) == lps_TRUE )/* BIN_REF -> buffer com o indice
*/
…
ISEP – DEI
70
IMDB – Sistema de Indexação
BTrees no SGBdoc
/*Construção do Tipo de abertura da árvore balanceada*/
bOpenType info;
info.iName = p1;
info.len = len(p1);
info.keySize = p2;
bOpen(info, &handle);
Figura 27 – Exemplo do código lps_f_Idx_Open
Apenas se efectuou uma descrição mais pormenorizada de como foi efectuada a
função lps_f_Idx_Open, já que, como foi referido, todas as outras têm um procedimento
análogo.
5.2.1 Descrição das funções elaboradas
Para uma melhor compreensão do que foi implementado e da tabela acima
descrita irá fazer-se de seguida uma descrição das funções elaboradas.
5.2.1.1 Abertura de indexação - lps_f_Idx_Open
Através da obtenção dos parâmetros, irá proceder-se à validação do buffer que é
passado por parâmetro, e alocar memória para colocar esses mesmo dados do buffer
num buffer temporário, caso existam. Posteriormente é invocada a função bOpen que
fará a abertura de uma nova árvore. Também nesta função é importante o parâmetro que
determina o tamanho das chaves.
5.2.1.2 Guardar dados - lps_f_Idx_Save
Para guardar os dados primeiro tivemos que efectuar uma função que nos
permitisse saber qual o tamanho dos dados existentes, para esta eventualidade elaborouse a função – I2s_Ptr_Len.
ISEP – DEI
71
IMDB – Sistema de Indexação
BTrees no SGBdoc
Como já descrito anteriormente, o programa original apenas escrevia os dados
para disco, no nosso caso desejávamos que escrevesse num buffer, para tal
implementou-se a função I2s_Save.
Então, depois da obtenção do parâmetro é invocada a função I2s_Ptr_Len,e
posteriormente a função I2s_Save que nos retornará os dados gravados num buffer.
5.2.1.3 Fecho da indexação - lps_f_Idx_Close
Apenas é necessário passar por parâmetro o endereço do handle da árvore a
fechar, e depois de obtido esse parâmetro é invocada a função bClose.
5.2.1.4 Inserção de uma nova chave - lps_f_Idx_Insert
Mais uma vez torna-se necessário a obtenção dos parâmetros, é posteriormente
invocada a função bInsertKey que se encarregará da inserção da nova chave na árvore.
5.2.1.5 Eliminação de uma chave - lps_f_Idx_Delete
Posteriormente à obtenção dos parâmetros, irá proceder-se à invocação da
função bDeleteKey que fará a eliminação da chave na árvore.
5.2.1.6 Pesquisa de uma chave - lps_f_Idx_Find
Posteriormente à obtenção dos parâmetros, irá proceder-se à invocação da
função lps_f_Idx_Find que retornará a chave encontrada, se for caso disso.
5.2.1.7 Posicionar no início - lps_f_Idx_First
Posteriormente à obtenção dos parâmetros, irá proceder-se à invocação da
função lps_f_Idx_First que retornará a chave da primeira posição da árvore.
ISEP – DEI
72
IMDB – Sistema de Indexação
BTrees no SGBdoc
5.2.1.8 Posicionar no fim - lps_f_Idx_Last
Posteriormente à obtenção dos parâmetros, irá proceder-se à invocação da
função lps_f_Idx_Last que retorna a chave que se encontra na última posição da árvore.
5.2.1.9 Posicionar próximo - lps_f_Idx_Next
Posteriormente à obtenção dos parâmetros, irá proceder-se à invocação da
função bDeleteKey que retornará a próxima posição na árvore em relação à que nos
encontramos actualmente.
5.2.1.1 Posicionar anterior - lps_f_Idx_Prev
Posteriormente à obtenção dos parâmetros, irá proceder-se à invocação da
função lps_f_Idx_Prev que retornará a posição anterior na árvore em relação à que nos
encontramos actualmente.
5.2.2 Problemas encontrados no desenvolvimento
O mapeamento das funções é ainda penoso já que os parâmetros recebidos em
cada uma das funções vêm pela ordem inversa (para um melhor esclarecimento atentar
no capítulo 4.1.3, referente ao SGBdoc, relacionado com o LPS). Por outras palavras, os
parâmetros encontram-se numa pilha (LIFO – “Last In First Out” – o último a entrar
será o último a sair), ou seja, o último parâmetro será aquele que iremos obter primeiro
e assim sucessivamente até ao primeiro parâmetro que será o último a obter. Isto,
porque o SGBdoc usa a linguagem LPS que por sua vez usa uma stack na
implementação. Além desta dificuldade ainda teremos que transformar os dados
recebidos por parâmetros em dados legíveis (ou seja, interpretáveis) pelas funções que
iremos invocar.
ISEP – DEI
73
IMDB – Sistema de Indexação
BTrees no SGBdoc
Depois de obtidos os dados também teremos que colocar o retorno na pilha, e os
valores que foram passado por referência terão que ser actualizados de uma forma
particular (de acordo com as imposições do SGBdoc).
5.2.3 Funções de posicionamento
Além das referidas funções de mapeamento com a árvore balanceada foi
também necessário a construção de duas funções, para melhor compreensão atentar na
tabela seguinte.
Função
Nome para
Parâmetros
Observações
Colecção
Permite-nos obter a
invocação
externa
lps_f_Get_Pos
GETPOS
posição em que nos
encontramos numa
dada colecção
lps_f_Goto_Pos
GOTOPOS
Colecção e posição
Permite posicionar
numa colecção,
segundo uma dada
posição
Tabela 10 – Funções de posicionamento no SGBdoc
5.2.4 Guardar árvore e reabri-la
Existe também uma funcionalidade importante no contexto das funções da
árvore balanceada (atentar Tabela 7 – Mapeamento das funções de BTree ++ para o
SGBdoc), se verificarmos a função bOpen, verificamos que podemos passar um buffer
por parâmetro. Este buffer quando passado sem nenhum conteúdo (modo mais normal),
é construída uma árvore de novo, contudo, se passarmos algo no referido buffer existe
uma tentativa de construção de árvore a partir desse mesmo conteúdo.
ISEP – DEI
74
IMDB – Sistema de Indexação
BTrees no SGBdoc
Para o buffer conter algo válido (construção de uma árvore válida), é necessário
que primeiramente esse buffer seja actualizado a partir da invocação do método do
SGBdoc “lps_f_Idx_Save”.
Figura 28 – Ilustração de como guardar um árvore (idx_save) e reabrir a árvore guardada
Se atentarmos na imagem anterior podemos visualizar (três instruções acima do
texto seleccionado) a invocação da função IDX_SAVE que guarda os dados
anteriormente trabalhados num campo binário (bin_idx), é este o campo posteriormente
usado como buffer na função IDX_OPEN (uma linha antes do texto seleccionado). No
texto seleccionado tenta-se verificam-se resultados coerentes com os dados existentes
no binário/buffer (bin_idx).
5.3 Resultado final
Neste capítulo tentar-se-á ilustrar os exemplos obtidos e, a valorização que o
sistema de indexação proporciona ao SGBdoc.
ISEP – DEI
75
IMDB – Sistema de Indexação
BTrees no SGBdoc
5.3.1 Exemplo de navegação com BTrees
No seguimento da linha anterior tentaremos exemplificar a navegação entre
registos, mas desta vez já usando árvores balanceadas, de modo a se conseguir provar a
eficácia deste método.
É criado um novo índice (nova árvore balanceada) com a função IDX_OPEN.
Depois no texto seleccionado representa-se um ciclo onde todas as chaves existentes na
colecção (aproximadamente 125 000) são inseridas (através da função IDX_INSERT) no
índice previamente aberto, este processo ocorreu em aproximadamente um segundo e
meio (como nos mostra o painel inferior direito).
Figura 29 – Carregar dados na b-tree
No écran que se segue pode-se verificar, no painel inferior direito, que o tempo
de uma pesquisa (IDX_FIND) na árvore não é distinguível ao milésimo de segundo.
ISEP – DEI
76
IMDB – Sistema de Indexação
BTrees no SGBdoc
Como verificamos no exemplo é pesquisada a mesma pessoa (“ZE MANUEL TESTE”)
que já foi usada numa procura sem indexação (ver 5.1.1).
Figura 30 – Pesquisa de um valor na árvore balanceada
Por último, e no seguimento do écran anterior, verificamos na imagem seguinte
que no texto seleccionado nos posicionamos na primeira posição (função MOVEFIRST),
depois a colecção ALLPERSONS é colocada na posição pretendida com o valor que a
variável valor continha. Por último listamos o nome da posição actual da colecção
(ACTUAL(ALLPERSONS).NAME) para ilustrar a realidade da pesquisa.
Verifica-se que este posicionamento apenas demorou cinquenta milésimos de
segundo.
ISEP – DEI
77
IMDB – Sistema de Indexação
BTrees no SGBdoc
Figura 31 – Posicionar na colecção usando indexação
5.3.2 Comparação de resultados
Verificamos, na figura acima, que o tempo de execução/pesquisa do valor
apenas demorou cinquenta milésimos de segundo e a procura na árvore (IDX_FIND)
nem sequer é notória temporalmente ao nível do milésimo de segundo. Se antentarmos
em 5.1.1, verificamos que uma pesquisa com o mesmo efeito demorou
aproximadamente setecentos milésimos de segundo, ou seja, o comportamento
melhorou substancialmente.
5.4 Inovações futuras
Uma das inovações que futuramente pode vir a ser implementada é uma
hierarquia de indexação, como mostra a figura que se segue.
ISEP – DEI
78
IMDB – Sistema de Indexação
BTrees no SGBdoc
Idade
Sexo
BI
Figura 32 – Hierarquia de indexação
Na figura anterior tentou-se representar, como exemplo, a indexação em
primeira instância pela idade, posteriormente pelo sexo e em último lugar pelo bilhete
de identidade. Esta indexação hierárquica é algo a desenvolver num futuro próximo.
Existem também outras inovações futuras que será o de a árvore balanceada
permitir a inserção de chaves duplicadas, que poderia ser através de , por exemplo, uma
configuração (aceitando ou não essas chaves duplicadas).
ISEP – DEI
79
IMDB – Sistema de Indexação
6.
Conclusões
Conclusões
O assunto tratado no relatório é já bastante importante no mercado de trabalho,
no entanto, julgo que é ainda cedo para este assunto atingir o seu apogeu, por outras
palavras, IMDB virá a tornar-se muito mais importante no futuro, não só pelo
crescimento exponencial de informação, mas também pelas respostas rápidos (quase em
tempo real) que por vezes desejamos obter.
É também importante referir o quanto este tema pode ser vasto, e que o relato
deste relatório, deste projecto, é bastante diminuto quando comparado com a quantidade
de tecnologias que aqui são misturadas (bases de dados, estruturas de dados complexas
– diversas formas de árvore –, e como é óbvio o próprio conceito de IMDB).
Além dos referidos conceitos abordados há também que evidenciar que este
tema – IMDB – necessita ainda de muita investigação, de modo a torná-lo realmente
importante em todo e qualquer sistema. Questões como a capacidade de hardware
necessárias para a implementação de um sistema com quantidades de dados em
crescimento exponencial, podem não ficar ainda respondidas no presente momento,
ainda há um longo caminho a percorrer.
Contudo, foi extremamente importante o contacto com esta tecnologia, mais
importante ainda pelo facto de algo prático ter sido implementado, que virá a ser usado
a nível empresarial, o que nos leva a pensar que o “mundo” IMDB não é utópico.
Também foi possível provar com o sistema de indexação desenvolvida um
melhoramento substancial da pesquisa a dados.
Os objectivos a que me propôs foram na sua maioria atingidos, já que, o
desenvolvimento de uma ferramenta que fizesse a indexação dos dados em memória foi
conseguida, estudou-se o IMDB (algumas das aplicações já existentes), também se
estudaram árvores (principalmente as balanceadas – BTree++).
ISEP – DEI
80
IMDB – Sistema de Indexação
Conclusões
Deve-se concluir que o projecto revelou uma área muito importante, mas ainda
muito pouco estudada, o que revela a necessidade deste tipo de sistemas.
Tal como o projecto elaborado no bacharelato, também este projecto, embora
com uma abordagem mais teórica, permitiu-me alcançar conhecimentos importantes,
não só na conclusão da minha vida académica, mas para a minha carreira profissional.
ISEP – DEI
81
IMDB – Sistema de Indexação
Glossário e linguagem específica
Glossário e linguagem específica
A
ActiveX – Uma tecnologia usa várias linguagens para aceder a dados em que se
usam modelos de objectos incorporadas em objectos de conexão a dados, objectos
para execução de comandos, objectos Recordset e colecções dentro destes objectos.
O modelo dos objectos do ADO fornece facilidades para uso de objectos,
propriedades, e métodos para criação de scripts que podem aceder a dados de uma
base de dados.
ASP – Active Server Page, é uma ambiente onde se combinam componentes como
páginas HTML, scripts e ActiveX para criar aplicação Web.
D
DB2 – Base de dados existente num sistema AS/400 da IBM. É uma base de dados
bastante poderosa e muito bem vista no mercado.
Data Sources – Também conhecido pela sigla DSN, e contém o registo de toda a
informação necessária para conectar a uma dada base de dados, é usado no ODBC.
DataTable – Usado pelo DataSet – Microsoft - , representa toda a informação de
uma tabela. O esquema da informação de uma tabela é definido pelo
DataColumnCollection, que constrói a tabela. Quando duas tabelas estão
relacionadas entre si, o objecto DataRelation usa um DataColumn de cada tabela
para relacionar dados.
DataRelation – Usado pelo DataSet – Microsoft - , Relaciona múltiplas tabelas e
facilita a navegação entre os registos de tabelas relacionadas. Quando tentamos
aceder a registos relacionados, o objecto DataRelation é passado para os métodos
GetChildRows e GetParentRow. É o objecto DataRelation que determina quais são
as tabelas relacionadas a pesquisar, de modo a retornar os dados associados à
invocação dos métodos GetChildRows ou GetParentRow.
ISEP – DEI
82
IMDB – Sistema de Indexação
Glossário e linguagem específica
DataRow – Usado pelo DataSet – Microsoft - , Representa a informação de um
único registo. Os referidos métodos que retornam os dados relacionados
(GetChildRows e GetParentRow), são membros do objecto DataRow.
DataColumn – Usado pelo DataSet – Microsoft - , Representa um campo, que pode
definir o esquema para uma DataTable. Quando duas tabelas são relacionadas o
objecto DataRelation usa o valor das colunas de cada tabela para relacionar dados,
DataApdater – Usado pelo DataSet – Microsoft - , É um elo de ligação entre a base
de dados e o DataSet e vice-versa.
DLL – É um ficheiro que contém uma ou mais funções que são compiladas, e
guardadas separadamente dos processos que os usam. Em Windows, o sistema
operativo mapeia as DLL (Dynamic-link Libraries) para o espaço de memória do
processo, no início da aplicação ou enquanto esta a correr. Estas ficheiro tem
extensão .DLL.
E
EJB – Enterprise Java Beans, é uma arquitectura de componentes para
desenvolvimento e instalação de aplicações de empresas distribuídas baseada sobre
componentes. As aplicações que utilizam a arquitectura Enterprise Java Beans são
evolutivas, transaccionais e seguras. Essas aplicações podem ser escritas uma vez e
instaladas sobre todas as plataformas de servidor que suportarem as especificações
Enterprise Java Beans.
J
Java – Linguagem de programação orientada a objectos muito famosa pela
produtividade que os programadores conseguem alcançar.
JDBC – É no fundo o “ODBC do Java”, já que este é um encapsulamento do
ODBC.
L
ISEP – DEI
83
IMDB – Sistema de Indexação
Glossário e linguagem específica
LPS – Linguagem para seguros, linguagem de programação da I2S, com funções
específicas relacionadas com o mundo do negócio das seguradoras.
LDTD – Linguagem de definição de tipos de documentos, que permite uma forma
simples e amigável de definir tipos de documentos
LMD – Linguagem de manipulação de documentos, permite que os utilizadores
possam criar documentos e trabalhar com os documentos, ou seja, alterar os seus
objectos de dados, invocar métodos, e executar comandos LPS sobre documentos.
LIB – É conhecido como o comum formato de ficheiros (Common Object File
Format - COFF), é gerado por ferramentas da Microsoft (em 32-bit), para as
normais e para as bibliotecas importadas. A extensão destes ficheiros é .LIB.
M
multi-thread – Processamento/computação de dados paralelo, ou seja, ter dois
processos a executar paralelamente.
O
OLE DB – Uma arquitectura de bases de dados que fornece uma acesso universal a
dados com integração sobre a rede de uma empresa, desde o servidor a um
computador de rede, independentemente do tipo de dados. OLE DB é um suporte
genérico e tem uma estratégia eficiente para aceder a dados através do ODBC,
porque permite aceder a mais tipos de dados e é baseado no formato COM
ODBC – Open Database Connectivity is an industry standard and a component of
Microsoft Windows Open Services Architecture (WOSA). The ODBC interface
makes it possible for applications to access relational data stored in almost any
database management system (DBMS).
Open Source – Código de livre uso, embora a modificação desse mesmo código é na
maior parte dos casos interdita, a sua distribuição tem regras muito particulares.
ISEP – DEI
84
IMDB – Sistema de Indexação
Glossário e linguagem específica
Oracle – É também uma base de dados muito usada nos dias que correm.
R
RecordSet – Agrupa um conjunto de resultados de resultados obtidos depois de uma
dada pesquisa a uma ou mais tabelas.
S
SAUD – Este conjunto de funções permite o acesso a bases de dados através da
linguagem LPS.A LPS acede a bases de dados externas através da biblioteca SAUD.
As funções que permitem esta funcionalidade da LPS estão implementadas como
UDFs numa DLL.
SQL Server – É um gestor de bases de dados, sobre o qual a Microsoft detém os
direitos. Tem como função a gestão de bases de dados de várias servidores, assim
como, a gestão das respectivas tabelas.
T
Tabelas de hash – Um conjunto de chaves numéricas para permite o fácil acesso,
localização de um registo numa tabela, ou um ponto inicial para pesquisar um
registo associado à chave. Se a chave for alfanumérica , então a cada caracter é
associado um valor numérico para permitir manipulação numérica.
U
UNICODE – é a forma como os dados são representados (o texto – os bits e os
bytes), sendo UNICODE permite que ao mudarmos de plataforma (AS400,
Windows, UNIX...), continuando a aceitar quase todo o tipo de caracteres é baseado
em códigos de 16 bits.
X
XML – “Extensive Markup Language”, é um tipo de documentos muito usuais hoje
em dia, que têm como função descrever os dados de uma forma estruturada,
tornando as buscas mais rápidas, já que, é organizado de uma forma hierárquica.
ISEP – DEI
85
IMDB – Sistema de Indexação
Referências
Referências
[1] http://www.public.asu.edu/~peterjn/btree
[2] Polyhedra In-Memory Database, OSE Systems, www.ose.com
[3] http://msdn.microsoft.com
[4] http://www.borland.com/
http://www.sourceforge.net/
http://www.ibm.com/
[5] SQL-IMDB White Paper, QuiLogic
http://www.quilogic.com/home.htm
[6] http://www.quilogic.com/home.htm
[7] http://lcm.csa.iisc.ernet.in/dsa/node2.html
[8] T-Tree or Btree: Main Memory Database Index Structure Revisites.
Hongjun Lu, Yuet Yeung Ng, Zenping Tian.
http://www.public.asu.edu/~peterjn/btree
A general solution of the n-dimensional B-Tree problem, Michael
Freeston.
Main-Memory Index Structures with
fixed size partial keys. Philip
Bohannon, Peter MacIIRoy, Rajeev Rastoji.
[9]
ISEP – DEI
Manual do CODOMO – I2S
86
IMDB – Sistema de Indexação
Bibliografia
Bibliografia
o http://www.microsoft.com
o http://msdn.microsoft.com
o http://www.fit.qut.edu.au/~maire/baobab/baobab.html
o http://www.public.asu.edu/~peterjn/btree
o Apontamentos de Linguagens de Programação I, 1º ano de do curso de
Engenharia Informática do Instituto Superior de Engenharia do Porto.
o T-Tree or Btree: Main Memory Database Index Structure Revisites. Hongjun
Lu, Yuet Yeung Ng, Zenping Tian.
o Manual do CODOMO – I2S
o Heitlinger ,Paulo - Guia Prático do XML, Centro Atlântico
o A general solution of the n-dimensional B-Tree problem, Michael Freeston.
o Main-Memory Index Structures with
fixed size partial keys. Philip
Bohannon, Peter MacIIRoy, Rajeev Rastoji.
ISEP – DEI
87
IMDB – Sistema de Indexação
Índice Remissivo
Índice Remissivo
.
.NET.................................................................................................................... 19, 20, 21
A
ActiveX ................................................................................................... 19, 23, 24, 27, 82
ADO............................................................................................ 19, 20, 21, 82, 94, 96, 97
ADT .......................................................................................................................... 30, 31
Árvores binárias ................................................................................ 13, 24, 31, 63, 66, 76
AVL .................................................................................................................... 30, 31, 33
B
b-tree ......................................................................... 33, 34, 35, 36, 38, 39, 40, 42, 43, 66
BTrees ................................................................. 12, 14, 15, 30, 35, 39, 63, 64, 66, 67, 76
BTrees ++ ................................................................................... 12, 14, 15, 30, 63, 66, 67
C
CODOMO..................................................... 13, 46, 47, 49, 55, 56, 57, 58, 59, 60, 86, 87
Colecções ............ 20, 21, 42, 46, 48, 49, 51, 52, 54, 61, 63, 65, 67, 74, 82, 94, 95, 96, 97
D
DataAdapter ........................................................................................................ 20, 21, 22
DataColumn .............................................................................................................. 82, 83
DataColumnCollection ................................................................................................... 82
DataRelation ............................................................................................................. 82, 83
DataRow ......................................................................................................................... 83
DataSet.................................................................................. 19, 20, 21, 22, 23, 28, 82, 83
DataTable............................................................................................................ 20, 82, 83
Documento............................................................................ 14, 45, 46, 47, 48, 54, 56, 92
ISEP – DEI
88
IMDB – Sistema de Indexação
Índice Remissivo
H
Hierarquia ......................................................................................... 19, 28, 48, 78, 79, 85
HTML ............................................................................................................................. 82
I
I2S ....................................................... 9, 10, 12, 14, 15, 45, 50, 55, 60, 62, 84, 86, 87, 91
IMDB ...................................................... 14, 15, 18, 19, 23, 24, 25, 26, 27, 28, 29, 80, 86
Indexar ................................................................................................ 1, 10, 14, 28, 51, 54
Internet .............................................................................................. 12, 16, 18, 28, 94, 97
J
Java ............................................................................................................... 19, 22, 28, 83
L
LDTD...................................................................................................... 47, 49, 57, 58, 84
LMD.............................................................................................................. 47, 57, 58, 84
LPS........................................ 46, 47, 50, 55, 57, 60, 67, 68, 69, 71, 72, 73, 74, 75, 84, 85
M
Memória... 1, 10, 12, 13, 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 33, 35,
42, 45, 46, 48, 58, 59, 66, 71, 80, 83, 86, 87
MySQL ........................................................................................................................... 27
R
RAM ....................................................................................................... 18, 27, 29, 33, 35
Recordset .................................................................................... 20, 21, 82, 85, 94, 95, 96
red-black tree .................................................................................................................. 33
S
SAUD............................................................................................................ 55, 58, 60, 85
SGBdoc .. 10, 12, 13, 14, 15, 30, 45, 46, 48, 49, 50, 51, 53, 55, 56, 60, 61, 63, 65, 66, 67,
68, 69, 70, 73, 74, 75
ISEP – DEI
89
IMDB – Sistema de Indexação
Índice Remissivo
X
XML.............. 12, 13, 14, 16, 19, 20, 21, 23, 25, 26, 27, 28, 48, 59, 85, 87, 92, 93, 94, 97
ISEP – DEI
90
IMDB – Sistema de Indexação
Anexos
Anexos
A.1 I2S, S.A. – Informática Sistemas e Serviços
Fundada em 1984 por cinco elementos do corpo docente do curso de Informática
do Instituto Superior de Engenharia do Porto, a I2S começou por ser uma empresa de
formação com o objectivo de vir a tornar-se posteriormente numa entidade oficial de
ensino superior na área das novas tecnologias e sistemas de informação.
Começou também, por desenvolver software genérico na área de gestão como a
contabilidade, a facturação, a gestão de stocks, entre outros.
Em 1989, a I2S aceitou a proposta da REAL Companhia de Seguros, SA., que
consistia no desenvolvimento e na manutenção dum conjunto de soluções informáticas
eficazes de forma a responder às necessidades dos agentes de seguros. Em
contrapartida, essa companhia deteria 51% das acções da I2S e o restante dividido pelos
sócios e por alguns funcionários da I2S.
Beneficiando do lançamento pela IBM do sistema informático AS/400, em 1988,
a I2S passou, quase sem concorrência, a liderar o mercado nacional de soluções
informáticas para a actividade seguradora.
Em 1996, devido ao alargamento dos negócios para o estrangeiro, esta empresa
procedeu a um aumento do capital social de 50.000 cts para 150.000 cts, a partir de
reserva de capital e duma alteração no quadro de distribuição dos títulos das acções,
onde a Real Companhia de Seguros, SA. cedeu grande parte da sua quota à Partinvest
(46,6%). Deste modo, a I2S reforça a sua imagem deixando de pertencer
maioritariamente a uma companhia de seguros.
ISEP – DEI
91
IMDB – Sistema de Indexação
Anexos
A.2 XML
XML é o formato universal para partilha de dados entre aplicações. O conceito
XML é simples e as possibilidades são inúmeras. Documentos em formato XML podem
conter bases de dados, transacções comerciais, catálogos de produtos, gráficos
vectoriais, equações matemáticas, fórmulas químicas, relatórios financeiros. Dados
bibliográficos, anúncios publicitários, enfim, quase todos os dados estruturados em
texto.
A flexibilidade da XML provém da faculdade de transpostar variadíssimos tipos
de dados e de mantê-los estruturalmente coesos. A XML serve magnificamente para a
estruturação de qualquer tipo de dados para descrevê-los sem dúvidas ou ambiguidades
em formato de texto.
Figura 33 – Exemplo de documento XML
Isto porque a XML permite definir a linguagem de marcação mais adequada a
um tipo de documentos.
ISEP – DEI
92
IMDB – Sistema de Indexação
Anexos
A eXtended Markup Language (XML) rapidamenre adquiriu grande
popularidade entre os peritos informáticos. Um factor determinante para o rápido
avanço da XML é o suporte garantidos por empresas líderes do mercado do software –
empresas como a Microsoft, Oracle, SAP, Sofware AG, IBM, SUN – entre outras...
A XML é uma tecnologia fundamental da nova plataforma .NET da Microsoft.
Um outro factor determinante do êxito da XML está fundamentada na sua
própria natureza: o formato XML tornou-se, em pouco tempo, um formato universal
para a partilha de dados entre aplicações. O conceito e a filosofia da XML são simples,
os seus derivados e as ossíveis aplicações são inúmeras, como já mencionado
anteriormente.
Onde antes existiam bastiões proprietários, esta nova linguagem trouxe uma
grande simplificação para a transferência e para a partilha de dados. Com a metalinguagem XML facilmente se definem linguagem de marcação para partilha de
informação entre aplicações baseadas em sistemas incompatíveis. Incompatíveis, por
trabalhar com formatos proprietários.
Convém salientar de antemão qua a partilha de dados muito estruturados entre
computadores heterogéneos figura entre as aplicações principais da XML. “A aplicação
mais importante da XML nos próximos anos será a comunicação de computador a
computador, ou seja, a partilha de dados – e não o diálogo entre homem e o
computador”, como aformou Simon Phipps, da IBM.
ISEP – DEI
93
IMDB – Sistema de Indexação
Anexos
Figura 34 – Permuta de dados entre dois sistemas distintos com XML
A integração fácil entre aplicações de uma empresa – ou de empresas diferentes
– está sempre entre as grandes potencialidades da XML.
A.3 ADO
ADO foi desenhado com o intuito de permitir aos utilizadores por programação
aceder, editar e actualizar data sources atravé do interface OLE DB. A maneira mais
comum para usar o ADO é fazer uma ou mais pesquisas a uma tabela de uma base de
dados relacional, retornando e mostrando os dados numa aplicação, e permitir ao
utilizador fazer alterações sobre a informação obtida, assim como, guardar a informação
modificada. Outras tarefas que podemos fazer por programação com o ADO são:
o Pesquisar numa base de dados usando SQL e mostrando os resultados
o Aceder a informação que se encontra num ficheiro na Internet
o Gerir mensagens e directórios num sistema de e-mail.
o Guardar informação de uma base de dados para um ficheiro XML.
o Executar comando com o auxílio do XML, e retornando uma stream
XML.
o Guardar dados binários para uma stream XML.
o Permitir aos utilizadores que rever e alteraros dados de tabelas de bases
de dados.
o Criar e reusar comandos parametrizados sobre uma base de dados
o Executar stored procedures.
o Criar dinâmicamente uma estrutura, chamada Recordset, para gerir,
navegar e conter os dados.
o Operações de transacção
o Filtrar e ordenar dados baseado-se num critério, isto em tempo de
execução
o Criar e manipular resultados hierárquicos de uma base de dados
ADO requer apenas nove objectos e quatro colecções para fornecer todas as suas
funcionalidades, atentar na tabela seguinte.
ISEP – DEI
94
IMDB – Sistema de Indexação
Anexos
Objectos e colecções
Objecto Connection
Descrição
Representa uma sessão única de um data source.
No caso dos sistemas cliente – servidor, pode ser
equivalente a uma conecção para um servidor
Dependendo
network.
da
funcionalidade
suportado pelo servidor, algumas colecções,
métodos
ou
propriedades
de
um
objecto
Connection podem não estar disponíveis
Objecto Command
Usado para definir uma commando específico,
como um commando SQL, executado sobre um
data source.
Objecto Recordset
Representa todos os registos obtidos de uma ou
mais tabela depois de executado um comando.
Todos os objectos Recorset consistem em registos
(linhas) e campos (colunas)
Objecto Record
Representa uma única linha de dados, ou de um
Recordset ou de um servidor. Este registo pode
representar um registo de uma base de dados ou
outro tipo de objecto como um ficheiro ou
directoria, dependento do servidor
Objecto Stream
Representa uma stream binário ou em formato de
texto. Po exemplo, um documento XM;L pode
ser carregado para uma stream através de um
comando ou através do retorno de alguns servidos
como resultado de uma pesquisa
Objecto Parameter
Representa um parâmetro ou argumentoassociado
a
um
objecto
Command,
baseado
na
parametrização de uma pesquisa ou de um stored
procedure
Objecto Field
Representa os dados de uma coluna com um tipo
de dados comum. Cada objecto Field corresponde
ISEP – DEI
95
IMDB – Sistema de Indexação
Anexos
a uma coluna num Recordset
Objecto Property
Representa as características de um objecto ADO
que é definido pelo servidor. Os objectos ADO
têm dois tipos de propriedades: built-in e
dinâmicas. As propriedades Built-in são as
propriedades
implementados
no
ADO
e
disponíveis para qualquer objecto. O objecto
Property é um repositório das propriedades
dinâmicas, definidas pelo servidor
Objecto Error
Contém detalhes sobre os erros ocorridos no
acesso a dados que dizem respeito a uma única
operação envolvendo o servidor
Colecção Fields
Contém todos os objectos Field de um Recordset
ou de um objecto Record
Colecção Properties
Contém todos os objectos Property para uma
instância específica de um objecto
Colecção Parameters
Contém todos os objectos Parameter de um
objecto Command
Colecção Errors
Contém todos os objectos Error criados na reposta
a uma única falha
Tabela 11 – Descriçãos dos objectos e colecções ADO
A figura que se segue ilustra melhor o enquadramento dos conceitos abordados.
ISEP – DEI
96
IMDB – Sistema de Indexação
Anexos
Figura 35 – Objectos e colecções ADO
A.4 .NET
Neste parte do anexo apenas se fará uma brave introdução acerca do que é o
.NET, já que, esta plataforma é bastante extensa e complexa, apenas se pretende uma
pequena compreensão teórica no âmbito do relatório. Para saber mais sobre esta
tecnologia consultar a página da .NET na microsoft – www.microsoft.com/net
O .NET é um componente do software Microsoft para conectar todo um
universo de informação, pessoas, sistemas e dispositivos. Este permite integração de
sofware através do use de servições XML Web: permitindo a conecção entre diferentes
aplicações, até via Internet.
Os produtos .NET que fazem a plataforma Microsoft, permite uma forma rápida
e eficiente de contruir, guardar, e utilizar de um modo segura e conectar a solução
usando serviços XML. Esta plataforma da Microsoft oferece uma gama de ferramentas,
aplicações cliente, serviços XML Web e os necessários servidos para conseguir obter
este universo conectado.
“.NET is Microsoft's platform for XML web services. XML web services allow
applications to communicate and share data over the Internet or an intranet, regardless
of operating system or programming language.”, esta é a definição da Microsoft sobre a
.NET. Permite-nos chegar, então, à conclusão que a plataforma .NET permite a partilha
de dados (Internet ou numa intranet), independemente do sistema operativo ou
linguagem que usarmos.
ISEP – DEI
97
IMDB – Sistema de Indexação
Anexos
Como já referido anteriormente, seria necessário consultar a página da Microsoft
para uma melhor compreensão do assunto; neste anexo apenas se transmite uma ideia
genérica.
ISEP – DEI
98
Download