bancos de dados open source
DESCRIPTION
Seminário apresentado na cadeira de Tecnologia de Banco de Dados, na faculdade Estácio Idez/PB Autores: Brenno Ayres e Rodrigo Aurélio TarginoTRANSCRIPT
Banco de DadosOpen SourceBrenno Ayres / Rodrigo Aurélio
TBD
Sumário
1. Conceito Open Source
2. Banco de Dados Open Source
3. PostgreSQL
4. NoSQL
Open SourceDefinição
● A definição de Open Source foi criada pela OSI (Open Source Iniciative) a partir do texto original Debian Free Software Guidelines (DFSG) e determina que um software de código aberto deve garantir;
● Distribuição livre, código fonte, trabalhos derivados, integridade do autor, não discriminar pessoas e áreas de atuação, distribuição da licença.
General Public License (Licença Pública Geral): A GPL é a licença com maior utilização por parte de projetos de software livre, em grande parte devido à sua adoção para o projeto GNU e o sistema operacional GNU/Linux.
Licença Apache é uma licença para software livre (open source) de autoria da Apache Software Foundation (ASF). Todo software produzido pela ASF ou qualquer um dos seus projetos e sub-projetos é licenciado de acordo com os termos da licença Apache.
BSD permite que o software distribuído sob a licença, seja incorporado a produtos proprietários. Trabalhos baseados no material podem até ser liberados com licença proprietária. Alguns exemplos notáveis são: o uso de código do BSD (funções de rede de computadores) em produtos da Microsoft, e o uso de muitos componentes do FreeBSD no sistema Mac OS X da Apple Computer.
Open SourceLincenças
Banco de dados Open Source
MySQLHistória/Características
● Partindo da necessidade de usar o mSQL para conectar tabelas utilizando ISAM, e visto que isso não tinha performance considerável. Foi criado uma nova abordabem da API do mSQL, nascendo assim o MySQL;
● Consome poucos recursos de hardware, controle trasancional, triggers, stored procedures, cursors, muito utilizado em hospedagens, dentre outros
MySQLCases de Sucesso
FirebirdHistória/Características
● O Código fonte do Interbase foi liberado pela Borland em 2000, dando assim subsídio para que a comunidade pudesse construir o firebird;
● Ele dá suporte à ACID, MVCC, triggers, procedures, dentre outros;
PostgreSQL
PostgreSQLHistória
O PostgreSQL é um dos resultados de uma ampla evolução que se iniciou com o projeto Ingres, desenvolvido na Universidade de Berkeley, Califórnia.
Stonebraker um dos pioneiros dos bancos de dados relacionais deixou a faculdade em 1982 para vender o Ingres, porém retornou logo em seguida.
Em 1985 Stonebraker deu inicio ao projeto pós-Ingres patrocinado pela DARPA(*Defense Advanced Research Projects Agency) e pelo ARO (Army Research Office) construíram um banco que pudesse compreender tipos de dados, que hoje nós conhecemos como objetos.
O projeto resultante, chamado Postgres, era orientado a introduzir a menor quantidade possível de funcionalidades para completar o suporte a tipos.
PostgreSQLApresentação
● Utiliza a licença BSD;
● Suporte para os sistemas operacionais mais
utilizados (Linux, Unix-Like e Windows);
● Implementa todos os conceitos de ACID
● Além dos tipos de dados do SQL também suporta
objetos binários(Fotos, Vídeos...)
PostgreSQLApresentação
● Banco de dados Objeto-Relacional
○ Herança;
○ Tipos de dados complexos;
○ Funções;
A principal liguagem utilizada para desenvolver o PostgreSQL é o ANSI C, porem são utilizadas algumas outras linguagens conforme podemos ver abaixo.
PostgreSQLLinguagem - Desenvolvimento
PostgreSQL
● Limites PostgreSQL○ Banco de dados: Ilimitado○ Tabela: 32 TB○ Linha: 1.6 TB○ Campos: 1GB○ Linhas por tabela: Ilimitado○ Colunas por tabela: 250 - 1600 (Conforme tipo)○ Índices por tabela: Ilimitado
PostgreSQLArquitetura
O PostgreSql utiliza o modelo cliente/servidor e sua sessão
consiste nos seguintes processos cooperando entre si.
○ O primeiro processo fica ativo no servidor que por sua vez gerencia
arquivos e aceita conexões do clientes e executa as ações em nome
dos clientes.
○ O segundo processo é o aplicativo cliente do usuário (frontend) que
deseja executar operações de banco de dados.
PostgreSQLArquitetura
PostgreSQLAdministração
Existem várias ferramentas para administrar o PostgreSQl
que vão de aplicações multiplataforma, Linux e outras para
Windows.
● Multiplataforma○ PGAccess, phpPGAdmin, PGAdmin III, OpenOffice.org, ...
● Linux○ pgFouine, Red Hat, TOra, ...
● Windows○ Embarcadero, PGExplorer, DBTools,Pg Manager, ...
PostgreSQLAdministração
PostgreSQLAdministração
Backups
Método SQL-Dump: gera um arquivo de texto contendo instruções SQL para serem processadas pelo servidor para recriar o Banco conforme o arquivo.
Cópia de Segurança: copiar diretamente os arquivos que o PostgreSQL usa para armazenar o Banco.
Cópia de Segurança em linha: o PostgreSQL mantém o registro de escrita prévia (WAL = write ahead log) no subdiretório pg_xlog do diretório de dados do agrupamento.
PostgreSQLReplicação
● Replicação
○ Hot Standby, Streaming Replication
● Two Phase Commit (2PC)○ Surgiu para controlar e monitorar as atividades de commit e rollback
das transações em ambientes de bases de dados distribuídos, ele garante a integridade entre as bases permitindo que a transação seja segura e íntegra.
● Performance○ Com um grande poder de processamento, o PostgreSQL é capaz de
resolver consultas complexas em milisegundos;○ Para tal, ele consome recursos computacionais consideráveis;
PostgreSQLPerformance/Recursos
● MVCC (controle de concorrência de multi-versão);
○ Diferentemente dos sistemas gerenciadores de banco de dados tradicionais, que usam bloqueios para realizar o controle de concorrência, o PostgreSQL mantém a consistência dos dados utilizando o modelo MVCC. Este modelo impede que a transação enxergue dados inconsistentes ou seja a informação que estão aparecendo são de algum tempo atrás.
PostgreSQLPerformance/Recursos
PostgreSQLTriggers
● Triggers○ Before/After○ NEW
■ INSERT: Valores inseridos;■ UPDATE: Novos valores;
○ OLD■ DELETE: Dados que estão sendo excluídos;■ UPDATE: Valores sobrescritos;
○ Existem várias liguagens para a implementação (PL/pgSQL, PL/Perl, PL/Python, PL/Java, entre outras);
PostgreSQLTrigger - Implementação
CREATE FUNCTION valida_dados_funcionario() RETURNS TRIGGER AS $valida_dados_funcionario$
BEGIN
IF NEW.NOME IS NULL THEN
RAISE EXCEPTION 'Por Favor, digite o nome do funcionario!';
END IF;
IF NEW.IDADE IS NULL THEN
RAISE EXCEPTION 'Por favor, informe a idade!';
END IF;
IF NEW.IDADE < 0 THEN
RAISE EXCEPTION 'Desculpe, o funcionario não pode ter % anos', NEW.IDADE;
END IF;
RETURN NEW;
END;
$valida_dados_funcionario$
LANGUAGE plpgsql;
● Stored Procedures○ Função que retonar um valor
○ Pode ser implementada em várias linguagens
○ Divide-se em:
■ Procedurais
■ Não procedurais
■ Linguagem específica
PostgreSQLProcedures - Implementação
PostgreSQLStored Procedure
//Criarcreate or replace function alunosAprovados()returns setof aluno as
select * from aluno where situacao = ''aprovado'';
language 'sql';
//Executarselect alunosAprovados();
PostgreSQLView - Implementação
CREATE VIEW vis_permanente_temporaria AS
SELECT id_perm, nome_perm, nome_temp
FROM tbl_permanente INNER JOIN tbl_temporaria ON (id_perm = id_temp);
INSERT INTO tbl_permanente VALUES (1,'nome permanente 1');INSERT INTO tbl_permanente VALUES (2,'nome permanente 2');INSERT INTO tbl_temporaria VALUES (1,'nome temporario 1');INSERT INTO tbl_temporaria VALUES (2,'nome temporario 2');
\pset border 2\pset title 'Visão juntando tabela permanente com temporária'
SELECT * FROM vis_permanente_temporaria;
Visão juntando tabela permanente com temporária+---------+-------------------+-------------------+| id_perm | nome_perm | nome_temp |+---------+-------------------+-------------------+| 1 | nome permanente 1 | nome temporario 1 || 2 | nome permanente 2 | nome temporario 2 |+---------+-------------------+-------------------+(2 linhas)
PostgreSQLPatrocinadores
PostgreSQLCases de Sucesso
Banco de dados OSNoSQL
NoSQL
B A S E
A C I D
Atomicity
Consistency
Isolation
Durability
BasicallyAvaiableSoft StateEventually Consistency
● Motivação○ O fluxo gigantesco de dados em prazos mínimos de
tempo, em um determinado contexto;○ A crescente de serviços que necessitam de uma
arquitetura que ofereça escalabilidade horizontal;○ A necessidade de manusear ambiente semi-
estruturados e até mesmo não estruturados;● Modelos
○ Documento (Riak, MongoDB, CouchDB)○ Chave-Valor (Amazon s3, Redis, Voldemort)○ Colunas (Cassandra, HBase, Hyperbase)○ Grafos (Neo4j, Titan, InfoGrid)
NoSQL
● Principais caracteristicas○ Comum a todas implementações é o conceito de "Document";
○ Document trata-se do encapsulamento e o encoding dos dados em arquivos de vários tipos (XML, JSON, BSON, até mesmo arquivos binários como PDF, DOC).
○ Em comparativo com o modelo relacional, internamente, um document pode ser tratado como uma tupla, porém de maneira mais flexível
○ A organização se dá de vários modos: Coleções, Tags, Hierarquias de diretórios, entre outras
Document Based
Document BasedExemplo Mongo
darthVader = {nome: "Anakin Skywalker",politica: Sith,universo: "Star Wars",arma: "Estrela da morte"
}db.starwars.save(darthVader)
Key - Value
● Conceito Básico
○ "O dados é geralmente consistido de uma string que representa a chave e o atual dado que é considerado o value";
○ O dados podem ser de tipos primitivos, como também objetos empacotados como utilizados na Orientação a Objetos;
Column Based
● Conceitos○ Em face dos SGBDs row-oriented, que os dados
são serializados em uma organização de linhas, o column based oferece tal organização em forma de colunas. Onde cada campo é armazenado em uma coluna;
● Beneficios○ Empacotamento de dados. Onde os dados
semelhantes e de mesmo formato estão sendo armazenados próximo;
○ Melhor utilização em sistemas OLAP (On-LIne Analytical processing)
Column BasedExemplo
Graph
● Breve introdução○ Estrutura baseada na teoria dos gráficos;○ Emprega conceitos como "Vertices/Nodes", "Edges"
e "Properties";○ Nodes e propriedades assemelham-se ao conceito
utilizados em POO;○ Não depende de esquemas ou de uma estruturação
nos dados;
Titan
● Graph database● Suporta Milhares de usuários concorrentes● Escalabilidade linear● Multi-datacenter● Suporte ACID e consistência eventual● Persistência
○ Cassandra, HBase, Oracle BerkleyDB● Produtos voltado para grafos
○ Gremlin, Rexster, Blueprints
TitanGrafos dos Deuses
TitanBreve implementação
● Criando uma instância do bancogremlin> g = GraphOfTheGodsFactory.create('/tmp/titan') ==>titangraph[local:/tmp/titan]
● Consultasgremlin> saturn = g.V('name','saturn').next()==>v[4]gremlin> saturn.map()==>name=saturn==>age=10000==>type=titangremlin> saturn.in('father').in('father').name==>hercules
Query Methods
● Document Based○ Dynamic Object-based, MapReduce, XQuery;
● Wide Columns○ MapReduce, HQL;
● Key-Value○ MR Inside Value, MapReduce, NewSQL;
● Graphs○ SparQL, Gremlin, JRuby, Java, Web UI ;
Dúvidas!?