CouchDB vs Postgres em Rails
-
Upload
juan-maiz -
Category
Technology
-
view
1.634 -
download
1
Transcript of CouchDB vs Postgres em Rails
CouchDB vs PostgreSQL em Rails
Diogo Biazus ([email protected]) e Johalf Farina ([email protected])
CouchDB ?
Projeto da Apache.org; Nasceu em 2005; OpenSource; SGDB orientado a documentos; Versão atual 0.9.1.
CouchDB
MySQLPostgreSQL
SQLite
SGBDs relacionais
SimpleDBMongoDB
CouchDB
SGBDs orientados a documentos
Cenário atual de SGBDs
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.
Agner Krarup
Porque CouchDB ?
{ "_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!!
MapReduce!
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
Replicaçãoooo!!!!
RDBMS
Slave Slave Slave
Master
Time to Relax!!
Versionamento
Rááááááá
Os dados nunca são sobrescritos
CouchDB on Rails = Plugin ou Gem
ActiveCouch
http://github.com/arunthampi/activecouch/tree/master
RelaxDB
http://github.com/paulcarey/relaxdb/tree/master
Couch_potato
http://github.com/langalex/couch_potato/tree/master
CouchRest + Couch_foo = Happiness
http://github.com/jchris/couchrest/tree/master
http://github.com/georgepalmer/couch_foo/tree/master
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
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
PostgreSQL ?
Nasceu em 1996; OpenSource; SGDB SQL/Relacional; Versão atual 8.4; Desenvolvido em C; Diversas extensões;
PostgreSQL
Porque PostgreSQL ?
Extensões
PGTemporal
DBI-Link
Diversas funções de criptografia e digests
Levenshtein, Soundex e trigramas
I hate javascript
PL/Ruby
PL/Python
PL/Perl
PL/Java
etc...
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
PostgreSQL on Rails
Gem ruby-pg
Integração nativa com AR
Plugin sexy_pg_constraints
Plugin para integrar via Sequel
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
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
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)
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