SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
CouchDB:
           Um banco de dados
           orientado a documento
           Allisson Azevedo
           http://blog.allisson.eti.br
           allisson@gmail.com


20/06/09
Agenda

□
    História do CouchDB
□
    Problemas RDBMS
□
    Construído para o futuro
□
    Documentos (Documents)
□
    HTTP REST API
□
    Visões (Views)
□
    Replicação (Replication)

                               2
História do CouchDB

□
    Damien Katz
       ◊   Trabalhos anteriores: Lotus Notes, MySQL
       ◊   Iniciou o CouchDB em 2005
       ◊   C++ -> Erlang
       ◊   XML -> JSON
       ◊   OpenSource
       ◊   Funcionário da IBM
              ◊   Trabalho em tempo integral no CouchDB


                                                          3
História do CouchDB (Cont)

□
    Versão atual 0.9.0
□
    Projeto oficial da Apache.org




                                    4
Problemas RDBMS

□
    Foram projetados originalmente para:
       ◊   Um usuário
       ◊   Uma máquina (Escala verticalmente)
       ◊   Uma operação por vez
       ◊   Maior uso em aplicações científicas




                                                 5
Problemas RDBMS (Cont)

□
    Necessidades atuais (Web)
       ◊   Milhares de usuários simultâneos
       ◊   Várias máquinas (Escala horizontalmente)
       ◊   Processamento em paralelo (Multicore)
       ◊   Maior uso em aplicações na internet




                                                   6
Problemas RDBMS (Cont)

□
    Como escalar um RDBMS?
       ◊   Replicação Master-Slave
       ◊   Replicação Master-Master
       ◊   Sharding
       ◊   Qual o custo de usar uma dessas
            técnicas?
□
    Locking
□
    Normalização/Denormalização

                                             7
Constuído para o Futuro

□
    Erlang
       ◊   Desenvolvida para aplicações distribuídas
            e tolerante a falhas
       ◊   Suporte poderoso a concorrência
       ◊   Originalmente proprietária da Ericsson
       ◊   Opensource em 1998




                                                       8
Constuído para o Futuro (Cont)

□
    Non-locking multi-version concurrency
    control (MVCC)
       ◊   Uso de versionamento, os dados nunca
            são sobrescritos
       ◊   Leituras não são corrompidas por escritas
            durante a leitura de dados
       ◊   Requisições concorrentes (Non-locking)
       ◊   Compactação elimina versões anteriores
            dos documentos

                                                       9
Documentos

□
    Local onde os dados são mantidos
□
    Não tem schema definido
       ◊   Um documento pode ter um campo que
            outro documento não têm
□
    Formato JSON
       ◊   Pode incluir todo tipo de dados: números,
            strings, arrays, null, boolean
□
    Podem ter anexos (attachments)

                                                   10
Documentos (Cont)

{
    "_id": "4a3d08ad999378959437f91d2d8fe647",
    "_rev": "1-1918148569"
}




                                            11
Documentos (Cont)

{
    "_id": "4a3d08ad999378959437f91d2d8fe647",
    "_rev": "2-3325253701",
    "name": "Allisson Azevedo",
    "age": 26
}




                                            12
Documentos (Cont)

{
    "_id": "4a3d08ad999378959437f91d2d8fe647",
    "_rev": "3-3762716971",
    "name": "Allisson Azevedo",
    "age": 26,
    "type": "person"
}




                                            13
Documentos (Cont)

{
    "_id": "4a3d08ad999378959437f91d2d8fe647",
    "_rev": "4-3870398970",
    "name": "Allisson Azevedo",
    "age": 26,
    "type": "person",
    "measures": {
      "height": 169,
      "weight": 68
    }
}


                                           14
Documentos (Cont)

{
    "_id": "4a3d08ad999378959437f91d2d8fe647",
    "_rev": "5-3162066707",
    "name": "Allisson Azevedo",
    "age": 26,
    "type": "person",
    "measures": {
       "height": 169,
       "weight": 68
    },
    "_attachments": {
       "Imagem102.jpg": {
         "stub": true,
         "content_type": "image/jpeg",
         "length": 18223
       }
    }
}
                                                 15
HTTP REST API

□
    Todas as operações são feitas via RESTful
    Web Services
□
    Quatro operações básicas para trabalhar
    com documentos
       ◊   Create: HTTP PUT /db/docid
              ◊   Create: HTTP POST /db
       ◊   Read: HTTP GET /db/docid
       ◊   Update: HTTP PUT /db/docid
       ◊   Delete: HTTP DELETE /db/docid
                                              16
HTTP REST API (Cont)

□
    Toda linguagem de programação tem as
    ferramentas necessárias para fazer
    requisições HTTP
□
    A maioria das linguagens já conta com
    ferramentas específicas para tratar com
    RESTful Web Services




                                              17
HTTP REST API (Cont)

curl -X PUT http://127.0.0.1:5984/teste2
{"ok":true}

curl -X GET http://127.0.0.1:5984/_all_dbs
["teste2","teste"]

curl -X DELETE http://127.0.0.1:5984/teste2
{"ok":true}

curl -X GET http://127.0.0.1:5984/_all_dbs
["teste"]


                                             18
HTTP REST API (Cont)

curl -X GET
http://127.0.0.1:5984/teste/4a3d08ad99937
8959437f91d2d8fe647

{"_id":"4a3d08ad999378959437f91d2d8fe64
7","_rev":"5-3162066707","name":"Allisson
Azevedo","age":26,"type":"person","measure
s":
{"height":169,"weight":68},"_attachments":
{"Imagem102.jpg":
{"stub":true,"content_type":"image/jpeg","l
ength":18223}}}
                                         19
HTTP REST API (Cont)

curl -X PUT -d '{"name":"Steven Seagal",
"age":58}'
http://127.0.0.1:5984/teste/steven-seagal

{"ok":true,"id":"steven-seagal","rev":"1-
2296068035"}

curl -X POST -d '{"name":"Chuck Norris",
"age":69}' http://127.0.0.1:5984/teste

{"ok":true,"id":"6ae18b5516ccac7abe3eaf07
b86b8ec8","rev":"1-3534466899"}
                                            20
HTTP REST API (Cont)

curl -X PUT -d '{"_id":"steven-seagal","_rev":"1-
2296068035","name":"Steven Seagal","age":58,
"roundhousekick":false}'
http://127.0.0.1:5984/teste/steven-seagal

{"ok":true,"id":"steven-seagal","rev":"2-
3346317691"}

curl -X GET http://127.0.0.1:5984/teste/steven-
seagal

{"_id":"steven-seagal","_rev":"2-
3346317691","name":"Steven
Seagal","age":58,"roundhousekick":false}
                                               21
HTTP REST API (Cont)

curl -X DELETE
http://127.0.0.1:5984/teste/steven-seagal?
rev=2-3346317691

{"ok":true,"id":"steven-seagal","rev":"3-
793968873"}

curl -X GET
http://127.0.0.1:5984/teste/steven-seagal

{"error":"not_found","reason":"deleted"}

                                            22
Visões

□
    Extrair data dos documentos
□
    Map/Reduce
       ◊   Map: Extrai dados dos documentos
       ◊   Reduce: Realiza cálculos com os valores
            obtidos no Map
□
    Visões podem ser temporárias ou fixas




                                                     23
Visões (Cont)

Exemplo de função Map

function(doc) {
 if (doc.name && doc.age) {
 emit(doc.name, doc.age);
 }
}




                              24
Visões (Cont)

Exemplo de função Reduce

function(keys, values, rereduce) {
 return sum(values);
}




                                     25
Visões (Cont)




                26
Visões (Cont)




                27
Visões (Cont)




                28
Visões (Cont)




                29
Replicação

□
    Replicação uni-direcional
□
    A cópia de dados utiliza apenas as
    últimas versões dos documentos
□
    A operação é realizada enviando uma
    requisição POST para a url /_replicate
       ◊   Banco de origem
       ◊   Banco de destino



                                             30
Replicação (Cont)

□
    Resolução automática de conflitos
       ◊   Seleciona um documento como sendo o
            mais atual e os outros conflitos são
            armazenados como versões anteriores




                                                   31
Replicação (Cont)




                    32
Replicação (Cont)




                    33
Replicação (Cont)




                    34
Replicação (Cont)




                    35
Replicação (Cont)




                    36
Replicação (Cont)




                    37
Perguntas?




             38
Referências

□
    http://couchdb.apache.org/
□
    http://wiki.apache.org/couchdb/
□
    http://books.couchdb.org/relax/




                                      39
Obrigado!




            40

Weitere ähnliche Inhalte

Was ist angesagt?

Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBThiago Avelino
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbfabio perrella
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento Marcos Thomaz
 
Mongo DB
Mongo DBMongo DB
Mongo DBdist_bp
 
Replicação e escalabidade do ZODB com RelStorage
Replicação e escalabidade do ZODB com RelStorageReplicação e escalabidade do ZODB com RelStorage
Replicação e escalabidade do ZODB com RelStorageRuda Filgueiras
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valorKinn Julião
 
[TDC2016] Apache Cassandra Estratégias de Modelagem de Dados
[TDC2016]  Apache Cassandra Estratégias de Modelagem de Dados[TDC2016]  Apache Cassandra Estratégias de Modelagem de Dados
[TDC2016] Apache Cassandra Estratégias de Modelagem de DadosEiti Kimura
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLpichiliani
 
Apresentação cassandra
Apresentação cassandraApresentação cassandra
Apresentação cassandraRichiely Paiva
 
Nosql e BD Orientados a Documentos
Nosql e BD Orientados a DocumentosNosql e BD Orientados a Documentos
Nosql e BD Orientados a DocumentosYuri Adams
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasWaldemar Neto
 
TDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto Desempenho
TDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto DesempenhoTDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto Desempenho
TDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto DesempenhoEiti Kimura
 

Was ist angesagt? (20)

Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDB
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
2011 01-18 mongo-db
2011 01-18 mongo-db2011 01-18 mongo-db
2011 01-18 mongo-db
 
#3 Instalação MongoDB
#3   Instalação MongoDB  #3   Instalação MongoDB
#3 Instalação MongoDB
 
Palestra MongoDB
Palestra MongoDBPalestra MongoDB
Palestra MongoDB
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodb
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento
 
Mongo DB
Mongo DBMongo DB
Mongo DB
 
#5 CRUD no MongoDB
#5   CRUD  no MongoDB#5   CRUD  no MongoDB
#5 CRUD no MongoDB
 
Replicação e escalabidade do ZODB com RelStorage
Replicação e escalabidade do ZODB com RelStorageReplicação e escalabidade do ZODB com RelStorage
Replicação e escalabidade do ZODB com RelStorage
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
 
Redis na Prática
Redis na PráticaRedis na Prática
Redis na Prática
 
Introdução ao NoSql
Introdução ao NoSqlIntrodução ao NoSql
Introdução ao NoSql
 
[TDC2016] Apache Cassandra Estratégias de Modelagem de Dados
[TDC2016]  Apache Cassandra Estratégias de Modelagem de Dados[TDC2016]  Apache Cassandra Estratégias de Modelagem de Dados
[TDC2016] Apache Cassandra Estratégias de Modelagem de Dados
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQL
 
Apresentação cassandra
Apresentação cassandraApresentação cassandra
Apresentação cassandra
 
PostgreSQL Conceitos e aplicações
PostgreSQL  Conceitos e aplicaçõesPostgreSQL  Conceitos e aplicações
PostgreSQL Conceitos e aplicações
 
Nosql e BD Orientados a Documentos
Nosql e BD Orientados a DocumentosNosql e BD Orientados a Documentos
Nosql e BD Orientados a Documentos
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscas
 
TDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto Desempenho
TDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto DesempenhoTDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto Desempenho
TDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto Desempenho
 

Andere mochten auch

Andere mochten auch (9)

noSQL com CouchDb e PHP
noSQL com CouchDb e PHPnoSQL com CouchDb e PHP
noSQL com CouchDb e PHP
 
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
 
CouchDB Presentation
CouchDB PresentationCouchDB Presentation
CouchDB Presentation
 
Apache CouchDB
Apache CouchDBApache CouchDB
Apache CouchDB
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Conhecendo o CouchDB
Conhecendo o CouchDBConhecendo o CouchDB
Conhecendo o CouchDB
 
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
 

Ähnlich wie Palestra CouchDB III ENSOL

Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Henrique Gogó
 
Apresentação Projeto Final Graduação UFF
Apresentação Projeto Final Graduação UFFApresentação Projeto Final Graduação UFF
Apresentação Projeto Final Graduação UFFBianca Caruso da Paixão
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Fabrízio Mello
 
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchUma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchLuiz Henrique Zambom Santana
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopDiego Sana
 
Fisl banco de dados no sql de código aberto
Fisl   banco de dados no sql de código abertoFisl   banco de dados no sql de código aberto
Fisl banco de dados no sql de código abertoSuissa
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopAlexei Znamensky
 
Big data para programadores convencionais
Big data para programadores convencionaisBig data para programadores convencionais
Big data para programadores convencionaisRoberto Oliveira
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...BrunoSouza617
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open sourceRodrigo Aurélio
 
Otimizando sites com o nosql redis
Otimizando sites com o nosql redisOtimizando sites com o nosql redis
Otimizando sites com o nosql redisAllisson Azevedo
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesChristiano Anderson
 

Ähnlich wie Palestra CouchDB III ENSOL (20)

MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011
 
Apresentação Projeto Final Graduação UFF
Apresentação Projeto Final Graduação UFFApresentação Projeto Final Graduação UFF
Apresentação Projeto Final Graduação UFF
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchUma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Fisl banco de dados no sql de código aberto
Fisl   banco de dados no sql de código abertoFisl   banco de dados no sql de código aberto
Fisl banco de dados no sql de código aberto
 
Construindo um sistema distribuido usando rest
Construindo um sistema distribuido usando restConstruindo um sistema distribuido usando rest
Construindo um sistema distribuido usando rest
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl Workshop
 
Big data para programadores convencionais
Big data para programadores convencionaisBig data para programadores convencionais
Big data para programadores convencionais
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open source
 
Otimizando sites com o nosql redis
Otimizando sites com o nosql redisOtimizando sites com o nosql redis
Otimizando sites com o nosql redis
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
NoSQL Livre
NoSQL LivreNoSQL Livre
NoSQL Livre
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 

Mehr von Allisson Azevedo

Programação Assíncrona com Asyncio
Programação Assíncrona com AsyncioProgramação Assíncrona com Asyncio
Programação Assíncrona com AsyncioAllisson Azevedo
 
Introdução a linguagem Go
Introdução a linguagem GoIntrodução a linguagem Go
Introdução a linguagem GoAllisson Azevedo
 
Construindo um micro framework web em Python
Construindo um micro framework web em PythonConstruindo um micro framework web em Python
Construindo um micro framework web em PythonAllisson Azevedo
 
Consumindo API's OAuth{1,2} com Python
Consumindo API's OAuth{1,2} com PythonConsumindo API's OAuth{1,2} com Python
Consumindo API's OAuth{1,2} com PythonAllisson Azevedo
 
Tarefas Assíncronas com Django e Celery
Tarefas Assíncronas com Django e CeleryTarefas Assíncronas com Django e Celery
Tarefas Assíncronas com Django e CeleryAllisson Azevedo
 
Deploy completo de uma aplicação Django
Deploy completo de uma aplicação DjangoDeploy completo de uma aplicação Django
Deploy completo de uma aplicação DjangoAllisson Azevedo
 
Desenvolvimento Web com Django
Desenvolvimento Web com DjangoDesenvolvimento Web com Django
Desenvolvimento Web com DjangoAllisson Azevedo
 
Ecossistema Python Para Web
Ecossistema Python Para WebEcossistema Python Para Web
Ecossistema Python Para WebAllisson Azevedo
 
Empacotamento Rpm Na Pratica
Empacotamento Rpm Na PraticaEmpacotamento Rpm Na Pratica
Empacotamento Rpm Na PraticaAllisson Azevedo
 
Criando Pacotes Rpm Para O Fedora
Criando Pacotes Rpm Para O FedoraCriando Pacotes Rpm Para O Fedora
Criando Pacotes Rpm Para O FedoraAllisson Azevedo
 
Ruby on Rails Enecomp 2008
Ruby on Rails Enecomp 2008Ruby on Rails Enecomp 2008
Ruby on Rails Enecomp 2008Allisson Azevedo
 
Desenvolvendo uma distribuição Linux - Projeto Fedora
Desenvolvendo uma distribuição Linux - Projeto FedoraDesenvolvendo uma distribuição Linux - Projeto Fedora
Desenvolvendo uma distribuição Linux - Projeto FedoraAllisson Azevedo
 

Mehr von Allisson Azevedo (15)

Programação Assíncrona com Asyncio
Programação Assíncrona com AsyncioProgramação Assíncrona com Asyncio
Programação Assíncrona com Asyncio
 
Introdução a linguagem Go
Introdução a linguagem GoIntrodução a linguagem Go
Introdução a linguagem Go
 
Docker + Django
Docker + DjangoDocker + Django
Docker + Django
 
Construindo um micro framework web em Python
Construindo um micro framework web em PythonConstruindo um micro framework web em Python
Construindo um micro framework web em Python
 
Consumindo API's OAuth{1,2} com Python
Consumindo API's OAuth{1,2} com PythonConsumindo API's OAuth{1,2} com Python
Consumindo API's OAuth{1,2} com Python
 
Tarefas Assíncronas com Django e Celery
Tarefas Assíncronas com Django e CeleryTarefas Assíncronas com Django e Celery
Tarefas Assíncronas com Django e Celery
 
Deploy completo de uma aplicação Django
Deploy completo de uma aplicação DjangoDeploy completo de uma aplicação Django
Deploy completo de uma aplicação Django
 
Desenvolvimento Web com Django
Desenvolvimento Web com DjangoDesenvolvimento Web com Django
Desenvolvimento Web com Django
 
Ecossistema Python Para Web
Ecossistema Python Para WebEcossistema Python Para Web
Ecossistema Python Para Web
 
Palestra iv-ensol-nosql
Palestra iv-ensol-nosqlPalestra iv-ensol-nosql
Palestra iv-ensol-nosql
 
Empacotamento Rpm Na Pratica
Empacotamento Rpm Na PraticaEmpacotamento Rpm Na Pratica
Empacotamento Rpm Na Pratica
 
Criando Pacotes Rpm Para O Fedora
Criando Pacotes Rpm Para O FedoraCriando Pacotes Rpm Para O Fedora
Criando Pacotes Rpm Para O Fedora
 
Ruby on Rails Enecomp 2008
Ruby on Rails Enecomp 2008Ruby on Rails Enecomp 2008
Ruby on Rails Enecomp 2008
 
Desenvolvendo uma distribuição Linux - Projeto Fedora
Desenvolvendo uma distribuição Linux - Projeto FedoraDesenvolvendo uma distribuição Linux - Projeto Fedora
Desenvolvendo uma distribuição Linux - Projeto Fedora
 
RESTful Web Services
RESTful Web ServicesRESTful Web Services
RESTful Web Services
 

Kürzlich hochgeladen

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 

Kürzlich hochgeladen (6)

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

Palestra CouchDB III ENSOL

  • 1. CouchDB: Um banco de dados orientado a documento Allisson Azevedo http://blog.allisson.eti.br allisson@gmail.com 20/06/09
  • 2. Agenda □ História do CouchDB □ Problemas RDBMS □ Construído para o futuro □ Documentos (Documents) □ HTTP REST API □ Visões (Views) □ Replicação (Replication) 2
  • 3. História do CouchDB □ Damien Katz ◊ Trabalhos anteriores: Lotus Notes, MySQL ◊ Iniciou o CouchDB em 2005 ◊ C++ -> Erlang ◊ XML -> JSON ◊ OpenSource ◊ Funcionário da IBM ◊ Trabalho em tempo integral no CouchDB 3
  • 4. História do CouchDB (Cont) □ Versão atual 0.9.0 □ Projeto oficial da Apache.org 4
  • 5. Problemas RDBMS □ Foram projetados originalmente para: ◊ Um usuário ◊ Uma máquina (Escala verticalmente) ◊ Uma operação por vez ◊ Maior uso em aplicações científicas 5
  • 6. Problemas RDBMS (Cont) □ Necessidades atuais (Web) ◊ Milhares de usuários simultâneos ◊ Várias máquinas (Escala horizontalmente) ◊ Processamento em paralelo (Multicore) ◊ Maior uso em aplicações na internet 6
  • 7. Problemas RDBMS (Cont) □ Como escalar um RDBMS? ◊ Replicação Master-Slave ◊ Replicação Master-Master ◊ Sharding ◊ Qual o custo de usar uma dessas técnicas? □ Locking □ Normalização/Denormalização 7
  • 8. Constuído para o Futuro □ Erlang ◊ Desenvolvida para aplicações distribuídas e tolerante a falhas ◊ Suporte poderoso a concorrência ◊ Originalmente proprietária da Ericsson ◊ Opensource em 1998 8
  • 9. Constuído para o Futuro (Cont) □ Non-locking multi-version concurrency control (MVCC) ◊ Uso de versionamento, os dados nunca são sobrescritos ◊ Leituras não são corrompidas por escritas durante a leitura de dados ◊ Requisições concorrentes (Non-locking) ◊ Compactação elimina versões anteriores dos documentos 9
  • 10. Documentos □ Local onde os dados são mantidos □ Não tem schema definido ◊ Um documento pode ter um campo que outro documento não têm □ Formato JSON ◊ Pode incluir todo tipo de dados: números, strings, arrays, null, boolean □ Podem ter anexos (attachments) 10
  • 11. Documentos (Cont) { "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "1-1918148569" } 11
  • 12. Documentos (Cont) { "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "2-3325253701", "name": "Allisson Azevedo", "age": 26 } 12
  • 13. Documentos (Cont) { "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "3-3762716971", "name": "Allisson Azevedo", "age": 26, "type": "person" } 13
  • 14. Documentos (Cont) { "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "4-3870398970", "name": "Allisson Azevedo", "age": 26, "type": "person", "measures": { "height": 169, "weight": 68 } } 14
  • 15. Documentos (Cont) { "_id": "4a3d08ad999378959437f91d2d8fe647", "_rev": "5-3162066707", "name": "Allisson Azevedo", "age": 26, "type": "person", "measures": { "height": 169, "weight": 68 }, "_attachments": { "Imagem102.jpg": { "stub": true, "content_type": "image/jpeg", "length": 18223 } } } 15
  • 16. HTTP REST API □ Todas as operações são feitas via RESTful Web Services □ Quatro operações básicas para trabalhar com documentos ◊ Create: HTTP PUT /db/docid ◊ Create: HTTP POST /db ◊ Read: HTTP GET /db/docid ◊ Update: HTTP PUT /db/docid ◊ Delete: HTTP DELETE /db/docid 16
  • 17. HTTP REST API (Cont) □ Toda linguagem de programação tem as ferramentas necessárias para fazer requisições HTTP □ A maioria das linguagens já conta com ferramentas específicas para tratar com RESTful Web Services 17
  • 18. HTTP REST API (Cont) curl -X PUT http://127.0.0.1:5984/teste2 {"ok":true} curl -X GET http://127.0.0.1:5984/_all_dbs ["teste2","teste"] curl -X DELETE http://127.0.0.1:5984/teste2 {"ok":true} curl -X GET http://127.0.0.1:5984/_all_dbs ["teste"] 18
  • 19. HTTP REST API (Cont) curl -X GET http://127.0.0.1:5984/teste/4a3d08ad99937 8959437f91d2d8fe647 {"_id":"4a3d08ad999378959437f91d2d8fe64 7","_rev":"5-3162066707","name":"Allisson Azevedo","age":26,"type":"person","measure s": {"height":169,"weight":68},"_attachments": {"Imagem102.jpg": {"stub":true,"content_type":"image/jpeg","l ength":18223}}} 19
  • 20. HTTP REST API (Cont) curl -X PUT -d '{"name":"Steven Seagal", "age":58}' http://127.0.0.1:5984/teste/steven-seagal {"ok":true,"id":"steven-seagal","rev":"1- 2296068035"} curl -X POST -d '{"name":"Chuck Norris", "age":69}' http://127.0.0.1:5984/teste {"ok":true,"id":"6ae18b5516ccac7abe3eaf07 b86b8ec8","rev":"1-3534466899"} 20
  • 21. HTTP REST API (Cont) curl -X PUT -d '{"_id":"steven-seagal","_rev":"1- 2296068035","name":"Steven Seagal","age":58, "roundhousekick":false}' http://127.0.0.1:5984/teste/steven-seagal {"ok":true,"id":"steven-seagal","rev":"2- 3346317691"} curl -X GET http://127.0.0.1:5984/teste/steven- seagal {"_id":"steven-seagal","_rev":"2- 3346317691","name":"Steven Seagal","age":58,"roundhousekick":false} 21
  • 22. HTTP REST API (Cont) curl -X DELETE http://127.0.0.1:5984/teste/steven-seagal? rev=2-3346317691 {"ok":true,"id":"steven-seagal","rev":"3- 793968873"} curl -X GET http://127.0.0.1:5984/teste/steven-seagal {"error":"not_found","reason":"deleted"} 22
  • 23. Visões □ Extrair data dos documentos □ Map/Reduce ◊ Map: Extrai dados dos documentos ◊ Reduce: Realiza cálculos com os valores obtidos no Map □ Visões podem ser temporárias ou fixas 23
  • 24. Visões (Cont) Exemplo de função Map function(doc) { if (doc.name && doc.age) { emit(doc.name, doc.age); } } 24
  • 25. Visões (Cont) Exemplo de função Reduce function(keys, values, rereduce) { return sum(values); } 25
  • 30. Replicação □ Replicação uni-direcional □ A cópia de dados utiliza apenas as últimas versões dos documentos □ A operação é realizada enviando uma requisição POST para a url /_replicate ◊ Banco de origem ◊ Banco de destino 30
  • 31. Replicação (Cont) □ Resolução automática de conflitos ◊ Seleciona um documento como sendo o mais atual e os outros conflitos são armazenados como versões anteriores 31
  • 39. Referências □ http://couchdb.apache.org/ □ http://wiki.apache.org/couchdb/ □ http://books.couchdb.org/relax/ 39
  • 40. Obrigado! 40