Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

O Elefante Poliglota

582 views

Published on

Conhecimento compartilhado no PGDay PR 2015 em Curitiba, UTFPR. Falamos sobre como usar a extensibilidade do PostgreSQL para torná-lo um servidor WEB. Passeamos sobre temas como Javascript, Websockets, plv8, background workers e outras coisas.

Published in: Technology
  • DOWNLOAD THAT BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book that can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer that is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story That Helped Ignite a Movement,-- Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money That the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths that Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • (Unlimited)....ACCESS WEBSITE Over for All Ebooks ................ accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M }
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Download or read that Ebooks here ... ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m77EgH } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

O Elefante Poliglota

  1. 1. O Elefante Poliglota Dickson S. Guedes @guediz PGDay PR 2015 - Curitiba, PR
  2. 2. poliglota adjetivo e substantivo de dois gêneros 1. que ou aquele que sabe ou fala muitas línguas. 2. que está escrito em muitas línguas; poliglótico. 3. diz-se da ave que é capaz de imitar muitos sons e arremedar outras aves.
  3. 3. ATENÇÃO: esta palestra é uma viagem!
  4. 4. vamos começar com uma hipótese
  5. 5. seria possível transformar um servidor Postgres em um servidor WEB?
  6. 6. ahn?! que esse careca ta falando?
  7. 7. vamos começar a viagem…
  8. 8. no mundo "dos computadô"
  9. 9. o dado nu e crú
  10. 10. [ entrada ] -> [ processamento ] -> [ saida ]
  11. 11. continuo processo de transformação de dados
  12. 12. no mundo "das Internet"
  13. 13. Browser
  14. 14. Apache, Rails, Django, JBoss, Cowboy, Phoenix, Node.js
  15. 15. Javascript
  16. 16. JSON
  17. 17. Javascript Object Notation { "nome":"Joao", "endereco":{ "cep":"88000-00", "rua":"DasSaudades", "nro":453, "bairro":"Centro" }, "dependentes":[ {"nome":"Maria","parentesco":"esposa"}, {"nome":"Mario","parentesco":"filho"}, {"nome":"Marina","parentesco":"filha"} ] }
  18. 18. ecoando varpessoa={ "nome":"Joao", "endereco":{ "cep":"88000-00", "rua":"DasSaudades", "nro":453, "bairro":"Centro" }, "dependentes":[ {"nome":"Maria","parentesco":"esposa"}, {"nome":"Mario","parentesco":"filho"}, {"nome":"Marina","parentesco":"filha"} ] } console.log(pessoa.nome); =>"Joao" console.log(pessoa["dependentes"][0]["nome"]);=>"Maria"
  19. 19. Voltando ao Javascript
  20. 20. callback varaudita=function(objeto){ console.log(objeto.nome+"foiinserido!"); } varpessoa=newPessoa(); pessoa.on('after-save',audita); pessoa={"nome":"Joao",...} pessoa.save(); =>Joaofoiinserido!
  21. 21. alguem lembra?
  22. 22. Websockets
  23. 23. pub/sub
  24. 24. o movimento de Javascriptização
  25. 25. Node.js
  26. 26. respirem …
  27. 27. no mundo do Postgres
  28. 28. a extensibilidade que liberta
  29. 29. Postgres não é apenas um SGDB
  30. 30. é uma plataforma de desenvolvimento de aplicações
  31. 31. o catalogo #dtpg_catalog. Listofrelations Schema | Name |Type | Owner ------------+-------------------------+-------+---------- pg_catalog|pg_aggregate |table|postgres ... pg_catalog|pg_class |table|postgres ... pg_catalog|pg_database |table|postgres pg_catalog|pg_foreign_data_wrapper|table|postgres pg_catalog|pg_foreign_server |table|postgres pg_catalog|pg_foreign_table |table|postgres pg_catalog|pg_index |table|postgres ... pg_catalog|pg_language |table|postgres ... pg_catalog|pg_operator |table|postgres ... pg_catalog|pg_type |table|postgres pg_catalog|pg_user_mapping |table|postgres
  32. 32. operadores (pg_operator) + - / * o seu mais novo operador pode estar aqui …
  33. 33. tipos (pg_type) integer numeric text … json jsonb o seu tipo pode estar aqui também
  34. 34. linguagens (pg_language) plpgsql plperl plpython plv8 - javascript a sua linguagem pode estar aqui também
  35. 35. respirem …
  36. 36. plv8
  37. 37. plv8 - Javascript no Postgres
  38. 38. vamos usar o mesmo exemplo do Javascript DOLANGUAGEplv8 $$ varpessoa={ "nome":"Joao", "endereco":{ "cep":"88000-00", "rua":"DasSaudades", "nro":453, "bairro":"Centro" }, "dependentes":[ {"nome":"Maria","parentesco":"esposa"}, {"nome":"Mario","parentesco":"filho"}, {"nome":"Marina","parentesco":"filha"} ] } plv8.elog(NOTICE,pessoa.nome); plv8.elog(NOTICE,pessoa["dependentes"][0]["nome"]); $$;
  39. 39. FDW - foreign data wrappers (pg_foreign_data_wrapper) file_fdw postgres_fdw mysql_fdw mongo_fdw multicorn que tal o seu aqui também?
  40. 40. FDW - um exemplo nativo CREATEEXTENSIONpostgres_fdw; CREATESERVERservidor_de_consultas FOREIGNDATAWRAPPERpostgres_fdw OPTIONS(host'192.168.1.1',dbname'banco',port'5432'); CREATEUSERMAPPINGFORCURRENT_USER SERVERservidor_de_consultas OPTIONS(user'usuario_consulta',password'consulta'); CREATEFOREIGNTABLEpessoas(cpfnumeric,nomevarchar) SERVERservidor_de_consultas OPTIONS(schema_name'recursos_humanos',table_name'tb_funcionarios'); EXPLAIN(ANALYZE,VERBOSE,BUFFERS) SELECT*FROMpessoas WHEREcpf=1234567891; QUERYPLAN --------------------------------------------------------------------------------------------- --------------------------------------------------------- ForeignScanonpublic.pessoas (cost=100.00..118.06rows=3width=104)(actualtime=46.039.. 46.040rows=1loops=1) Output:cpf,nome RemoteSQL:SELECTcpf,nomeFROMrecursos_humanos.tb_funcionariosWHERE((cpf=123456789 1::numeric)) Planningtime:0.061ms Executiontime:105.232ms (5registros)
  41. 41. FDW - um exemplo multicorn http://multicorn.org/implementing-an-fdw/
  42. 42. BGW - background workers
  43. 43. BGW - uma visão geral executa junto com o postgres morre junto com o postgres mas também pode ser dinamico é um daemon o poder esta nas mãos de seu criador você tem que escreve-lo em C
  44. 44. BGW - um exemplo postmaster | `--autovacuum | `--checkpointer | `--bgwriter | `--matador_de_conexoes_ociosas | `--analisador_da_saude_do_banco . . .
  45. 45. background worker como uma porta de entrada
  46. 46. BGW é em C, ou seja …
  47. 47. Mas você pode inicia-lo utilizando uma função do banco -- SELECTnet_http_server(8000);
  48. 48. e um novo BGW inicia postmaster | `--autovacuum | `--checkpointer | `--bgwriter | `--matador_de_conexoes_ociosas | `--analisador_da_saude_do_banco | `--net_http_server . . .
  49. 49. LISTEN/NOTIFY
  50. 50. LISTEN SESSAOA SESSAOB psql-dbanco |psql-dbanco | >LISTENusuario_logou; |>...
  51. 51. LISTEN SESSAOA SESSAOB psql-dbanco |psql-dbanco | >LISTENusuario_logou; |>... >LISTENusuario_logou; |>... |>INSERTINTOlogin(current_timestamp,'JOSE' ); ...ocaracoxilouporunsminutos... |
  52. 52. LISTEN SESSAOA SESSAOB psql-dbanco |psql-dbanco | >LISTENusuario_logou; |>... >LISTENusuario_logou; |>... |>INSERTINTOlogin(current_timestamp,'JOSE' ); ...ocaracoxilouporunsminutos... | |>NOTIFYusuario_logou,'JOSE'; |
  53. 53. LISTEN SESSAOA SESSAOB psql-dbanco |psql-dbanco | >LISTENusuario_logou; |>... >LISTENusuario_logou; |>... |>INSERTINTOlogin(current_timestamp,'JOSE' ); ...ocaracoxilouporunsminutos... | |>NOTIFYusuario_logou,'JOSE'; >LISTENusuario_logou; | |
  54. 54. LISTEN SESSAOA SESSAOB psql-dbanco |psql-dbanco | >LISTENusuario_logou; |>... >LISTENusuario_logou; |>... |>INSERTINTOlogin(current_timestamp,'JOSE' ); ...ocaracoxilouporunsminutos... | |>NOTIFYusuario_logou,'JOSE'; >LISTENusuario_logou; | | Notificaçãoassíncrona"usuario_logou"com | mensagem"JOSE"recebidadoprocessodo | servidorcomPID25439. |
  55. 55. a contrib tcn test=#createtabletcndata test-# ( test(# aintnotnull, test(# bdatenotnull, test(# ctext, test(# primarykey(a,b) test(# ); CREATETABLE test=#createtriggertcndata_tcn_trigger test-# afterinsertorupdateordeleteontcndata test-# foreachrowexecuteproceduretriggered_change_notification(); CREATETRIGGER
  56. 56. vendo o resultado da tcn test=#listentcn; LISTEN test=#insertintotcndatavalues(1,date'2012-12-22','one'), test-# (1,date'2012-12-23','another'), test-# (2,date'2012-12-23','two'); INSERT03 Asynchronousnotification"tcn"withpayload""tcndata",I,"a"='1',"b"='2012-12-22'"received fromserverprocesswithPID22770. Asynchronousnotification"tcn"withpayload""tcndata",I,"a"='1',"b"='2012-12-23'"received fromserverprocesswithPID22770. Asynchronousnotification"tcn"withpayload""tcndata",I,"a"='2',"b"='2012-12-23'"received fromserverprocesswithPID22770. test=#updatetcndatasetc='uno'wherea=1; UPDATE2 Asynchronousnotification"tcn"withpayload""tcndata",U,"a"='1',"b"='2012-12-22'"received fromserverprocesswithPID22770. Asynchronousnotification"tcn"withpayload""tcndata",U,"a"='1',"b"='2012-12-23'"received fromserverprocesswithPID22770. test=#deletefromtcndatawherea=1andb=date'2012-12-22'; DELETE1 Asynchronousnotification"tcn"withpayload""tcndata",D,"a"='1',"b"='2012-12-22'"received fromserverprocesswithPID22770.
  57. 57. respirem …
  58. 58. finalizando …
  59. 59. (quase)
  60. 60. hipoteticamente pensando …
  61. 61. como poderia ser um servidor web no Postgres?
  62. 62. iniciando a aplicação CREATESCHEMAtodo_list; CREATETABLEtodo_list.itens(conteudojsonb); CREATEINDEXix_itens_idONtodo_list.itensUSINGGIN((conteudo->'id')); SELECTpg_web_app_start('todo_list',8000);
  63. 63. guedes@betelgeuse ~$ curl-XPUThttp://ip.servidor:8000/item/-d'{"id":1,"descricao":"compartilharconhecime nto"}' {"response":"created"} curl-XGEThttp://ip.servidor:8000/item/1 {"id":1,"descricao":"compartilharconhecimento"} curl-XDELETEhttp://ip.servidor:8000/item/1 {"response":"deleted"} curl-XGEThttp://ip.servidor:8000/item/1
  64. 64. qual é a magica do pg_web_app_start('todo_list',8000)?
  65. 65. todo_list.app() CREATEFUNCTIONtodo_list.app()RETURNSjsonbLANGUAGEplv8AS$$ varTodoListApp=PgWebApp(); TodoListApp.get('/',function(req,res){ res.send('<html>....</html>'); }); TodoListApp.get('/item/:id',function(req,res){ plv8.execute('SELECT*FROMtodo_list.itensWHEREid=$1',[req.params.id]); }); TodoListApp.put('/item',function(req,res){ plv8.execute('INSERTINTOtodo_list.itensVALUES($1)',[req.body]); }); TodoListApp.post('/item',function(req,res){ plv8.execute('UPDATEtodo_list.itensSETconteudo=$1WHEREid=$2',[req.body,req.para ms.id]); }); TodoListApp.delete('/item',function(req,res){ plv8.execute('DELETEFROMtodo_list.itensWHEREid=$1',[req.params.id]); }); TodoListApp.on('usuario_logado',function(payload){ plv8.elog(NOTICE,'Ousuario'+payload+'logou!'); }); RETURNTodoListApp; $$;
  66. 66. é como se eu publicasse meu esquema todo_listna porta 8000
  67. 67. mas …
  68. 68. você pode esquecer tudo isto …
  69. 69. e dar uma olhada no pg_rest
  70. 70. no fim das contas você vai perceber que ..
  71. 71. não há limites para o que você pode fazer com o Postgres …
  72. 72. e que não há limite para a sua imaginação …
  73. 73. mas tenha a certeza de que o caminho seja divertido
  74. 74. compartilhem conhecimento
  75. 75. inspirem
  76. 76. e é isso, obrigado! :) Conferencia Brasileira de PostgreSQL 18 a 20 de Novembro email: guedes@guedesoft.net github: twitter: http://pgbr.postgresql.org.br/ http://github.com/guedes http://twitter.com/guediz

×