A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

BDOO - 0 Bases de dados OO Sumário Conceitos gerais Exemplo do ObjectStore) Arquitectura Criação de objectos Gestão da concorrência Colecções Perguntas.

Apresentações semelhantes


Apresentação em tema: "BDOO - 0 Bases de dados OO Sumário Conceitos gerais Exemplo do ObjectStore) Arquitectura Criação de objectos Gestão da concorrência Colecções Perguntas."— Transcrição da apresentação:

1 BDOO - 0 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

2 BDOO - 1 Criação de BD oqualquer uso de memória persistente requer a existência prévia de uma BD manipulação de BD baseia-se nos membros da classe os_database static os_database *create( const char *pathname, os_int32 mode = 0664, os_boolean if_exists_overwrite = 0, os_database *schema_database = 0 ); pathname é o nome da BD, a começar na raiz, ou na máquina os_database *db1 = os_database::create( "/ken/parts1" ); "tom:/user/bd" neste segundo caso teria que existir um servidor na máquina tom o modo da BD é o modo dos ficheiros Unix 0664 é -rw-rw-r-- se se pretender uma substituição de BD's pré-existentes põ-se o booleano em TRUE se schema_database = 0; a informação de esquema fica na própria BD, no caso contrário fica nessa BD, a qual tem que ter o seu próprio esquema local valor de retorno é um apontador para os_database

3 BDOO - 2 Mais operações em BD destruir uma BD com a função os_database::destroy() os_database *db1; … db1->destroy() //executar fora de transacção curiosidade: um os_database::lookup() pode suceder mesmo depois de um destroy() no caso de a página referida estar ainda na cache os_database::destroy() abrir uma BD com a função os_database::open() static os_database *open( const char *pathname, os_boolean read_only, os_int32 create_mode, os_database *schema_database ); os_database *db1 = os_database::open( "/ken/parts1",0,0664 ); ofechar os_database::close(); tem que haver tantos fechos como aberturas é a última abertura que determina o modo corrente de leitura, leitura/escrita

4 BDOO - 3 Informação sobre BD Tipo de abertura, membros de os_database os_boolean is_open() const; os_boolean is_open_read_write; Ex: fechar BD repetidamente abertas os_database *db1; … while(db1-> is_open()) db1->close(); oObter a BD a partir do nome e vice-versa static os_database *lookup(const char *pathname); char *get_pathname() const;

5 BDOO - 4 Objectos extern void * operator new( size_t, os_database *where, os_typespec *typespec ); extern void * operator new( size_t, os_segment *where, os_typespec *typespec ); extern void * operator new( size_t, os_object_cluster *where, os_typespec *typespec ); oCriação de objectos escalares através da sobrecarga do ::operator new, definido genericamente os_typespec *part_type = new os_typespec("part"); part *a_part = new(db1, part_type) part(111); os_typespec é uma indicação de tipo com o objectivo de melhorar a segurança where destina-se à localização toda a memória reservada pelo ObjectStore inicializada a zero

6 BDOO - 5 Vectores extern void * operator new( size_t, os_database *where, os_typespec *typespec, os_int32 how_many ); extern void * operator new( size_t, os_segment *where, os_typespec *typespec, os_int32 how_many ); extern void * operator new( size_t, os_object_cluster *where, os_typespec *typespec, os_int32 how_many ); part *some_part = new(db1, part_type, 10) part[10]; how_many dá a dimensão do vector; e typespec o tipo dos elementos e não o do vector o valor de retorno é um apontador para memória persistente; o seu uso é muito semelhante ao dos apontadores em memória transitória

7 BDOO - 6 Typespecs Objectivo: aumentar a segurança do programa com a verificação de tipos. são fornecidas as funções para os tipos fundamentais e construtores para as classes cada especificação usada pela primeira vez cria um objecto em memória transitória; novas chamadas devolvem um apontador para este static os_typespec *get_char(); static os_typespec*get_short(); int, long, float, double, long_double, pointer, signed_char, signed_short, signed_int, signed_long, unsigned_char, unsigned_short, unsigned_int, unsigned_long Tipos fundamentais class employee{ public: char *name; employee(char* n) { name = new(os_database::of(this), os_typespec:: get_char(), strlen(n)+1) char[strlen(n)+1]; strcpy(name, n); } }; cria um subobjecto de tipo elementar (string), guarda-o em memória persistente e deixa um apontador na respectiva instância de empregado

8 BDOO - 7 Typespecs para classes static os_typespec *get_os_typespec(); acrescentar esta função como membro da classe o gerador de esquemas fornece-lhe um corpo ela devolve um apontador para o typespec da classe se não for possível modificar a definição da classe (tipos pré-definidos, classes em bibliotecas, apontadores para classes e apontadores para pré-definidos), usar o construtor os_typespec: os_typespec *part_type = new os_typespec("part"); os_typespec *part_pointer_type = new os_typespec("part*"); os typespecs só devem ter alocação transitória

9 BDOO - 8 Typespecs parametrizados oProblema: precisamos de uma classe parametrizada que defina uma função para criar persistentemente uma instância da classe e uma instância do parâmetro. template class PT { … void foo(os_database *db) { // criar PT persistente new(db, "PT ") PT (); // criar T persistente new(db, "???") T(); o o que pôr em ??? que as templates } do C++ saibam instanciar? }; class PT_parm { public: static os_typespec *get_os_typespec(); }; template class PT { static os_typespec *get_os_typespec(); void foo(os_database *db) { new(db, PT ::get_os_typespec()) PT (); new(db, ::get_os_typespec() ) T(); } };

10 BDOO - 9 Validade dos apontadores os apontadores persistentes (criados com new ) podem ser usados como apontadores transitórios excepto: não os utilizar fora de uma transacção (perder-se-ia o controlo da concorrência e a recuperação de falhas) não os passar para processos não ObjectStore, com uma chamada de sistema ou comunicação inter-processos (se a desreferenciação originar uma falta de página o ObjectStore não será capaz de lidar com essa interrupção) oo sistema tem um modo em que suporta apontadores inter-BD, à custa de maior dimensão nas tabelas de relocalização oo sistema tem um modo em que mantém a validade dos apontadores persistentes inter- transacções oos apontadores da memória persistente para a transitória só são válidos até ao fim da transacção mais exterior em que foram definidos

11 BDOO - 10 Gráfico da validade sempre válido válido dentro da transacção, ou sempre válido, conforme especificado válido dentro da transacção persistentetransitória

12 BDOO - 11 Agrupamento básico oobjectos relacionados devem ficar próximos por exemplo, no mesmo segmento. o membro ::of() devolve um apontador para a em que o objecto do argumento se encontra extern os_typespec *char_type; class employee{ public: char *name; … employee(char* n){ name= new(os_segment::of(this), char_type, strlen(n)+1) char[strlen(n)+1]; strcpy(name, n); } }; oexiste um segmento transitório; o código acima, e o new do ObjectStore em geral, podem ser utilizados para criar objectos transitórios também

13 BDOO - 12 Como chegar aos dados oformas de recuperar a informação persistente: ¶x extracção (look-up) pelo nome persistente ·recuperação baseada no nome persistente ¸navegação ¹pesquisa cria-se uma raiz na BD através da criação de uma instância de os_database_root, para associar um nome a um ponto de entrada; pesquisa-se com os_database::find_root os_database *db1; part *a_part; os_typespec *part_type = new os_typespec("part"); … a_part = new(db1, part_type) part(111); os_database_root *a_root = db1- >create_root("part_0"); a_root->set_value(a_part) os_database *db1; part *a_part; os_database_root *a_root … a_root= db1->find_root ("part_0"); if (a_root) a_part = (part*)(a_root->get_value();


Carregar ppt "BDOO - 0 Bases de dados OO Sumário Conceitos gerais Exemplo do ObjectStore) Arquitectura Criação de objectos Gestão da concorrência Colecções Perguntas."

Apresentações semelhantes


Anúncios Google