SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
Apache CouchDB 
Hugo Souza 
hugo.souza82@gmail.com 
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: hugo.souza82@gmail.com 
Apache CouchDB

Mais conteúdo relacionado

Mais procurados

【配信!Veeam情報局】バックアップ容量の最適化、ストレージ節約や拡張方法を解説!
【配信!Veeam情報局】バックアップ容量の最適化、ストレージ節約や拡張方法を解説!【配信!Veeam情報局】バックアップ容量の最適化、ストレージ節約や拡張方法を解説!
【配信!Veeam情報局】バックアップ容量の最適化、ストレージ節約や拡張方法を解説!株式会社クライム
 
MongoDB for Java Developers with Spring Data
MongoDB for Java Developers with Spring DataMongoDB for Java Developers with Spring Data
MongoDB for Java Developers with Spring DataChris Richardson
 
“見てわかる” ファイバーチャネルSAN基礎講座(第2弾)~FC SAN設計における勘所とは?~
“見てわかる” ファイバーチャネルSAN基礎講座(第2弾)~FC SAN設計における勘所とは?~“見てわかる” ファイバーチャネルSAN基礎講座(第2弾)~FC SAN設計における勘所とは?~
“見てわかる” ファイバーチャネルSAN基礎講座(第2弾)~FC SAN設計における勘所とは?~Brocade
 
HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기SangJin Kang
 
SOAP REST 이해
SOAP REST 이해SOAP REST 이해
SOAP REST 이해Jake Yoon
 
Introduction to Swagger
Introduction to SwaggerIntroduction to Swagger
Introduction to SwaggerKnoldus Inc.
 
DB Migration to Azure Database for PostgreSQL
DB Migration to Azure Database for PostgreSQLDB Migration to Azure Database for PostgreSQL
DB Migration to Azure Database for PostgreSQLrockplace
 
rsyncやシェルでバックアップするよりも簡単にOSSのBaculaでバックアップしてみよう
rsyncやシェルでバックアップするよりも簡単にOSSのBaculaでバックアップしてみようrsyncやシェルでバックアップするよりも簡単にOSSのBaculaでバックアップしてみよう
rsyncやシェルでバックアップするよりも簡単にOSSのBaculaでバックアップしてみようKen Sawada
 
Arquitetura e Integração de sistemas
Arquitetura e Integração de sistemasArquitetura e Integração de sistemas
Arquitetura e Integração de sistemasJether Rodrigues
 
“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~
“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~
“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~Brocade
 
Elasticsearch V/s Relational Database
Elasticsearch V/s Relational DatabaseElasticsearch V/s Relational Database
Elasticsearch V/s Relational DatabaseRicha Budhraja
 
俺のサイジング
俺のサイジング俺のサイジング
俺のサイジングToru Makabe
 
「カラム型」が実現するビッグデータの高速処理
「カラム型」が実現するビッグデータの高速処理「カラム型」が実現するビッグデータの高速処理
「カラム型」が実現するビッグデータの高速処理japan_db2
 
Testando API REST - Parte 1
Testando API REST - Parte 1Testando API REST - Parte 1
Testando API REST - Parte 1alinebiath
 
オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)
オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)
オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)オラクルエンジニア通信
 
Getting started with influx Db and Grafana Installation Guide
Getting started with influx Db and Grafana Installation GuideGetting started with influx Db and Grafana Installation Guide
Getting started with influx Db and Grafana Installation GuideSoumil Shahsoumil
 
Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao Jorge Cardoso
 
Monitoramento de Bancos de Dados MS SQL Server com Zabbix - SQL Technology Da...
Monitoramento de Bancos de Dados MS SQL Server com Zabbix - SQL Technology Da...Monitoramento de Bancos de Dados MS SQL Server com Zabbix - SQL Technology Da...
Monitoramento de Bancos de Dados MS SQL Server com Zabbix - SQL Technology Da...Patricia Ladislau Silva
 

Mais procurados (20)

【配信!Veeam情報局】バックアップ容量の最適化、ストレージ節約や拡張方法を解説!
【配信!Veeam情報局】バックアップ容量の最適化、ストレージ節約や拡張方法を解説!【配信!Veeam情報局】バックアップ容量の最適化、ストレージ節約や拡張方法を解説!
【配信!Veeam情報局】バックアップ容量の最適化、ストレージ節約や拡張方法を解説!
 
MongoDB for Java Developers with Spring Data
MongoDB for Java Developers with Spring DataMongoDB for Java Developers with Spring Data
MongoDB for Java Developers with Spring Data
 
“見てわかる” ファイバーチャネルSAN基礎講座(第2弾)~FC SAN設計における勘所とは?~
“見てわかる” ファイバーチャネルSAN基礎講座(第2弾)~FC SAN設計における勘所とは?~“見てわかる” ファイバーチャネルSAN基礎講座(第2弾)~FC SAN設計における勘所とは?~
“見てわかる” ファイバーチャネルSAN基礎講座(第2弾)~FC SAN設計における勘所とは?~
 
HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기
 
SOAP REST 이해
SOAP REST 이해SOAP REST 이해
SOAP REST 이해
 
Introduction to Swagger
Introduction to SwaggerIntroduction to Swagger
Introduction to Swagger
 
DB Migration to Azure Database for PostgreSQL
DB Migration to Azure Database for PostgreSQLDB Migration to Azure Database for PostgreSQL
DB Migration to Azure Database for PostgreSQL
 
rsyncやシェルでバックアップするよりも簡単にOSSのBaculaでバックアップしてみよう
rsyncやシェルでバックアップするよりも簡単にOSSのBaculaでバックアップしてみようrsyncやシェルでバックアップするよりも簡単にOSSのBaculaでバックアップしてみよう
rsyncやシェルでバックアップするよりも簡単にOSSのBaculaでバックアップしてみよう
 
Arquitetura e Integração de sistemas
Arquitetura e Integração de sistemasArquitetura e Integração de sistemas
Arquitetura e Integração de sistemas
 
“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~
“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~
“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~
 
Elasticsearch V/s Relational Database
Elasticsearch V/s Relational DatabaseElasticsearch V/s Relational Database
Elasticsearch V/s Relational Database
 
俺のサイジング
俺のサイジング俺のサイジング
俺のサイジング
 
「カラム型」が実現するビッグデータの高速処理
「カラム型」が実現するビッグデータの高速処理「カラム型」が実現するビッグデータの高速処理
「カラム型」が実現するビッグデータの高速処理
 
Service Connector Hub ご紹介
Service Connector Hub ご紹介Service Connector Hub ご紹介
Service Connector Hub ご紹介
 
Testando API REST - Parte 1
Testando API REST - Parte 1Testando API REST - Parte 1
Testando API REST - Parte 1
 
オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)
オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)
オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)
 
Getting started with influx Db and Grafana Installation Guide
Getting started with influx Db and Grafana Installation GuideGetting started with influx Db and Grafana Installation Guide
Getting started with influx Db and Grafana Installation Guide
 
Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao
 
Monitoramento de Bancos de Dados MS SQL Server com Zabbix - SQL Technology Da...
Monitoramento de Bancos de Dados MS SQL Server com Zabbix - SQL Technology Da...Monitoramento de Bancos de Dados MS SQL Server com Zabbix - SQL Technology Da...
Monitoramento de Bancos de Dados MS SQL Server com Zabbix - SQL Technology Da...
 
HTTP/2 in Examples
HTTP/2 in ExamplesHTTP/2 in Examples
HTTP/2 in Examples
 

Destaque (10)

CouchDB Presentation
CouchDB PresentationCouchDB Presentation
CouchDB Presentation
 
Aplicações no Contexto de Big Data
Aplicações no Contexto de Big DataAplicações no Contexto de Big Data
Aplicações no Contexto de Big Data
 
Conhecendo o CouchDB
Conhecendo o CouchDBConhecendo o CouchDB
Conhecendo o CouchDB
 
noSQL com CouchDb e PHP
noSQL com CouchDb e PHPnoSQL com CouchDb e PHP
noSQL com CouchDb e PHP
 
Palestra CouchDB III ENSOL
Palestra CouchDB III ENSOLPalestra CouchDB III ENSOL
Palestra CouchDB III ENSOL
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Curso AngularJS - Parte 2
Curso AngularJS - Parte 2Curso AngularJS - Parte 2
Curso AngularJS - Parte 2
 
MongoDB e Bancos de Dados Orientados a Documentos
MongoDB e Bancos de Dados Orientados a DocumentosMongoDB e Bancos de Dados Orientados a Documentos
MongoDB e Bancos de Dados Orientados a Documentos
 
No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documento
 
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4jBases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
 

Semelhante a CouchDB Doc Intro

Arquitetura do Framework Apache Hadoop 2.6
Arquitetura do Framework Apache Hadoop 2.6Arquitetura do Framework Apache Hadoop 2.6
Arquitetura do Framework Apache Hadoop 2.6Felipe Schimith Batista
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
CouchDB vs Postgres em Rails
CouchDB vs Postgres em RailsCouchDB vs Postgres em Rails
CouchDB vs Postgres em RailsJuan Maiz
 
CouchDB vs PostgreSQL no Rails
CouchDB vs PostgreSQL no RailsCouchDB vs PostgreSQL no Rails
CouchDB vs PostgreSQL no RailsJohalf Farina
 
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRuby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRodrigo Recio
 
Apresentação palestra ireport
Apresentação palestra ireportApresentação palestra ireport
Apresentação palestra ireportfpsgyn
 
Seu banco de dados na nuvem: Opções de bancos de dados na AWS e padrões de...
Seu banco de dados na nuvem: Opções de bancos de dados na AWS e padrões de...Seu banco de dados na nuvem: Opções de bancos de dados na AWS e padrões de...
Seu banco de dados na nuvem: Opções de bancos de dados na AWS e padrões de...Amazon Web Services LATAM
 
Palestra couchbase-furb
Palestra couchbase-furbPalestra couchbase-furb
Palestra couchbase-furbLeonardo Kobus
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.Filipe Morelli
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito CertoRavan Scafi
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadospichiliani
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadospichiliani
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - IntroduçãoMarco Pinheiro
 
Desenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDesenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDenis Vieira
 

Semelhante a CouchDB Doc Intro (20)

Arquitetura do Framework Apache Hadoop 2.6
Arquitetura do Framework Apache Hadoop 2.6Arquitetura do Framework Apache Hadoop 2.6
Arquitetura do Framework Apache Hadoop 2.6
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
CouchDB vs Postgres em Rails
CouchDB vs Postgres em RailsCouchDB vs Postgres em Rails
CouchDB vs Postgres em Rails
 
CouchDB vs PostgreSQL no Rails
CouchDB vs PostgreSQL no RailsCouchDB vs PostgreSQL no Rails
CouchDB vs PostgreSQL no Rails
 
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRuby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
 
Apresentação palestra ireport
Apresentação palestra ireportApresentação palestra ireport
Apresentação palestra ireport
 
Rails na pratica
Rails na praticaRails na pratica
Rails na pratica
 
Seu banco de dados na nuvem: Opções de bancos de dados na AWS e padrões de...
Seu banco de dados na nuvem: Opções de bancos de dados na AWS e padrões de...Seu banco de dados na nuvem: Opções de bancos de dados na AWS e padrões de...
Seu banco de dados na nuvem: Opções de bancos de dados na AWS e padrões de...
 
Apache
ApacheApache
Apache
 
Palestra couchbase-furb
Palestra couchbase-furbPalestra couchbase-furb
Palestra couchbase-furb
 
NoSQL Livre
NoSQL LivreNoSQL Livre
NoSQL Livre
 
Arquitetura API em NodeJS
Arquitetura API em NodeJSArquitetura API em NodeJS
Arquitetura API em NodeJS
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito Certo
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
 
Desenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDesenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full Javascript
 
Web Sphere
Web SphereWeb Sphere
Web Sphere
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
 

CouchDB Doc Intro

  • 1. Apache CouchDB Hugo Souza hugo.souza82@gmail.com Maceió, Novembro de 2014 Instituto de Computação Universidade Federal de Alagoas
  • 2. Roteiro •Introdução •Principais Características •BD Relacional X BD Documental •Primeiros Passos •MapReduce •RESTful e BD Documental •Principais Referências Apache CouchDB
  • 3. 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
  • 4. 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
  • 5. 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
  • 6. Introdução Apache CouchDB Figura 1 – Coleção de documentos independentes
  • 7. 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
  • 8. 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
  • 9. Principais Características •Semântica –Armazena em JSON { “_id” : “f384e53951a2c9769”, “_rev” : “2-ed28d803d95bd6ada”, “nome” : “Hugo”, “idade” : 32, “altura”: 1.85 } Apache CouchDB
  • 10. Principais Características •Semântica –Consultas em Javascript function(carros){ emit(carros.marca, carros.modelo); } Apache CouchDB
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. BD Relacional X BD Documental Figura 3 – Conjunto de tabelas de um BD Relacional Apache CouchDB
  • 15. 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
  • 16. 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!
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. MapReduce Apache CouchDB $ chave : $valor $ chave : $valor $ chave : $valor $ chave : $valor $ chave : $valor Map Reduce $ chave : $valor Figura 4 – MapReduce simples
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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