CouchDB vs PostgreSQL no Rails

Download CouchDB vs PostgreSQL no Rails

Post on 11-Jul-2015

1.509 views

Category:

Technology

4 download

Embed Size (px)

TRANSCRIPT

<p>CouchDB vs PostgreSQL em Rails<br /><br />Diogo Biazus (diogob@gmail.com) e Johalf Farina (johalffarina@gmail.com)</p> <p>CouchDB ?CouchDB?</p> <p>Cluster Of Unreliable Commodity Hardware;</p> <p>Gerenciador de banco de dados orientado a documentos;</p> <p>Software livre da Apache;</p> <p>Usar, modificar e distribur desde que um aviso de uso do cdigo licenciado da Apache seja mantido. </p> <p>Projeto da Apache.org; </p> <p>Nasceu em 2005;</p> <p>OpenSource;</p> <p>SGDB orientado a documentos;</p> <p>Verso atual 0.9.1.</p> <p>CouchDB</p> <p>MySQL<br />PostgreSQL SQLite</p> <p>SGBDs relacionais</p> <p>SimpleDBMongoDBCouchDB</p> <p>SGBDs orientados a documentos</p> <p>Cenrio atual de SGBDs</p> <p>SGBD orientado a documentos</p> <p>Os dados no so armazenados em linhas e colunas de tabelas relacionadas ou no e sim em documentos;</p> <p>No h limite no armazenamento das informaes;</p> <p>Documentos so armazenados e acessados atravz de um identificador;</p> <p>Livre de schemas.</p> <p>Agner Krarup </p> <p>Porque CouchDB ?CouchDB?</p> <p>Cluster Of Unreliable Commodity Hardware;</p> <p>Gerenciador de banco de dados orientado a documentos;</p> <p>Software livre da Apache;</p> <p>Usar, modificar e distribur desde que um aviso de uso do cdigo licenciado da Apache seja mantido. </p> <p>{"_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": "lipsum@lipsum.com"}</p> <p>Json rules!!</p> <p>MapReduce!</p> <p>Interface HTTP RESTfull</p> <p>Create: HTTP POST /banco/db</p> <p>Read: HTTP GET /banco/doc_id</p> <p>Update: HTTP PUT /banco/doc_id</p> <p>Delete: HTTP DELETE /banco/doc_id</p> <p>Replicaoooo!!!!</p> <p>RDBMS</p> <p>Slave</p> <p>Slave</p> <p>Slave</p> <p>Master</p> <p>Time to Relax!!CouchDB?</p> <p>Cluster Of Unreliable Commodity Hardware;</p> <p>Gerenciador de banco de dados orientado a documentos;</p> <p>Software livre da Apache;</p> <p>Usar, modificar e distribur desde que um aviso de uso do cdigo licenciado da Apache seja mantido. </p> <p>Versionamento</p> <p>CouchDB?</p> <p>Cluster Of Unreliable Commodity Hardware;</p> <p>Gerenciador de banco de dados orientado a documentos;</p> <p>Software livre da Apache;</p> <p>Usar, modificar e distribur desde que um aviso de uso do cdigo licenciado da Apache seja mantido. </p> <p>R</p> <p>Os dados nunca so sobrescritos</p> <p>CouchDB on Rails</p> <p>= Plugin ou Gem</p> <p>ActiveCouch</p> <p>http://github.com/arunthampi/activecouch/tree/master</p> <p>RelaxDB</p> <p>http://github.com/paulcarey/relaxdb/tree/master</p> <p>Couch_potato</p> <p>http://github.com/langalex/couch_potato/tree/master</p> <p>CouchRest + Couch_foo = Happiness</p> <p>http://github.com/jchris/couchrest/tree/master</p> <p>http://github.com/georgepalmer/couch_foo/tree/master</p> <p>Couch_foo Model</p> <p>class Participant &lt; CouchFoo::Baseproperty :name, Stringproperty :email, String</p> <p>property :created_at, DateTime</p> <p>validates_presence_of :namevalidates_presence_of :email</p> <p>validates_format_of :email, :with =&gt; %r{^(?:[_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-zA-Z0-9\-\.]+)*(\.[a-z]{2,4})$}i, :if =&gt; :email?end</p> <p>Alguns recursos</p> <p>http://couchdb.apache.org/ </p> <p>http://en.wikipedia.org/wiki/CouchDB</p> <p>http://books.couchdb.org/relax/</p> <p>http://planet.couchdb.org/</p> <p>http://twitter.com/CouchDB</p> <p>PostgreSQL ?</p> <p>Nasceu em 1996;</p> <p>OpenSource;</p> <p>SGDB SQL/Relacional;</p> <p>Verso atual 8.4;</p> <p>Desenvolvido em C;</p> <p>Diversas extenses;</p> <p>PostgreSQL</p> <p>Porque PostgreSQL ?</p> <p>Extenses</p> <p>PGTemporal</p> <p>DBI-Link</p> <p>Diversas funes de criptografia e digests</p> <p>Levenshtein, Soundex e trigramas</p> <p>I hate javascript</p> <p>PL/Ruby</p> <p>PL/Python</p> <p>PL/Perl</p> <p>PL/Java</p> <p>etc...</p> <p>CouchDB != Relacional</p> <p>O Rails foi desenvolvido para bases SQL</p> <p>Trabalhar com Rails preferir convenes a configuraes</p> <p>Tentar usar o CouchDB como base SQL ou o Rails com uma base orientada a documentos no elegante</p> <p>Funcional x Declarativo</p> <p>PostgreSQL on Rails</p> <p>Gem ruby-pg</p> <p>Integrao nativa com AR</p> <p>Plugin sexy_pg_constraints</p> <p>Plugin para integrar via Sequel</p> <p>Alguns recursos</p> <p>http://www.postgresql.org/ </p> <p>http://en.wikipedia.org/wiki/PostgreSQL </p> <p>http://www.postgresql.org.br/</p> <p>http://planet.postgresql.org/</p> <p>http://planeta.postgresql.org.br/</p> <p>http://twitter.com/PostgreSQL</p> <p>Performance</p> <p>O momento que todos esperavam</p> <p>Testes feitos com script/performance/profiler</p> <p>Cada teste foi feito com uma mdia de tempo de 1000 repeties de chamadas diretas ao modelo</p> <p>A comparao de CouchFoo x ruby-pg e no de CouchDB x PostgreSQL</p> <p>Performance</p> <p>CouchDB 0.9.1</p> <p>PostgreSQL 8.3.4</p> <p>Testes muito simples, no levam em considerao:Consultas complexas</p> <p>Concorrncia</p> <p>Mltiplos ncleos (somente 2)</p> <p>Performance</p> <p>OperaoPG (ms)CouchDB (ms)</p> <p>.all (banco vazio)13,8039,71</p> <p>.create117,58296,57</p> <p>.all (aps .create)35,2460,18</p> <p>.find_by26,6458,51</p>