CouchDB vs Postgres em Rails

1,866 views

Published on

A palestra aborda diferenças entre o SGBDs PostgreSQL CouchDB, ressaltando as diferenças conceituais e apresentando comparativos de performance.

por Diogo Biazus e Johalf Farina no 1° RS on Rails

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,866
On SlideShare
0
From Embeds
0
Number of Embeds
132
Actions
Shares
0
Downloads
16
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • CouchDB? C luster O f U nreliable C ommodity H ardware; Gerenciador de banco de dados orientado a documentos; Software livre da Apache; Usar, modificar e distribuír desde que um aviso de uso do código licenciado da Apache seja mantido.
  • CouchDB? C luster O f U nreliable C ommodity H ardware; Gerenciador de banco de dados orientado a documentos; Software livre da Apache; Usar, modificar e distribuír desde que um aviso de uso do código licenciado da Apache seja mantido.
  • CouchDB? C luster O f U nreliable C ommodity H ardware; Gerenciador de banco de dados orientado a documentos; Software livre da Apache; Usar, modificar e distribuír desde que um aviso de uso do código licenciado da Apache seja mantido.
  • CouchDB? C luster O f U nreliable C ommodity H ardware; Gerenciador de banco de dados orientado a documentos; Software livre da Apache; Usar, modificar e distribuír desde que um aviso de uso do código licenciado da Apache seja mantido.
  • CouchDB vs Postgres em Rails

    1. 1. CouchDB vs PostgreSQL em Rails Diogo Biazus (diogob@gmail.com) e Johalf Farina (johalffarina@gmail.com)
    2. 2. CouchDB ?
    3. 3. <ul><li>Projeto da Apache.org;
    4. 4. Nasceu em 2005;
    5. 5. OpenSource;
    6. 6. SGDB orientado a documentos;
    7. 7. Versão atual 0.9.1. </li></ul>CouchDB
    8. 8. MySQL PostgreSQL SQLite SGBDs relacionais SimpleDB MongoDB CouchDB SGBDs orientados a documentos Cenário atual de SGBDs
    9. 9. SGBD orientado a documentos <ul><li>Os dados não são armazenados em linhas e colunas de tabelas relacionadas ou não e sim em documentos ;
    10. 10. Não há limite no armazenamento das informações;
    11. 11. Documentos são armazenados e acessados atravéz de um identificador;
    12. 12. Livre de schemas. </li></ul>
    13. 13. Agner Krarup
    14. 14. Porque CouchDB ?
    15. 15. { &quot;_id&quot;: &quot;acdd4a90-6e85-012c-a43d-001e68078287&quot;, &quot;_rev&quot;: &quot;4-1059007316&quot;, &quot;name&quot;: &quot;Lorem ipsum dolor asit amet&quot;, &quot;created_at&quot;: &quot;2009/08/18 21:32:18 +0000&quot;, &quot;email&quot;: &quot;lipsum@lipsum.com&quot; } Json rules!!
    16. 16. MapReduce!
    17. 17. Interface HTTP RESTfull <ul><li>C reate: HTTP POST /banco/db
    18. 18. R ead: HTTP GET /banco/doc_id
    19. 19. U pdate: HTTP PUT /banco/doc_id
    20. 20. D elete: HTTP DELETE /banco/doc_id </li></ul>
    21. 21. Replicaçãoooo!!!!
    22. 22. RDBMS Slave Slave Slave Master
    23. 23. Time to Relax!!
    24. 25. Versionamento
    25. 26. Rááááááá
    26. 27. Os dados nunca são sobrescritos
    27. 28. CouchDB on Rails = Plugin ou Gem
    28. 29. ActiveCouch http://github.com/arunthampi/activecouch/tree/master
    29. 30. RelaxDB http://github.com/paulcarey/relaxdb/tree/master
    30. 31. Couch_potato http://github.com/langalex/couch_potato/tree/master
    31. 32. CouchRest + Couch_foo = Happiness http://github.com/jchris/couchrest/tree/master http://github.com/georgepalmer/couch_foo/tree/master
    32. 33. Couch_foo Model class Participant < CouchFoo::Base property :name, String property :email, String property :created_at, DateTime validates_presence_of :name validates_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
    33. 34. Alguns recursos <ul><li>http://couchdb.apache.org/
    34. 35. http://en.wikipedia.org/wiki/CouchDB
    35. 36. http://books.couchdb.org/relax/
    36. 37. http://planet.couchdb.org/
    37. 38. http://twitter.com/CouchDB </li></ul>
    38. 39. PostgreSQL ?
    39. 40. <ul><li>Nasceu em 1996;
    40. 41. OpenSource;
    41. 42. SGDB SQL/Relacional;
    42. 43. Versão atual 8.4;
    43. 44. Desenvolvido em C;
    44. 45. Diversas extensões; </li></ul>PostgreSQL
    45. 46. Porque PostgreSQL ?
    46. 47. Extensões <ul><li>PGTemporal
    47. 48. DBI-Link
    48. 49. Diversas funções de criptografia e digests
    49. 50. Levenshtein, Soundex e trigramas </li></ul>
    50. 51. I hate javascript <ul><li>PL/Ruby
    51. 52. PL/Python
    52. 53. PL/Perl
    53. 54. PL/Java
    54. 55. etc... </li></ul>
    55. 56. CouchDB != Relacional <ul><li>O Rails foi desenvolvido para bases SQL
    56. 57. Trabalhar com Rails é preferir convenções a configurações
    57. 58. Tentar usar o CouchDB como base SQL ou o Rails com uma base orientada a documentos não é elegante
    58. 59. Funcional x Declarativo </li></ul>
    59. 60. PostgreSQL on Rails <ul><li>Gem ruby-pg
    60. 61. Integração nativa com AR
    61. 62. Plugin sexy_pg_constraints
    62. 63. Plugin para integrar via Sequel </li></ul>
    63. 64. Alguns recursos <ul><li>http://www.postgresql.org/
    64. 65. http://en.wikipedia.org/wiki/PostgreSQL
    65. 66. http://www.postgresql.org.br/
    66. 67. http://planet.postgresql.org/
    67. 68. http://planeta.postgresql.org.br/
    68. 69. http://twitter.com/PostgreSQL </li></ul>
    69. 70. Performance <ul><li>O momento que todos esperavam
    70. 71. Testes feitos com script/performance/profiler
    71. 72. Cada teste foi feito com uma média de tempo de 1000 repetições de chamadas diretas ao modelo
    72. 73. A comparação é de CouchFoo x ruby-pg e não de CouchDB x PostgreSQL </li></ul>
    73. 74. Performance <ul><li>CouchDB 0.9.1
    74. 75. PostgreSQL 8.3.4
    75. 76. Testes muito simples, não levam em consideração: </li><ul><li>Consultas complexas
    76. 77. Concorrência
    77. 78. Múltiplos núcleos (somente 2) </li></ul></ul>
    78. 79. 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

    ×