Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Mongo

850 views

Published on

Things we learned while using Mongo and Scala at Udini.

Published in: Technology, Education
  • Be the first to comment

  • Be the first to like this

Mongo

  1. 1. Papers
  2. 2. Articles
  3. 3. Dissertations
  4. 4. 144.000.000
  5. 5. NoSQL
  6. 6. no ␣ SQL
  7. 7. S3
  8. 8. ...
  9. 9. Mongo
  10. 10. ♥Mongo
  11. 11. ♥Scala
  12. 12. 1
  13. 13. Scala ⬍Mongo
  14. 14. Java driver✗ Easy to use, hard to misuse✗ When in Rome, do as the romans do✗ Dont make the client do anything the library could do
  15. 15. Java driver✗ Easy to use, hard to misuse✗ When in Rome, do as the romans do✗ Dont make the client do anything the library could do ☑
  16. 16. Casbah✗ Easy to use, hard to misuse✓ When in Rome, do as the romans do✗ Dont make the client do anything the library could do✗ Obey the principle of least astonishment
  17. 17. Casbah✗ Easy to use, hard to misuse✓ When in Rome, do as the romans do✗ Dont make the client do anything the library could do✗ Obey the principle of least astonishment Leaky abstractions
  18. 18. codes: [ “foo”, “bar” ]obj.as[BasicDBList]("codes") .toList .map(_.asInstanceOf[String]) Don’t make me think
  19. 19. Casbah:coll.findOne(“name” $ne “wilfred”)Mongo:db.coll.findOne({ name : { $ne : “wilfred” } })☹ Casbah:coll.findOne( MongoDBObject(“name” -> “wilfred”)) Don’t make me think!Mongo:db.coll.findOne({ name : “wilfred”})
  20. 20. Casbah✗ Easy to use, hard to misuse✓ When in Rome, do as the romans do✗ Dont make the client do anything the✗ library could do Obey the principle of least astonishment ☑
  21. 21. Salat✗ Easy to use, hard to misuse✓ When in Rome, do as the romans do✓ Dont make the client do anything the✗✗✓ library could do Obey the principle of least astonishment Control Symmetry ☒
  22. 22. RogueBeaucatcher Lift Subset ?
  23. 23. Homegrown
  24. 24. obj.insert[Metadata] ("metadata", doc.metadata)obj.extract[Metadata] ("metadata") Doesn’t make me think!
  25. 25. 2
  26. 26. Versioning
  27. 27. Version 1 { street: “Lingedijk”, housenumber: 132 } ⬍Version 2 { address: “Lingedijk 132” }
  28. 28. { version: 1, street: “Lingedijk”, housenumber: 132} Read time ➡ reconciliation Memory{ ➡ version: 2, address: “Lingedijk 132”}
  29. 29. Rollback
  30. 30. 3
  31. 31. Objectmapping
  32. 32. Subclasses indifferent collections
  33. 33. Conclusion
  34. 34. ♥ Scala♥ Mongo☹ Libraries✎ Versioning D.I.Y.☼ Composition

×