SlideShare ist ein Scribd-Unternehmen logo
1 von 17
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

Weitere ähnliche Inhalte

Ähnlich wie Scala e i database

MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009Massimiliano Dessì
 
Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Gian Maria Ricci
 
MongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework MeetingMongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework Meetingguest67beeb9
 
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 - ItalyFabrizio 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 DatabaseEmanuele 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 studioPar-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 ServicesStefano Dindo
 
MongoDB
MongoDBMongoDB
MongoDBNaLUG
 
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 DatabaseEmanuele Zanchettin
 
Introduzione a google_app_engine_datastore
Introduzione a google_app_engine_datastoreIntroduzione a google_app_engine_datastore
Introduzione a google_app_engine_datastorefirenze-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 2MongoDB
 
Applicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore RomeoApplicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore Romeomarcocasario
 
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 MongoDBStefano 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 AuroraGianluca 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 SparkAlessio Biasiutti
 

Ähnlich wie 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