Bases de Dados OO O caso do Object Store Gabriel David Faculdade de Engenharia da Universidade do Porto [email protected] BDOO - 0 Persistência Persistência em LPOO 1. Ficheiros do sistema operativo: texto estruturado ou registos sem apontadores só permite armazenar alguns tipos de objectos 2. Imagem da sessão: guardar toda a sessão, o estado dos objectos, as variáveis e o ambiente potencialmente ineficiente; difícil partilhar objectos concorrentemente. O objectivo é tornar a persistência ortogonal ao tipo de objectos. objectos persistentes, transacções, falhas e recuperação níveis de persistência dados locais a procedimentos dados que persistem durante uma transacção completa dados da sessão (várias transacções) como user-name e variáveis de ambiente dados que persistem para além da sessão: são os objectos que se guardam na BD e os únicos que são recuperáveis BDOO - 1 Persistência e BDOO Extensões persistentes - criar uma tabela SQL cria o tipo e a extensão - uma classe especifica o tipo e o comportamento; é útil, nas classes com muitas instâncias, considerar que a classe é o contentor de todas as suas instâncias e que há iteradores para navegar eficientemente nos objectos - métodos de lidar com extensões persistentes 1. ao criar uma instância de uma classe persistente guarda-se esta na extensão 2. objectos individuais podem ser declarados persistentes no momento da criação, por exemplo no próprio construtor new 3. usar uma operação explícita de escrita na BD persistente Persistência por atingibilidade (PS-Algol) - raiz do espaço de objectos: database é um objecto tuplo persistente - se pT é um objecto tuplo persistente, então cada atributo de pT é um objecto persistente - se pS é um objecto conjunto persistente então cada elemento de pS é persistente - em vez de uma só raiz podem existir várias raízes com nome a funcionar de pontos de entrada para o subespaço persistente respectivo Instâncias persistentes [Object Store] - independente de a classe ser ou não persistente - vários pontos de entrada BDOO - 2 Implementação da identidade Problema: tornar persistentes as referências [permitem construir espaços de objectos estruturados em grafos com partilha referencial] espaço transitório versus persistente - aumentar espaço endereçável — esquema de memória virtual com endereços de 32 bits e mecanismo de detectar referências para objectos não locais com transferência transparente [LOOM Smalltalk, Object Store] endereço versus indirecção • endereço pode ser - endereço de memória virtual - endereço de memória secundária - nome estruturado num ambiente distribuído • indirecção por - tabela em memória [Smalltalk inicial] - índice para objectos em memória secundária BDOO - 3 Endereço ou indirecção • Indirecção ' um passo extra relativamente a ter o endereço ' deixa mover o objecto (garbage collection) • Endereço ' usar directamente o endereço de memória virtual como apontador 1. representação dupla em memória e em disco, com conversão à medida que é necessária 2. armazém persistente organizado como uma memória virtual ' identificadores de registo: nº da página no disco + nº da linha; indirecção local; usado em sistemas relacionais ' identificadores estruturados: indicação do caminho até ao objecto, através de uma convenção de nomes; usado em sistemas distribuídos ' delegados (surrogates): identificadores únicos globais, gerados pelo sistema, independentes do nome, estado, tipo e endereço do objecto; requer indirecção na determinação do endereço BDOO - 4 Bases de dados OO Sumário Conceitos gerais Exemplo do ObjectStore) Arquitectura Criação de objectos Gestão da concorrência Colecções Perguntas Índices Associações BDOO - 5 Introdução ao ObjectStore ObjectStore é um SGBDOO que permite • criar e modificar objectos C++ (ou Smalltalk) em vez de tabelas, linhas e colunas • aceder aos dados com o mesmo formato em que existem na aplicação • • descrever, memorizar e pesquisar dados complexos memorizar persistentemente dados independentemente do tipo Base de dados é uma localização na memória para objectos persistentes • BD contém segmentos; segmentos são feitos de páginas • página é a unidade de transferência mínima (8K); não limita o tamanho dos objectos • os segmentos crescem automáticamente e não podem ser fixados num local Tipos de BD • ficheiro do sistema operativo, definido pelo seu caminho (velocidade intermédia) • sistema de ficheiros crú (rawfs) gerido pelo ObjectStore - montado directamente numa partição (mais rápido) - montado em ficheiros do sistema operativo (mais lento) BDOO - 6 Processos Servidor — processo que gere o acesso às bases de dados • memoriza e disponibiliza páginas de dados persistentes • arbitra acessos concorrentes • recuperação de falhas • arranque automático na inicialização da máquina Aplicação cliente — programa do utilizador que pode aceder a várias BD • num só sistema de ficheiros um servidor • sistemas de ficheiros diferentes vários servidores • liga-se a biblioteca ObjectStore cliente para - mapear objectos da BD persistente em endereços de memória virtual - reservar e libertar memória persistente - manter cache das páginas recentes e lidar com as faltas pedindo-as ao servidor Gestor de cache — processo que corre na máquina da aplicação • um só por máquina • coordena o acesso concorrente das várias aplicações aos dados persistentes que se encontram na cache a partir das mensagens de retorno do servidor BDOO - 7 Processos Aplicação Gestor da cache Servidor nó nó Servidor Disco nó nó nó Gestor da cache Aplicação Disco Gestor da cache Aplicação Aplicação BDOO - 8 Gestão de memória Espaço de endereços; dados estão na memória virtual memória transitória Heap Cache memória persistente memória física Todos os clientes usam o mesmo espaço de swap cache Cache Uma cache por cliente memória transitória Stack Um espaço de endereços por cliente Swap BDOO - 9 Mapeamento de memória Transferência entre a BD e a memória do programa automática e transparente ObjectStore detecta qualquer referência a memória persistente e transfere a página respectiva pela rede para a cache e mapeia para memória virtual — acesso tão rápido como a dados transitórios Dados em C++; apontadores para memória virtual (32 ou 64 bits) Nos segmentos da BD existem pseudo-endereços — relocalização Mapa de relocalização permanente — determina a localização de um objecto no disco Mapa de relocalização transitório — determina localização de objecto cliente na cache Relocalização na leitura e na escrita Vantagens: • persistência especificada à instância; independente do tipo, incluindo pré-definidos (reusar código normal) • apontadores processados à velocidade do hardware da memória (virtual) e não através de apontadores soft Requere-se informação sobre o esquema de cada BD e de cada aplicação em ficheiros fonte e nas próprias BD BDOO - 10 Construção de aplicações Começar por recorrer ao utilitário gerador de esquemas (ossg) - entrada: ficheiros fonte de esquema + esquemas de biblioteca - saída: BD do esquema da aplicação e respectivo ficheiro fonte - o que fica pode ser só o que foi declarado nos ficheiros, ou considerar os declarados apenas como pontos de entrada e incluir também o que estiver no fecho transitivo de acesso a partir daqueles O ficheiro fonte tem que ser compilado e ligado com a aplicação - poder ser usado um qualquer compilador de C ou C++, de preferência com templates - sugere-se cxx no jerry, o compilador da Digital Liga-se habitualmente pelo menos a biblioteca base do ObjectStore #include <ostore/ostore.hh> e começa-se por chamar a função membro estática objectstore::initialize() excepto nos casos em que é necessário chamar objectstore::set_application_schema_pathname() objectstore::set_cache_size() objectstore::set_client_name() BDOO - 11 Ambiente • acrescentar no ficheiro de inicialização de uma sessão no riff OS_ROOTDIR=/usr/local/ODI/OS5.0 export OS_ROOTDIR PATH=$PATH:$OS_ROOTDIR/bin LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OS_ROOTDIR/lib export LD_LIBRARY_PATH • a saída do servidor fica registada em /tmp/ostore/oss_out e pode ser útil para depuração BDOO - 12