Scala e i database

1,247 views
1,164 views

Published on

Introduzione a NoSql
Scala e MongoDb con mongo-scala-driver
Scala e JDBC con ScalaQuery

Meeting Jug Ancona 22-01-2010
http://www.jugancona.it

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

No Downloads
Views
Total views
1,247
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
12
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Scala e i database

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

×