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

Recommended

Node js dev day napoli 2016
Node js dev day napoli 2016
Michele Nasti
 
Web base-03-js-numeri stringearray
Web base-03-js-numeri stringearray
Studiabo
 
Hacking in action - 1
Hacking in action - 1
Matteo Ceserani
 
Dominare il codice legacy
Dominare il codice legacy
Tommaso Torti
 
Node.js - Server Side Javascript
Node.js - Server Side Javascript
Matteo Napolitano
 
Introduzione a node.js
Introduzione a node.js
Luciano Colosio
 
Seminario team working - 21-1-2015
Seminario team working - 21-1-2015
Alessandro Loffredo
 
Web performance & Http2
Web performance & Http2
Giacomo Zinetti
 
Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
Andrea Dottor
 
PHP on the desktop
PHP on the desktop
Massimiliano Arione
 
Introduzione a node: cenni storici ecc
Introduzione a node: cenni storici ecc
Luciano Colosio
 
Task automation with grunt
Task automation with grunt
lucatume
 
Agrillo Fedora 11 release party 18 giugno 2009
Agrillo Fedora 11 release party 18 giugno 2009
Giuseppe Agrillo
 
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Aruba S.p.A.
 
Linux Day 2009 LAMP HowTo
Linux Day 2009 LAMP HowTo
Giuseppe Agrillo
 
Node js: che cos'è e a che cosa serve?
Node js: che cos'è e a che cosa serve?
Flavius-Florin Harabor
 
Bash-Only Deployment
Bash-Only Deployment
Andrea Francia
 
J huery
J huery
nicrizzo
 
Ap Camp 2011
Ap Camp 2011
Enrico Pirozzi
 
Grunt: automazione per sviluppatori “pigri” - WordCamp Bari 2019
Grunt: automazione per sviluppatori “pigri” - WordCamp Bari 2019
Marco Chiesi
 
breve introduzione a node.js
breve introduzione a node.js
netmeansnet
 
PostgreSQL: Prima configurazione
PostgreSQL: Prima configurazione
Enrico Pirozzi
 
Il nuovo Bryar.pm
Il nuovo Bryar.pm
Marco d'Itri
 
ASP .NET Core hands-on
ASP .NET Core hands-on
ugidotnet
 
Introduzione DevOps con Ansible
Introduzione DevOps con Ansible
Matteo Magni
 
Deploy Heroku-style di un child theme WordPress su VPS via GIT
Deploy Heroku-style di un child theme WordPress su VPS via GIT
Petrozzi Emilio
 
PostgreSQL : Tuning
PostgreSQL : Tuning
Enrico Pirozzi
 
Pillole di plugins
Pillole di plugins
Francesco Riggio
 
Web base - Javascript (Node.js): Elementi di base
Web base - Javascript (Node.js): Elementi di base
Annalisa Vignoli
 
Applicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore Romeo
marcocasario
 

More Related Content

What's hot (20)

Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
Andrea Dottor
 
PHP on the desktop
PHP on the desktop
Massimiliano Arione
 
Introduzione a node: cenni storici ecc
Introduzione a node: cenni storici ecc
Luciano Colosio
 
Task automation with grunt
Task automation with grunt
lucatume
 
Agrillo Fedora 11 release party 18 giugno 2009
Agrillo Fedora 11 release party 18 giugno 2009
Giuseppe Agrillo
 
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Aruba S.p.A.
 
Linux Day 2009 LAMP HowTo
Linux Day 2009 LAMP HowTo
Giuseppe Agrillo
 
Node js: che cos'è e a che cosa serve?
Node js: che cos'è e a che cosa serve?
Flavius-Florin Harabor
 
Bash-Only Deployment
Bash-Only Deployment
Andrea Francia
 
J huery
J huery
nicrizzo
 
Ap Camp 2011
Ap Camp 2011
Enrico Pirozzi
 
Grunt: automazione per sviluppatori “pigri” - WordCamp Bari 2019
Grunt: automazione per sviluppatori “pigri” - WordCamp Bari 2019
Marco Chiesi
 
breve introduzione a node.js
breve introduzione a node.js
netmeansnet
 
PostgreSQL: Prima configurazione
PostgreSQL: Prima configurazione
Enrico Pirozzi
 
Il nuovo Bryar.pm
Il nuovo Bryar.pm
Marco d'Itri
 
ASP .NET Core hands-on
ASP .NET Core hands-on
ugidotnet
 
Introduzione DevOps con Ansible
Introduzione DevOps con Ansible
Matteo Magni
 
Deploy Heroku-style di un child theme WordPress su VPS via GIT
Deploy Heroku-style di un child theme WordPress su VPS via GIT
Petrozzi Emilio
 
PostgreSQL : Tuning
PostgreSQL : Tuning
Enrico Pirozzi
 
Pillole di plugins
Pillole di plugins
Francesco Riggio
 
Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
Andrea Dottor
 
Introduzione a node: cenni storici ecc
Introduzione a node: cenni storici ecc
Luciano Colosio
 
Task automation with grunt
Task automation with grunt
lucatume
 
Agrillo Fedora 11 release party 18 giugno 2009
Agrillo Fedora 11 release party 18 giugno 2009
Giuseppe Agrillo
 
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Aruba S.p.A.
 
Node js: che cos'è e a che cosa serve?
Node js: che cos'è e a che cosa serve?
Flavius-Florin Harabor
 
Grunt: automazione per sviluppatori “pigri” - WordCamp Bari 2019
Grunt: automazione per sviluppatori “pigri” - WordCamp Bari 2019
Marco Chiesi
 
breve introduzione a node.js
breve introduzione a node.js
netmeansnet
 
PostgreSQL: Prima configurazione
PostgreSQL: Prima configurazione
Enrico Pirozzi
 
ASP .NET Core hands-on
ASP .NET Core hands-on
ugidotnet
 
Introduzione DevOps con Ansible
Introduzione DevOps con Ansible
Matteo Magni
 
Deploy Heroku-style di un child theme WordPress su VPS via GIT
Deploy Heroku-style di un child theme WordPress su VPS via GIT
Petrozzi Emilio
 

Similar to node.js e Postgresql (20)

Web base - Javascript (Node.js): Elementi di base
Web base - Javascript (Node.js): Elementi di base
Annalisa Vignoli
 
Applicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore Romeo
marcocasario
 
Javascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesigner
Matteo Magni
 
Introduzione ros
Introduzione ros
Marco Buttolo
 
Web frameworks
Web frameworks
Appsterdam Milan
 
Javascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesigner
Matteo Magni
 
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
Wellnet srl
 
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
DrupalDay
 
Drupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e Drupal
DrupalDay
 
Stanco delle solite Web App? Passa al Prgressive
Stanco delle solite Web App? Passa al Prgressive
Commit University
 
Working between the clouds (versione completa)
Working between the clouds (versione completa)
Davide Cerbo
 
JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)
jampslide
 
Applicazioni native in java
Applicazioni native in java
Federico Paparoni
 
Linuxday2013
Linuxday2013
Mariano Fiorentino
 
Ddive Xpage852
Ddive Xpage852
Dominopoint - Italian Lotus User Group
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
Stefano Dindo
 
Infrastructure as Data
Infrastructure as Data
Francesco Collova'
 
Standard Dev Workflow
Standard Dev Workflow
Stefano Corallo
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
Gian Maria Ricci
 
Introduzione a Node.js
Introduzione a Node.js
Michele Capra
 
Web base - Javascript (Node.js): Elementi di base
Web base - Javascript (Node.js): Elementi di base
Annalisa Vignoli
 
Applicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore Romeo
marcocasario
 
Javascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesigner
Matteo Magni
 
Javascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesigner
Matteo Magni
 
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
Wellnet srl
 
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
DrupalDay
 
Drupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e Drupal
DrupalDay
 
Stanco delle solite Web App? Passa al Prgressive
Stanco delle solite Web App? Passa al Prgressive
Commit University
 
Working between the clouds (versione completa)
Working between the clouds (versione completa)
Davide Cerbo
 
JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)
jampslide
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
Stefano Dindo
 
Introduzione a Node.js
Introduzione a Node.js
Michele Capra
 
Ad

More from Lucio Grenzi (13)

How to use Postgresql in order to handle Prometheus metrics storage
How to use Postgresql in order to handle Prometheus metrics storage
Lucio Grenzi
 
Building serverless application on the Apache Openwhisk platform
Building serverless application on the Apache Openwhisk platform
Lucio Grenzi
 
Patroni: PostgreSQL HA in the cloud
Patroni: PostgreSQL HA in the cloud
Lucio Grenzi
 
Postgrest: the REST API for PostgreSQL databases
Postgrest: the REST API for PostgreSQL databases
Lucio Grenzi
 
Full slidescr16
Full slidescr16
Lucio Grenzi
 
Use Ionic Framework to develop mobile application
Use Ionic Framework to develop mobile application
Lucio Grenzi
 
Rabbitmq & Postgresql
Rabbitmq & Postgresql
Lucio Grenzi
 
Jenkins djangovillage
Jenkins djangovillage
Lucio Grenzi
 
Geodjango and HTML 5
Geodjango and HTML 5
Lucio Grenzi
 
PLV8 - The PostgreSQL web side
PLV8 - The PostgreSQL web side
Lucio Grenzi
 
Pg tap
Pg tap
Lucio Grenzi
 
Geodjango
Geodjango
Lucio Grenzi
 
Yui app-framework
Yui app-framework
Lucio Grenzi
 
How to use Postgresql in order to handle Prometheus metrics storage
How to use Postgresql in order to handle Prometheus metrics storage
Lucio Grenzi
 
Building serverless application on the Apache Openwhisk platform
Building serverless application on the Apache Openwhisk platform
Lucio Grenzi
 
Patroni: PostgreSQL HA in the cloud
Patroni: PostgreSQL HA in the cloud
Lucio Grenzi
 
Postgrest: the REST API for PostgreSQL databases
Postgrest: the REST API for PostgreSQL databases
Lucio Grenzi
 
Use Ionic Framework to develop mobile application
Use Ionic Framework to develop mobile application
Lucio Grenzi
 
Rabbitmq & Postgresql
Rabbitmq & Postgresql
Lucio Grenzi
 
Jenkins djangovillage
Jenkins djangovillage
Lucio Grenzi
 
Geodjango and HTML 5
Geodjango and HTML 5
Lucio Grenzi
 
PLV8 - The PostgreSQL web side
PLV8 - The PostgreSQL web side
Lucio Grenzi
 
Ad

node.js e Postgresql

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