Transcript
Page 1: CouchDB vs PostgreSQL no Rails

CouchDB vs PostgreSQL em Rails

Diogo Biazus ([email protected]) e Johalf Farina ([email protected])

Page 2: CouchDB vs PostgreSQL no Rails

CouchDB ?

Page 3: CouchDB vs PostgreSQL no Rails

Projeto da Apache.org; Nasceu em 2005; OpenSource; SGDB orientado a documentos; Versão atual 0.9.1.

CouchDB

Page 4: CouchDB vs PostgreSQL no Rails

MySQLPostgreSQL

SQLite

SGBDs relacionais

SimpleDBMongoDB

CouchDB

SGBDs orientados a documentos

Cenário atual de SGBDs

Page 5: CouchDB vs PostgreSQL no Rails

SGBD orientado a documentos

Os dados não são armazenados em linhas e colunas de tabelas relacionadas ou não e sim em documentos; Não há limite no armazenamento das informações; Documentos são armazenados e acessados atravéz de um identificador; Livre de schemas.

Page 6: CouchDB vs PostgreSQL no Rails

Agner Krarup

Page 7: CouchDB vs PostgreSQL no Rails

Porque CouchDB ?

Page 8: CouchDB vs PostgreSQL no Rails

{ "_id": "acdd4a90-6e85-012c-a43d-001e68078287", "_rev": "4-1059007316", "name": "Lorem ipsum dolor asit amet", "created_at": "2009/08/18 21:32:18 +0000", "email": "[email protected]"}Json rules!!

Page 9: CouchDB vs PostgreSQL no Rails

MapReduce!

Page 10: CouchDB vs PostgreSQL no Rails

Interface HTTP RESTfull

Create: HTTP POST /banco/db Read: HTTP GET /banco/doc_id Update: HTTP PUT /banco/doc_id Delete: HTTP DELETE /banco/doc_id

Page 11: CouchDB vs PostgreSQL no Rails

Replicaçãoooo!!!!

Page 12: CouchDB vs PostgreSQL no Rails

RDBMS

Slave Slave Slave

Master

Page 13: CouchDB vs PostgreSQL no Rails

Time to Relax!!

Page 14: CouchDB vs PostgreSQL no Rails
Page 15: CouchDB vs PostgreSQL no Rails

Versionamento

Page 16: CouchDB vs PostgreSQL no Rails

Rááááááá

Page 17: CouchDB vs PostgreSQL no Rails

Os dados nunca são sobrescritos

Page 18: CouchDB vs PostgreSQL no Rails

CouchDB on Rails = Plugin ou Gem

Page 19: CouchDB vs PostgreSQL no Rails

ActiveCouch

http://github.com/arunthampi/activecouch/tree/master

Page 20: CouchDB vs PostgreSQL no Rails

RelaxDB

http://github.com/paulcarey/relaxdb/tree/master

Page 21: CouchDB vs PostgreSQL no Rails

Couch_potato

http://github.com/langalex/couch_potato/tree/master

Page 22: CouchDB vs PostgreSQL no Rails

CouchRest + Couch_foo = Happiness

http://github.com/jchris/couchrest/tree/master

http://github.com/georgepalmer/couch_foo/tree/master

Page 23: CouchDB vs PostgreSQL no Rails

Couch_foo Model

class Participant < CouchFoo::Baseproperty :name, Stringproperty :email, String

property :created_at, DateTime

validates_presence_of :namevalidates_presence_of :email

validates_format_of :email, :with => %r{^(?:[_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-zA-Z0-9\-\.]+)*(\.[a-z]{2,4})$}i, :if => :email?end

Page 24: CouchDB vs PostgreSQL no Rails

Alguns recursos

http://couchdb.apache.org/ http://en.wikipedia.org/wiki/CouchDB http://books.couchdb.org/relax/ http://planet.couchdb.org/ http://twitter.com/CouchDB

Page 25: CouchDB vs PostgreSQL no Rails

PostgreSQL ?

Page 26: CouchDB vs PostgreSQL no Rails

Nasceu em 1996; OpenSource; SGDB SQL/Relacional; Versão atual 8.4; Desenvolvido em C; Diversas extensões;

PostgreSQL

Page 27: CouchDB vs PostgreSQL no Rails

Porque PostgreSQL ?

Page 28: CouchDB vs PostgreSQL no Rails

Extensões

PGTemporal

DBI-Link

Diversas funções de criptografia e digests

Levenshtein, Soundex e trigramas

Page 29: CouchDB vs PostgreSQL no Rails

I hate javascript

PL/Ruby

PL/Python

PL/Perl

PL/Java

etc...

Page 30: CouchDB vs PostgreSQL no Rails

CouchDB != Relacional

O Rails foi desenvolvido para bases SQL

Trabalhar com Rails é preferir convenções a configurações

Tentar usar o CouchDB como base SQL ou o Rails com uma base orientada a documentos não é elegante

Funcional x Declarativo

Page 31: CouchDB vs PostgreSQL no Rails

PostgreSQL on Rails

Gem ruby-pg

Integração nativa com AR

Plugin sexy_pg_constraints

Plugin para integrar via Sequel

Page 32: CouchDB vs PostgreSQL no Rails

Alguns recursos

http://www.postgresql.org/ http://en.wikipedia.org/wiki/PostgreSQL http://www.postgresql.org.br/ http://planet.postgresql.org/ http://planeta.postgresql.org.br/ http://twitter.com/PostgreSQL

Page 33: CouchDB vs PostgreSQL no Rails

Performance

O momento que todos esperavam

Testes feitos com script/performance/profiler

Cada teste foi feito com uma média de tempo de 1000 repetições de chamadas diretas ao modelo

A comparação é de CouchFoo x ruby-pg e não de CouchDB x PostgreSQL

Page 34: CouchDB vs PostgreSQL no Rails

Performance

CouchDB 0.9.1

PostgreSQL 8.3.4

Testes muito simples, não levam em consideração:

Consultas complexas

Concorrência

Múltiplos núcleos (somente 2)

Page 35: CouchDB vs PostgreSQL no Rails

Performance

Operação PG (ms) CouchDB (ms)

.all (banco vazio) 13,80 39,71

.create 117,58 296,57

.all (após .create) 35,24 60,18

.find_by 26,64 58,51


Top Related