SlideShare a Scribd company logo
Scala e i database Onofrio Panzarino Twitter: @onof80 onofrio.panzarino@gmail.com http://it.linkedin.com/in/onofriopanzarino http://www.google.com/profiles/onofrio.panzarino Jug Ancona
Agenda Introduzione a NoSQL MongoDB Scala e i database Mongo-scala-driver ScalaQuery
Limiti dei RDBMS tradizionali Le classiche web-app sono “Scale-out” Si aggiungono nodi al sistema per aumentare le performance Gli RDBMS, a causa di lock e join, sono “Scale-up” Per aumentare le performance è necessario potenziare il server RDBMS  ottimizzati per brevi e frequenti transazioni r/w grandi transazioni batch con pochi accessi in scrittura non per pesanti carichi di lavoro r/w!
CAP theorem (Brewer, 2000) Sistemi distribuiti C = Consistency tutti i nodi con gli stessi dati A = Availability il fallimento di un nodo non impedisce agli altri di continuare P = Partitiontolerance il sistema tollera arbitrarie perdite di messaggi “Un sistema distribuito non può garantirle simultaneamente tutte, ma al massimo due” (C && A) => ! P
Data models Key / Value Cassandra (Apache) Facebook, Twitter, Digg, … Berkeley DB (Oracle) Asterisk PBX, OpenLDAP, RPM, SVN, Terracotta, … Voldemort LinkedIn Tabular BigTable (Google) Hbase Hypertable Document-oriented MongoDB NY Times, Foursquare, Bit.ly, Sourceforge, Eventbrite, LHC (CERN),  CouchDB (Apache) Terrastore Jackrabbit (Apache) Graph Neo4j Tuple – store Apache River
MongoDB JSON-style data store { name: “onofrio”, tags: [ “scala”, “java”] } Schemaless nella stessa collection: { username: “bill”, password: “h298LYT”, age: 30, active: true } { username: “james”, openId: http://www...”,  } { username: “admin”, alias: “bill” } facile da gestire non è più necessario fare il deploy dello schema del DB!
MongoDB Query Map / Reduce Esempio: varmap = function() { emit(this.username, { votes: this.votes } } var reduce = function() { var sum = 0; values.forEach(function(doc) {     sum += doc.votes;   }); return {votes: sum}; } db.comments.mapReduce(map, reduce);
MongoDB No-joins, no multi objecttransations Scalabilità orizzontale Usecases CMS Commentstorage, voting High-volumeproblems Real-time stats Eventlogging Sconsigliato per: Banking systems Complextransactions Traditional BI Data warehouse
Demo Lancio del server Alcuni comandi console
Mongo-scala-driver È un wrapper di mongo-java-driver, scritto in Scala Fornisce il modo di mappare un documento MongoDB (DBObject) in un “POSO”  Fondamentalmente è un DSL per repositoryMongoDB. val m = new Mongo("localhost")  valcoll = m.getDB(“test”).getCollection("addresses") of Address  coll << new Address(“Onofrio", “Via Garibaldi", “1111", “NYC")  valaddressOfNY = for { a <- Address where { Address.street is “NYC” } in coll }
Demo Scala + MongoDB
Scala + RDBMS Scala può linkare ogni JAR JDBC “JDBC is the reasonwhy Java guysuseORMs” Non è type-safe getString(“Name”) getFloat(“Price”) … La mappatura columntype – Java type non è centralizzabile viene ripetuta ad ogni query
ScalaQuery DSL per JDBC Scala – friendly Totalmente type-safe La mappatura è centralizzata in un Scala object Non è un ORM No cache Non viene oscurato il momento in cui vengono effettuate le query È possibile usare oggetti immutabili
Demo Scala + ScalaQuery
Riferimenti http://nosql-database.org/ http://www.mongodb.org/ http://kylebanker.com/blog/ http://cassandra.apache.org/ http://www.json.org/ KyleBanker, MongoDB in Action, Manning (MEAP)
Riferimenti http://www.scala-lang.org/ M. Odersky, L. Spoon, B. Venners, Programming in Scala, Artima scala-user mailing list http://stackoverflow.com/questions/tagged/scala http://www.artima.com/index.jsp irc://irc.freenode.net/scala
Riferimenti (2) Librerie scalaz: http://code.google.com/p/scalaz/ Mongo-scala-driver: https://github.com/osinka/mongo-scala-driver ScalaQuery: http://scalaquery.org/ Blogs http://debasishg.blogspot.com/ http://james-iry.blogspot.com/ http://www.codecommit.com/ Enjoywith

More Related Content

Similar to Scala e i database

MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009
Massimiliano Dessì
 
Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Database Project in Visual Studio 2010
Database Project in Visual Studio 2010
Gian Maria Ricci
 
MongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework MeetingMongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework Meeting
guest67beeb9
 
Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2Emanuele Zanchettin
 
Cassandra DB - Linux Day 2019 - Catania - Italy
Cassandra DB - Linux Day 2019 - Catania - ItalyCassandra DB - Linux Day 2019 - Catania - Italy
Cassandra DB - Linux Day 2019 - Catania - Italy
Fabrizio Spataro
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
Emanuele Zanchettin
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-databaseMajong DevJfu
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Par-Tec S.p.A.
 
Deploy MongoDB su Infrastruttura Amazon Web Services
Deploy MongoDB su Infrastruttura Amazon Web ServicesDeploy MongoDB su Infrastruttura Amazon Web Services
Deploy MongoDB su Infrastruttura Amazon Web Services
Stefano Dindo
 
MongoDB
MongoDBMongoDB
MongoDB
NaLUG
 
Linuxday2013
Linuxday2013 Linuxday2013
Linuxday2013
Mariano Fiorentino
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
Emanuele Zanchettin
 
Introduzione a google_app_engine_datastore
Introduzione a google_app_engine_datastoreIntroduzione a google_app_engine_datastore
Introduzione a google_app_engine_datastore
firenze-gtug
 
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 2
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 2MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 2
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 2
MongoDB
 
Applicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore RomeoApplicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore Romeo
marcocasario
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
Stefano Dindo
 
Come utilizzare AWS DMS per migrare SQL Server ad Amazon Aurora
Come utilizzare AWS DMS per migrare SQL Server ad Amazon AuroraCome utilizzare AWS DMS per migrare SQL Server ad Amazon Aurora
Come utilizzare AWS DMS per migrare SQL Server ad Amazon Aurora
Gianluca Hotz
 
JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)jampslide
 
SQL Saturday 2019 - Event Processing with Spark
SQL Saturday 2019 - Event Processing with SparkSQL Saturday 2019 - Event Processing with Spark
SQL Saturday 2019 - Event Processing with Spark
Alessio Biasiutti
 

Similar to Scala e i database (20)

MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009
 
Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Database Project in Visual Studio 2010
Database Project in Visual Studio 2010
 
MongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework MeetingMongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework Meeting
 
Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2
 
Cassandra DB - Linux Day 2019 - Catania - Italy
Cassandra DB - Linux Day 2019 - Catania - ItalyCassandra DB - Linux Day 2019 - Catania - Italy
Cassandra DB - Linux Day 2019 - Catania - Italy
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-database
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studio
 
Deploy MongoDB su Infrastruttura Amazon Web Services
Deploy MongoDB su Infrastruttura Amazon Web ServicesDeploy MongoDB su Infrastruttura Amazon Web Services
Deploy MongoDB su Infrastruttura Amazon Web Services
 
MongoDB
MongoDBMongoDB
MongoDB
 
Linuxday2013
Linuxday2013 Linuxday2013
Linuxday2013
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
 
Introduzione a google_app_engine_datastore
Introduzione a google_app_engine_datastoreIntroduzione a google_app_engine_datastore
Introduzione a google_app_engine_datastore
 
MongoDB
MongoDBMongoDB
MongoDB
 
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 2
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 2MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 2
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 2
 
Applicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore RomeoApplicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore Romeo
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
 
Come utilizzare AWS DMS per migrare SQL Server ad Amazon Aurora
Come utilizzare AWS DMS per migrare SQL Server ad Amazon AuroraCome utilizzare AWS DMS per migrare SQL Server ad Amazon Aurora
Come utilizzare AWS DMS per migrare SQL Server ad Amazon Aurora
 
JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)
 
SQL Saturday 2019 - Event Processing with Spark
SQL Saturday 2019 - Event Processing with SparkSQL Saturday 2019 - Event Processing with Spark
SQL Saturday 2019 - Event Processing with Spark
 

Scala e i database

  • 1. Scala e i database Onofrio Panzarino Twitter: @onof80 onofrio.panzarino@gmail.com http://it.linkedin.com/in/onofriopanzarino http://www.google.com/profiles/onofrio.panzarino Jug Ancona
  • 2. Agenda Introduzione a NoSQL MongoDB Scala e i database Mongo-scala-driver ScalaQuery
  • 3. Limiti dei RDBMS tradizionali Le classiche web-app sono “Scale-out” Si aggiungono nodi al sistema per aumentare le performance Gli RDBMS, a causa di lock e join, sono “Scale-up” Per aumentare le performance è necessario potenziare il server RDBMS ottimizzati per brevi e frequenti transazioni r/w grandi transazioni batch con pochi accessi in scrittura non per pesanti carichi di lavoro r/w!
  • 4. CAP theorem (Brewer, 2000) Sistemi distribuiti C = Consistency tutti i nodi con gli stessi dati A = Availability il fallimento di un nodo non impedisce agli altri di continuare P = Partitiontolerance il sistema tollera arbitrarie perdite di messaggi “Un sistema distribuito non può garantirle simultaneamente tutte, ma al massimo due” (C && A) => ! P
  • 5. Data models Key / Value Cassandra (Apache) Facebook, Twitter, Digg, … Berkeley DB (Oracle) Asterisk PBX, OpenLDAP, RPM, SVN, Terracotta, … Voldemort LinkedIn Tabular BigTable (Google) Hbase Hypertable Document-oriented MongoDB NY Times, Foursquare, Bit.ly, Sourceforge, Eventbrite, LHC (CERN), CouchDB (Apache) Terrastore Jackrabbit (Apache) Graph Neo4j Tuple – store Apache River
  • 6. MongoDB JSON-style data store { name: “onofrio”, tags: [ “scala”, “java”] } Schemaless nella stessa collection: { username: “bill”, password: “h298LYT”, age: 30, active: true } { username: “james”, openId: http://www...”, } { username: “admin”, alias: “bill” } facile da gestire non è più necessario fare il deploy dello schema del DB!
  • 7. MongoDB Query Map / Reduce Esempio: varmap = function() { emit(this.username, { votes: this.votes } } var reduce = function() { var sum = 0; values.forEach(function(doc) { sum += doc.votes; }); return {votes: sum}; } db.comments.mapReduce(map, reduce);
  • 8. MongoDB No-joins, no multi objecttransations Scalabilità orizzontale Usecases CMS Commentstorage, voting High-volumeproblems Real-time stats Eventlogging Sconsigliato per: Banking systems Complextransactions Traditional BI Data warehouse
  • 9. Demo Lancio del server Alcuni comandi console
  • 10. Mongo-scala-driver È un wrapper di mongo-java-driver, scritto in Scala Fornisce il modo di mappare un documento MongoDB (DBObject) in un “POSO”  Fondamentalmente è un DSL per repositoryMongoDB. val m = new Mongo("localhost") valcoll = m.getDB(“test”).getCollection("addresses") of Address coll << new Address(“Onofrio", “Via Garibaldi", “1111", “NYC") valaddressOfNY = for { a <- Address where { Address.street is “NYC” } in coll }
  • 11. Demo Scala + MongoDB
  • 12. Scala + RDBMS Scala può linkare ogni JAR JDBC “JDBC is the reasonwhy Java guysuseORMs” Non è type-safe getString(“Name”) getFloat(“Price”) … La mappatura columntype – Java type non è centralizzabile viene ripetuta ad ogni query
  • 13. ScalaQuery DSL per JDBC Scala – friendly Totalmente type-safe La mappatura è centralizzata in un Scala object Non è un ORM No cache Non viene oscurato il momento in cui vengono effettuate le query È possibile usare oggetti immutabili
  • 14. Demo Scala + ScalaQuery
  • 15. Riferimenti http://nosql-database.org/ http://www.mongodb.org/ http://kylebanker.com/blog/ http://cassandra.apache.org/ http://www.json.org/ KyleBanker, MongoDB in Action, Manning (MEAP)
  • 16. Riferimenti http://www.scala-lang.org/ M. Odersky, L. Spoon, B. Venners, Programming in Scala, Artima scala-user mailing list http://stackoverflow.com/questions/tagged/scala http://www.artima.com/index.jsp irc://irc.freenode.net/scala
  • 17. Riferimenti (2) Librerie scalaz: http://code.google.com/p/scalaz/ Mongo-scala-driver: https://github.com/osinka/mongo-scala-driver ScalaQuery: http://scalaquery.org/ Blogs http://debasishg.blogspot.com/ http://james-iry.blogspot.com/ http://www.codecommit.com/ Enjoywith