node.js e Postgresql

3,533 views

Published on

Introduction to Node.js and how to use it in conjuction with Postgresql

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,533
On SlideShare
0
From Embeds
0
Number of Embeds
467
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

node.js e Postgresql

  1. 1. Lavorare con Node.js e PostgreSQL Grenzi Lucio [email_address]
  2. 2. Mi presento <ul><li>Lucio Grenzi </li></ul><ul><li>Sviluppatore Delphi dal 1999 </li></ul><ul><li>Consulente </li></ul><ul><li>Attualmente sviluppatore Asp.net </li></ul><ul><li>Postgresql addicted </li></ul><ul><li>Nonantolando.blogspot.com </li></ul><ul><li>lucio.grenzi </li></ul><ul><li>lucio grenzi </li></ul>
  3. 3. Agenda <ul><ul><li>Cos' e' Node.js </li></ul></ul><ul><ul><li>Node.js ed i databases </li></ul></ul><ul><ul><li>Postgres.js </li></ul></ul><ul><ul><li>Live Coding </li></ul></ul>
  4. 4. Node.js is an event-driven I/O server-side JavaScript environment based on V8. It is intended for writing scalable network programs such as web servers. (Wikipedia)
  5. 5. Node.js <ul><ul><li>Creato nel 2009 da Ryan Dahl </li></ul></ul><ul><ul><li>Sponsorizzato da Joyent </li></ul></ul>
  6. 6. Javascript <ul><ul><li>Node.js e' un web server basato su V8 </li></ul></ul><ul><ul><li>Javascript e' single thread </li></ul></ul><ul><ul><li>Node.js gira in ambienti Unix-like </li></ul></ul><ul><ul><li>Dalla versione 0.6 gira anche su Windows </li></ul></ul><ul><ul><li>Libreria con chiamate non bloccanti </li></ul></ul>
  7. 7. Node.js performance? <ul><li>Single thread ma consente migliaia di connessioni </li></ul><ul><li>Processa velocemente le task veloci </li></ul><ul><li>Non si blocca in attesa delle task lente </li></ul><ul><li>Prevede strumenti per la gestione di software scalabili in rete </li></ul>
  8. 8. Perche usarlo? <ul><li>Esistono web server molto piu' blasonati (Apache Nginix, ecc.) </li></ul><ul><li>Node.js risponde piu' velocemente rispetto ad Apache </li></ul><ul><li>Trasfer rate piu' elevato e minori richieste fallite </li></ul><ul><li>Pero' necessita di piu' memoria </li></ul>
  9. 9. Installare Node.js su Ubuntu <ul><li>sudo apt-get install g++ curl libssl-dev apache2-utils </li></ul><ul><li>wget http://nodejs.org/dist/node -v0.6.2.tar.gz </li></ul><ul><li>gunzip node-v0.6.2.tar.gz </li></ul><ul><li>tar -xf node-v0.6.2.tar </li></ul><ul><li>cd node </li></ul><ul><li>./configure </li></ul><ul><li>make </li></ul><ul><li>sudo make install </li></ul><ul><li>node -v </li></ul>
  10. 10. Http Server var http = require('http'); http.createServer(function (request, response) { response.writeHead(200, {'Content-Type': 'text/plain'}); response.end('Hello Worldn'); }).listen(8000); $curl localhost:8000 Hello World
  11. 11. Async I/O <ul><li>La lettura del file non e' bloccante </li></ul>fs.readFile(“file.txt”, &quot;text&quot;, function(data) { dosomething(data); }); doSomethingelse(data);
  12. 12. Anche se .. <ul><li>Concettualmente semplice, in pratica pessimo </li></ul>fs.readFile(“file.txt”, &quot;text&quot;, function(data) { dosomething(data); } ); while (true) { // Il processo si blocca }
  13. 13. Node.Js npm <ul><li>npm is a package manager for Node.js </li></ul><ul><li>that is run through the command line and </li></ul><ul><li>manages dependencies for an application. </li></ul><ul><li>It is the predominant package manager for Node.js (Wikipedia) </li></ul>
  14. 14. Installiamo mpn $ curl http://npmjs.org/install.sh | sudo sh $npm -v $npm search
  15. 15. Node.Js npm repository <ul><li>https://github.com/joyent/node/wiki/modules </li></ul><ul><li>Repository contenente tutti i moduli per Node.js </li></ul>
  16. 16. Postgresql vs NoSQL <ul><li>Progetti giovani, non sempre c'è un supporto commerciale </li></ul><ul><li>Dati risiedono in memoria .. si deve forzare la scrittura </li></ul><ul><li>Indicizzazione non sempre efficiente </li></ul><ul><li>Driver verso i linguaggi di programmazione? </li></ul>
  17. 17. Postgresql vs NoSQL <ul><li>Crisi per CouchDB ( http://www.internetnews.com/blog/skerner/is-couchdb-in-trouble-.html ) </li></ul>
  18. 18. &
  19. 19. Postgresql e Node.js <ul><li>postgres.js: implementazione in puro JS </li></ul><ul><li>https://github.com/creationix/postgres-js </li></ul><ul><li>node.postgres: libq binding o puro JS </li></ul><ul><li>https://github.com/brianc/node-postgres </li></ul><ul><li>Installiamo postgres.js: </li></ul>Npm install pg
  20. 20. postgres.js <ul><li>Postgres.js non usa la libq </li></ul><ul><li>E' scritto in Javascript, quindi si deve conoscere il linguaggio </li></ul><ul><li>Un solo comando per volta verso Postgresql </li></ul><ul><li>Internamente crea una coda di comandi </li></ul>
  21. 21. Postgres.js inizializzazione /* setup di Node.js e Postgres.js */ // postgres.js code var sys = require(&quot;sys&quot;); var pg = require(&quot;./lib/postgres-pure&quot;); var db = new pg.connect(&quot;pgsql://test:lucio@localhost:5432/returning_test&quot;);
  22. 22. Esempio pratico db.prepare(&quot;INSERT INTO returning_test (val) VALUES (?) RETURNING id&quot;, function (sth) { sth.execute(&quot;text value&quot;, function(rs) { if (rs === undefined) { console.log(&quot;No data in table.&quot;); } else { console.log(sys.inspect(rs)); } }); }); // output: $ node demo.js [ { id: 4 } ]
  23. 23. Pero' .. <ul><li>Postgresql si basa su request/response in modalita' sincrona </li></ul><ul><li>Non possiamo bloccare il thread principale di Node.js </li></ul>
  24. 24. Quindi? <ul><li>Le richieste verso Postgresql vengono bufferizzate </li></ul><ul><li>Node.Js non attende le risposte dal database </li></ul><ul><li>L'utente vede un'applicazione responsiva </li></ul>
  25. 25. Risorse <ul><ul><li>www.Nodejs.org </li></ul></ul><ul><ul><li>https://github.com/creationix/postgres-js </li></ul></ul><ul><ul><li>www.postgresql.org </li></ul></ul>
  26. 26. Q & A <ul><li>? </li></ul>
  27. 27. Grazie <ul><li>http://www.slideshare.net/lucio_grenzi/nodejs-e-postgresql </li></ul>

×