Apache CouchDB

hugosouza 1,897 views 32 slides Nov 18, 2014
Slide 1
Slide 1 of 32
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32

About This Presentation

CouchDB - Um Banco de Dados Documental


Slide Content

Apache CouchDB
Hugo Souza
[email protected]
Maceió, Novembro de 2014
Instituto de Computação
Universidade Federal de Alagoas

Roteiro
•Introdução
•Principais Características
•BD Relacional X BD Documental
•Primeiros Passos
•MapReduce
•RESTful e BD Documental
•Principais Referências
Apache CouchDB

Introdução
•É um banco de dados não-relacional (NoSQL)
•Foi desenvolvido em 2005 sob a linguagem
C++
•Em 2008 passou a ser desenvolvido sob a
plataforma Erlang OTP e a ser mantido pela
Apache (couchdb.apache.org)

•É o acrônimo de “Cluster Of Unreliable
Commodity Hardware”

Apache CouchDB

Introdução
•É Opensource
–Atualmente, está na versão 1.6.1 (Estável)
•Suporte a vários Sistemas Operacionais, como
o Microsoft Windows, distribuições Linux e
Apple MacOS
•Foi criado na Web e para a Web 2.0
•JavaScript (JSON) como sua linguagem de
consulta usando o MapReduce
•HTTP como API

Apache CouchDB

Introdução
•Ao contrário de um banco de dados
relacional, o CouchDB não
armazena os dados e
relacionamentos em tabelas.
•Cada banco de dados é uma coleção de
documentos independentes, e cada documento
mantém seus próprios dados e esquemas.
•Uma aplicação pode acessar vários BDs
simultaneamente como, por exemplo, no
smartphone do usuário e outro em um servidor.
Apache CouchDB

Introdução
Apache CouchDB
Figura 1 – Coleção de documentos independentes

Principais Características
•Armazenamento em documentos
–CouchDB armazena os dados como "documentos",
com um ou mais pares de chave/valor
–Os valores da chave ou campo podem ser string,
números ou datas, além de arrays e vetores
associativos.
–Todo documento no banco de dados do CouchDB tem
uma id única e não há necessidade de um esquema.
–Afinal, qual a vantagem nisso?
Apache CouchDB

Principais Características









Figura 2 - Um campo multi-valorado exige duas tabelas no
banco relacional, mas os documentos flexivelmente
acomodam os valores num array.
Apache CouchDB

Principais Características
•Semântica
–Armazena em JSON
{
“_id” : “f384e53951a2c9769”,
“_rev” : “2-ed28d803d95bd6ada”,
“nome” : “Hugo”,
“idade” : 32,
“altura”: 1.85
}
Apache CouchDB

Principais Características
•Semântica
–Consultas em Javascript

function(carros){
emit(carros.marca, carros.modelo);
}
Apache CouchDB

Principais Características
•Provê semântica ACID
–Isso é possível graças ao Controle de
Concorrência Multiversão (MVCC)
•Views e índices com Map/Reduce
–Os dados armazenados e estruturados usando
views.
–Cada view é construída por uma função em
Javascript que atua como a operação Map do
MapReduce.
Apache CouchDB

Principais Características
•Arquitetura distribuída com replicação
–O CouchDB foi desenvolvido com replicação
bidirecional (ou sincronização) e operação off-line.
•API RESTful
–O Futon
–Todos os itens têm uma URI exclusiva, que são
acessadas através do HTTP.
–O REST utiliza os métodos POST, GET, PUT, DELETE
para as operações CRUD (Create, Read, Update,
Delete) em todos os recursos.
Apache CouchDB

BD Relacional X BD Documental
•Não há nenhuma tabela, linha, coluna ou
relacionamento no Documental
•Enquanto no relacional, é possível ter quatro
ou mais tabelas para armazenar esses dados:
–uma para "Pessoa", uma para "Empresa", uma
para "Detalhes do Contato" e uma para o próprio
cartão de visita.

Apache CouchDB

BD Relacional X BD Documental






Figura 3 – Conjunto de tabelas de um BD Relacional
Apache CouchDB

BD Relacional X BD Documental
•BD Relacional há dados com colunas e linhas
rígidas
•Em BD Documental pode ter identificadores
exclusivos
– Universally Unique Identifier (UUID)
•BD Documental não suporta junções, pois não
há chaves estrangeiras e nem primária


Apache CouchDB

Primeiros Passos
Apache CouchDB
•A instalação é fácil
–Existe um modo package no portal da Apache
Foundation
–couchdb.apache.org
•Ou é possível instalar via linha/comando por
um distribuição Debian
•Não esquecer de instalar o JDK antes!

Primeiros Passos
Apache CouchDB
•Utilizei o Ubuntu 14.04
–A instalação não passa de dois passos!
–Instalação da última versão do JDK
sudo apt-get install -y openjdk-7-jre-headless

–E, finalmente, a instalação do CouchDB
sudo apt-get install -y couchdb

Primeiros Passos
•Futon
–Interface gráfica via browser
–Na verdade, é uma API de JSON RESTful
–Essa API pode ser acessada através de pedidos
HTTP GET e POST e retorna dados no formato
de objetos JavaScript usando JSON
–É possível simplesmente usar uma estrutura
JavaScript com objetos de pedido Ajax, como
Prototype, JQuery ou ExtJS
Apache CouchDB

Primeiros Passos
•Demonstrar um “Hello World”
–Primeiro crie um banco de dados em
“Create Database”.
–Em seguida, crie um novo documento em
“New Document”.
–Vá na aba “Fields”, onde é possível
adicionar campos apenas por cliques.
–Não esquecer de, ao final, salvar o
documento em “Save Document”
Apache CouchDB

Primeiros Passos
•Inclusive, há a possibilidade de incluir anexos.
•Assim, como também há a possibilidade de
deletá-los.
•Existem dois tipos de views para os
documentos:
•Temporárias (Temporary view)
•Permanentes (Design documents)
Apache CouchDB

MapReduce
•O CouchDB é construído em um poderoso
mecanismo de armazenamento B-tree
–É responsável por manter os dados do CouchDB
classificados e fornece um mecanismo para
consultar, inserir e excluir
•Depende do uso das views para criar
relacionamentos arbitrários entre documentos
e para fornecer recursos de agregação e
relatório.
Apache CouchDB

MapReduce
•A combinação de map e reduce no CouchDB é
representada através de uma view
•Funções de map são chamadas de uma vez
com cada documento como argumento.
–A função pode optar por ignorar o documento
completo ou emitir uma ou mais linhas vista como
pares de chave / valor.
•As views são armazenadas como linhas que
são mantidas ordenadamente por chave
Apache CouchDB

MapReduce
•O principal objetivo da função map é a
construção de um índice que armazena os
dados relacionados com chaves próximas.
•Vamos criar documentos que possui o preço
de diversos automóveis como os encontrados
em diferentes marcas.
Apache CouchDB

MapReduce
•E o Reduce? Como funciona no CouchDB?
–CouchDB utiliza uma heurística para
detectar funções Reduce
–Uma função Reduce deve reduzir os valores
de entrada para um valor de produção
menor



Apache CouchDB

MapReduce
Apache CouchDB
$ chave : $valor
$ chave : $valor
$ chave : $valor
$ chave : $valor
$ chave : $valor
Map Reduce
$ chave : $valor
Figura 4 – MapReduce simples

MapReduce
Apache CouchDB
$ chave : $valor
$ chave : $valor
$ chave : $valor
$ chave : $valor
$ chave : $valor
Map Reduce
$ chave : $valor
$ chave : $valor
$ chave : $valor
Re-Reduce
Figura 5 – Map Re-Reduce

MapReduce
•Vamos ver na prática um exemplo




•Como faço um simples Map?
•E um simples Map/Reduce com o exemplo já
criado?

Apache CouchDB
Id : 1
marca : Audi
modelo : A3
ano : 2000
Id : 2
marca : Audi
modelo : A4
ano : 2005
Id : 3
marca : BMW
modelo : Z4
ano : 2012
Id : 4
marca : BMW
modelo : 3
ano : 2011

RESTful e BD Documental
•É possível também utilizar qualquer executável
linha/comando
•E aí utilizar HTTP GET e POST e retorna dados no
formato de objetos JavaScript usando JSON.
•É possível simplesmente usar uma estrutura
JavaScript com objetos de pedido Ajax, como
Prototype, JQuery ou ExtJS
–Não há necessidade para uma linguagem do lado do
servidor para seus aplicativos da Web.
Apache CouchDB

RESTful e BD Documental
•Por questão de simplicidade e para ilustrar as
respostas JSON brutas emitidas pela API
–App curl será utilizada.
•Permite emitir os
pedidos GET, POST, PUT e DELETE
•Exibe a resposta HTTP bruta recebida do
servidor da Web (neste caso, um servidor
CouchDB instalado localmente).
Apache CouchDB

RESTful e BD Documental
•Então, os comandos podem ter os seguintes
fins:
–Saber todos os bancos de dados criados
•Método GET
–Criar um banco de dados
•Método PUT
–Apagar
•Método DELETE

Apache CouchDB

Principais Referências
Apache Software Foundation. Disponível em:
<http://couchdb.apache.org/> . Acesso em 14 de Junho
de 2014.
IBM Developer Works. Explorando o CouchDB.
Disponível em:
<http://www.ibm.com/developerworks/br/library/os-
couchdb/>. Acesso em 13 de Junho de 2014.
Anderson, J. Chris; Slater, N; Lehnardt, J. CouchDB: The
Definitive Guide, O'Reilly Media, 2009.


Apache CouchDB

Obrigado!



Contato: [email protected]



Apache CouchDB