SlideShare a Scribd company logo
Scala e i databaseOnofrio PanzarinoTwitter: @onof80onofrio.panzarino@gmail.comhttp://it.linkedin.com/in/onofriopanzarinohttp://www.google.com/profiles/onofrio.panzarinoJug Ancona
AgendaIntroduzione a NoSQLMongoDBScala e i databaseMongo-scala-driverScalaQuery
Limiti dei RDBMS tradizionaliLe classiche web-app sono “Scale-out”Si aggiungono nodi al sistema per aumentare le performanceGli RDBMS, a causa di lock e join, sono “Scale-up”Per aumentare le performance è necessario potenziare il serverRDBMS ottimizzati perbrevi e frequenti transazioni r/wgrandi transazioni batch con pochi accessi in scritturanon per pesanti carichi di lavoro r/w!
CAP theorem (Brewer, 2000)Sistemi distribuitiC = Consistencytutti i nodi con gli stessi datiA = Availabilityil fallimento di un nodo non impedisce agli altri di continuareP = Partitiontoleranceil sistema tollera arbitrarie perdite di messaggi“Un sistema distribuito non può garantirle simultaneamente tutte, ma al massimo due”(C && A) => ! P
Data modelsKey / ValueCassandra (Apache)Facebook, Twitter, Digg, …Berkeley DB (Oracle)Asterisk PBX, OpenLDAP, RPM, SVN, Terracotta, …VoldemortLinkedInTabularBigTable (Google)HbaseHypertableDocument-orientedMongoDBNY Times, Foursquare, Bit.ly, Sourceforge, Eventbrite, LHC (CERN), CouchDB (Apache)TerrastoreJackrabbit (Apache)GraphNeo4jTuple – storeApache River
MongoDBJSON-style data store{ name: “onofrio”, tags: [ “scala”, “java”] }Schemalessnella stessa collection:{ username: “bill”, password: “h298LYT”, age: 30, active: true }{ username: “james”, openId: http://www...”,  }{ username: “admin”, alias: “bill” }facile da gestirenon è più necessario fare il deploy dello schema del DB!
MongoDBQueryMap / ReduceEsempio: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);
MongoDBNo-joins, no multi objecttransationsScalabilità orizzontaleUsecasesCMSCommentstorage, votingHigh-volumeproblemsReal-time statsEventloggingSconsigliato per:Banking systemsComplextransactionsTraditional BIData warehouse
DemoLancio del serverAlcuni comandi console
Mongo-scala-driverÈ un wrapper di mongo-java-driver, scritto in ScalaFornisce 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 }
DemoScala + MongoDB
Scala + RDBMSScala può linkare ogni JARJDBC“JDBC is the reasonwhy Java guysuseORMs”Non è type-safegetString(“Name”)getFloat(“Price”)…La mappatura columntype – Java type non è centralizzabileviene ripetuta ad ogni query
ScalaQueryDSL per JDBCScala – friendlyTotalmente type-safeLa mappatura è centralizzata in un Scala objectNon è un ORMNo cacheNon viene oscurato il momento in cui vengono effettuate le queryÈ possibile usare oggetti immutabili
DemoScala + ScalaQuery
Riferimentihttp://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)
Riferimentihttp://www.scala-lang.org/M. Odersky, L. Spoon, B. Venners, Programming in Scala, Artimascala-user mailing listhttp://stackoverflow.com/questions/tagged/scalahttp://www.artima.com/index.jspirc://irc.freenode.net/scala
Riferimenti (2)Libreriescalaz: http://code.google.com/p/scalaz/Mongo-scala-driver: https://github.com/osinka/mongo-scala-driverScalaQuery: http://scalaquery.org/Blogshttp://debasishg.blogspot.com/http://james-iry.blogspot.com/http://www.codecommit.com/Enjoywith

More Related Content

ODP
OpenStreetMap - Gvsig Trieste
PPT
SUE AGILE Architettura (Italiano)
PPTX
Jug Marche: Meeting June 2014. Java 8 hands on
PDF
MongoDB Scala Roma SpringFramework Meeting2009
PDF
Scala Programming Linux Day 2009
PDF
Introduzione a scala prima parte
PDF
Scala Primi Passi
PDF
Apache Maven
OpenStreetMap - Gvsig Trieste
SUE AGILE Architettura (Italiano)
Jug Marche: Meeting June 2014. Java 8 hands on
MongoDB Scala Roma SpringFramework Meeting2009
Scala Programming Linux Day 2009
Introduzione a scala prima parte
Scala Primi Passi
Apache Maven

Similar to Scala e i database (20)

PDF
MongoDB
PDF
MongoDb and Scala SpringFramework Meeting
PPTX
MongoDB
PDF
MongoDB SpringFramework Meeting september 2009
PPTX
Back to Basics, webinar 1: Introduzione a NoSQL
PDF
Database NoSql Document Oriented - MongoDB
PPTX
MongoDB - Back to Basics 2017 - Introduzione a NoSQL
PPTX
Back to Basics webinar 1 IT 17 - Introduzione ai NoSQL
PPTX
No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013
PPTX
Back to Basics, webinar 3: Riflessioni sulla progettazione degli schemi nei d...
PPTX
La Trasformazione Digitale con MongoDB
PPSX
Introduzione mongodb
PPTX
20140311 app dev series - 01 - introduction - italian
PDF
Deploy MongoDB su Infrastruttura Amazon Web Services
PPTX
What's Big Data? - Big Data Tech - 2015 - Firenze
ODP
Linuxday2013
PDF
MongoDB User Group Padova - Overviews iniziale su MongoDB
PDF
Crea il TUO database con LevelDB e Node.js
PDF
PDF
Cassandra DB - Linux Day 2019 - Catania - Italy
MongoDB
MongoDb and Scala SpringFramework Meeting
MongoDB
MongoDB SpringFramework Meeting september 2009
Back to Basics, webinar 1: Introduzione a NoSQL
Database NoSql Document Oriented - MongoDB
MongoDB - Back to Basics 2017 - Introduzione a NoSQL
Back to Basics webinar 1 IT 17 - Introduzione ai NoSQL
No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013
Back to Basics, webinar 3: Riflessioni sulla progettazione degli schemi nei d...
La Trasformazione Digitale con MongoDB
Introduzione mongodb
20140311 app dev series - 01 - introduction - italian
Deploy MongoDB su Infrastruttura Amazon Web Services
What's Big Data? - Big Data Tech - 2015 - Firenze
Linuxday2013
MongoDB User Group Padova - Overviews iniziale su MongoDB
Crea il TUO database con LevelDB e Node.js
Cassandra DB - Linux Day 2019 - Catania - Italy
Ad

Scala e i database

  • 1. Scala e i databaseOnofrio PanzarinoTwitter: @onof80onofrio.panzarino@gmail.comhttp://it.linkedin.com/in/onofriopanzarinohttp://www.google.com/profiles/onofrio.panzarinoJug Ancona
  • 2. AgendaIntroduzione a NoSQLMongoDBScala e i databaseMongo-scala-driverScalaQuery
  • 3. Limiti dei RDBMS tradizionaliLe classiche web-app sono “Scale-out”Si aggiungono nodi al sistema per aumentare le performanceGli RDBMS, a causa di lock e join, sono “Scale-up”Per aumentare le performance è necessario potenziare il serverRDBMS ottimizzati perbrevi e frequenti transazioni r/wgrandi transazioni batch con pochi accessi in scritturanon per pesanti carichi di lavoro r/w!
  • 4. CAP theorem (Brewer, 2000)Sistemi distribuitiC = Consistencytutti i nodi con gli stessi datiA = Availabilityil fallimento di un nodo non impedisce agli altri di continuareP = Partitiontoleranceil sistema tollera arbitrarie perdite di messaggi“Un sistema distribuito non può garantirle simultaneamente tutte, ma al massimo due”(C && A) => ! P
  • 5. Data modelsKey / ValueCassandra (Apache)Facebook, Twitter, Digg, …Berkeley DB (Oracle)Asterisk PBX, OpenLDAP, RPM, SVN, Terracotta, …VoldemortLinkedInTabularBigTable (Google)HbaseHypertableDocument-orientedMongoDBNY Times, Foursquare, Bit.ly, Sourceforge, Eventbrite, LHC (CERN), CouchDB (Apache)TerrastoreJackrabbit (Apache)GraphNeo4jTuple – storeApache River
  • 6. MongoDBJSON-style data store{ name: “onofrio”, tags: [ “scala”, “java”] }Schemalessnella stessa collection:{ username: “bill”, password: “h298LYT”, age: 30, active: true }{ username: “james”, openId: http://www...”, }{ username: “admin”, alias: “bill” }facile da gestirenon è più necessario fare il deploy dello schema del DB!
  • 7. MongoDBQueryMap / ReduceEsempio: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. MongoDBNo-joins, no multi objecttransationsScalabilità orizzontaleUsecasesCMSCommentstorage, votingHigh-volumeproblemsReal-time statsEventloggingSconsigliato per:Banking systemsComplextransactionsTraditional BIData warehouse
  • 10. Mongo-scala-driverÈ un wrapper di mongo-java-driver, scritto in ScalaFornisce 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 }
  • 12. Scala + RDBMSScala può linkare ogni JARJDBC“JDBC is the reasonwhy Java guysuseORMs”Non è type-safegetString(“Name”)getFloat(“Price”)…La mappatura columntype – Java type non è centralizzabileviene ripetuta ad ogni query
  • 13. ScalaQueryDSL per JDBCScala – friendlyTotalmente type-safeLa mappatura è centralizzata in un Scala objectNon è un ORMNo cacheNon viene oscurato il momento in cui vengono effettuate le queryÈ possibile usare oggetti immutabili
  • 16. Riferimentihttp://www.scala-lang.org/M. Odersky, L. Spoon, B. Venners, Programming in Scala, Artimascala-user mailing listhttp://stackoverflow.com/questions/tagged/scalahttp://www.artima.com/index.jspirc://irc.freenode.net/scala
  • 17. Riferimenti (2)Libreriescalaz: http://code.google.com/p/scalaz/Mongo-scala-driver: https://github.com/osinka/mongo-scala-driverScalaQuery: http://scalaquery.org/Blogshttp://debasishg.blogspot.com/http://james-iry.blogspot.com/http://www.codecommit.com/Enjoywith