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.
Feedbacks from the trenches
François ARMAND @fanf42 - 2016-10
?
Who knows...
?
?JdbcTemplate
Who knows...
?
?JdbcTemplate
?
Who knows...
?
Anorm ??
Who knows...
?JdbcTemplate
?
Anorm ?
Squeryl ? ?JdbcTemplate
?
Who knows...
?
Anorm ?
Squeryl ? ?JdbcTemplate
?
?
Who knows...
?
Anorm ?
Squeryl ? ?JdbcTemplate
?
?
SQL?
Who knows...
OBJECT
MAPPING
PURE
SQL
?
Anorm ?
Squeryl ? ?JdbcTemplate
?
?
SQL?
Love SQL ?
Who knows...
Who’s talkin’ for why?
● 10 years of Scala
● CTO @Normation
● Lead-dev on Rudder
● chose Scala 7y ago for Rudder
Continuou...
● 10 years of Scala
● CTO @Normation
● Lead-dev on Rudder
● chose Scala 7y ago for Rudder
Continuous Configuration
for Eff...
● 10 years of Scala
● CTO @Normation
● Lead-dev on Rudder
● chose Scala 7y ago for Rudder
Continuous Configuration
for Eff...
But what ?
● 10 years of Scala
● CTO @Normation
● Lead-dev on Rudder
● chose Scala 7y ago for Rudder
Continuous Configurat...
Slick 3 ?
● Fairly popular, ~ default choice in 2016 for Scala world
● Let’s test it ! ⇒ ported ~ 50% of Rudder code to it.
● Fairly popular, ~ default choice in 2016 for Scala world
● Let’s test it ! ⇒ ported ~ 50% of Rudder code to it.
● Does n...
Doobie ?
Use Doobie.
It’s GREAT.
Doobie
Use Doobie.
It’s GREAT.
Questions ?
Doobie
Use Doobie.
It’s GREAT.Doobie
● A pure functional, principled database access layer for Scala
Use Doobie.
It’s GREAT.Doobie
● A pure functional, principled database access layer for Scala
● Mapping is a joy (actually...
Use Doobie.
It’s GREAT.Doobie
● A pure functional, principled database access layer for Scala
● Mapping is a joy (actually...
Use Doobie.
It’s GREAT.Doobie
● A pure functional, principled database access layer for Scala
● Mapping is a joy (actually...
Use Doobie.
It’s GREAT.Doobie
● A pure functional, principled database access layer for Scala
● Mapping is a joy (actually...
Use Doobie.
It’s GREAT.
● A pure functional, principled database access layer for Scala
● Mapping is a joy (actually make ...
A principled database access layer for Scala
● everything is a value
● standard functional programming idioms apply
● Clea...
Mapping just works. No boilerplate.
Mapping just works. No boilerplate.
Mapping just works. No boilerplate.
Mapping just works. No boilerplate.
Mapping just works. No boilerplate.
Mapping just works. Returns what you want.
No surprises - Sane (performant) defaults
● The exact, 50 lines if you want,
SQL queries you want to write.
● PreparedStat...
Rob Norris @tpolecat
(like, he produced working code for SQLXML mapping. At 3 a.m. Just for me)
(OK, 3 a.m for my timezone...
Update 0.4.0: rainbows and wonders
● Fragments
○ https://tpolecat.github.io/doobie-scalaz-0.4.0/08-Fragments.html
○ Doobie...
Yes. Really.
Savant word for
“Makes you love SQL -
No surprise, it just works”
Questions ?
The End
References
● Book of Doobie : https://tpolecat.github.io/doobie-0.3.0/00-index.html
● Really nice presentation of concepts...
Question: testing mapping in the repl ?
This is integrated with
testing frameworks, in
particular scalacheck
Question: more typed, safer queries ?
● Some things are coming in Doobie 0.4.0 !
○ but nothing is fixed for now
○ [update]...
Question: variables number or parameters?
How I deal with a query whose number of parameter is know at runtime ?
Doobie ha...
Question: variables number or parameters?
} Request depends of
parameters of the
function
Query is a pure string
built wit...
Question: retrieving variable depths of
dependent objects?
One big question in data persistance layer is to manage the dep...
License
This work is licensed under a Creative Commons
Attribution-NonCommercial-ShareAlike 4.0 International License.
htt...
Upcoming SlideShare
Loading in …5
×

Doobie - feedbacks from the trenches - Scala.io 2016

4,403 views

Published on

Slides of the talk given at Scala.io 2016 by Francois Armand @fanf42.
This a presentation about Doobie, a purelly functionnal layer built on top of JDBC in Scala by Rob Norris: https://github.com/tpolecat/doobie

The slides explain why we chose Doobie after testing Slick 3.1 for Rudder to replace our old Squeryl/SpringJDBC code.

I focus on the sumplicity and "no surpise - it just works and don't in the middle" philosophy of the framework, and why for the first time on the JVM, we have a principled persistant layer that actually make you love SQL.

I added answers to attendees question at the end of the presentation that was given.

[update 01 Nov 2016: add post Scala.io feedback]
[update 12 May 2017: add a slide about 0.4.0 new feeatures]

Published in: Software
  • Dating for everyone is here: ♥♥♥ http://bit.ly/2u6xbL5 ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Sex in your area is here: ♥♥♥ http://bit.ly/2u6xbL5 ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Fact: Penis Enlargement CAN Work. Here's How. ➤➤ https://bit.ly/30G1ZO1
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • How I Cured My Acne? Ex Sufferer reveals secret system For Lasting Acne Free Skin ♥♥♥ http://t.cn/AiWGkfAm
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Get Your Ex Back Today Relationship expert Justin Sinclair shows you how with 3 easy steps. ◆◆◆ http://t.cn/R50e5nn
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Doobie - feedbacks from the trenches - Scala.io 2016

  1. 1. Feedbacks from the trenches François ARMAND @fanf42 - 2016-10
  2. 2. ? Who knows...
  3. 3. ? ?JdbcTemplate Who knows...
  4. 4. ? ?JdbcTemplate ? Who knows...
  5. 5. ? Anorm ?? Who knows... ?JdbcTemplate
  6. 6. ? Anorm ? Squeryl ? ?JdbcTemplate ? Who knows...
  7. 7. ? Anorm ? Squeryl ? ?JdbcTemplate ? ? Who knows...
  8. 8. ? Anorm ? Squeryl ? ?JdbcTemplate ? ? SQL? Who knows... OBJECT MAPPING PURE SQL
  9. 9. ? Anorm ? Squeryl ? ?JdbcTemplate ? ? SQL? Love SQL ? Who knows...
  10. 10. Who’s talkin’ for why? ● 10 years of Scala ● CTO @Normation ● Lead-dev on Rudder ● chose Scala 7y ago for Rudder Continuous Configuration for Effective ComplianceFrançois ARMAND / @fanf42
  11. 11. ● 10 years of Scala ● CTO @Normation ● Lead-dev on Rudder ● chose Scala 7y ago for Rudder Continuous Configuration for Effective Compliance Squeryl François ARMAND / @fanf42 Who’s talkin’ for why?
  12. 12. ● 10 years of Scala ● CTO @Normation ● Lead-dev on Rudder ● chose Scala 7y ago for Rudder Continuous Configuration for Effective Compliance Squeryl JdbcTemplate François ARMAND / @fanf42 Who’s talkin’ for why?
  13. 13. But what ? ● 10 years of Scala ● CTO @Normation ● Lead-dev on Rudder ● chose Scala 7y ago for Rudder Continuous Configuration for Effective Compliance Squeryl JdbcTemplate François ARMAND / @fanf42 Who’s talkin’ for why?
  14. 14. Slick 3 ? ● Fairly popular, ~ default choice in 2016 for Scala world ● Let’s test it ! ⇒ ported ~ 50% of Rudder code to it.
  15. 15. ● Fairly popular, ~ default choice in 2016 for Scala world ● Let’s test it ! ⇒ ported ~ 50% of Rudder code to it. ● Does not work for us : ● Feels magic and ORM-y, with *Surprises* ○ in generated SQL ■ you can’t precisely control it (that’s the point) ○ in performance (using path of least resistance) ■ ex: run-time compilation for EACH request in the path of least resistance ○ with lift embeding type ■ i.e working with Rep[MyClass] in place of MyClass ● An awful lot of boilerplate Slick 3 ?
  16. 16. Doobie ?
  17. 17. Use Doobie. It’s GREAT. Doobie
  18. 18. Use Doobie. It’s GREAT. Questions ? Doobie
  19. 19. Use Doobie. It’s GREAT.Doobie ● A pure functional, principled database access layer for Scala
  20. 20. Use Doobie. It’s GREAT.Doobie ● A pure functional, principled database access layer for Scala ● Mapping is a joy (actually make me smile)
  21. 21. Use Doobie. It’s GREAT.Doobie ● A pure functional, principled database access layer for Scala ● Mapping is a joy (actually make me smile) ● No surprises - particularly in performances and optimization
  22. 22. Use Doobie. It’s GREAT.Doobie ● A pure functional, principled database access layer for Scala ● Mapping is a joy (actually make me smile) ● No surprises - particularly in performances and optimization ● Rob Norris (@tpolecat) is über nice and helpful
  23. 23. Use Doobie. It’s GREAT.Doobie ● A pure functional, principled database access layer for Scala ● Mapping is a joy (actually make me smile) ● No surprises - particularly in performances and optimization ● Rob Norris (@tpolecat) is über nice and helpful ● It actually makes me like SQL ○ (it tooks 15 years, and PostgreSQL helps a lot)
  24. 24. Use Doobie. It’s GREAT. ● A pure functional, principled database access layer for Scala ● Mapping is a joy (actually make me smile) ● No surprises - particularly in performances and optimization ● Rob Norris (@tpolecat) is über nice and helpful ● It actually makes me like SQL ○ (it tooks 15 years, and PostgreSQL helps a lot) Doobie
  25. 25. A principled database access layer for Scala ● everything is a value ● standard functional programming idioms apply ● Clear separation of concepts ○ (I won’t talk about Free Monad - oups)
  26. 26. Mapping just works. No boilerplate.
  27. 27. Mapping just works. No boilerplate.
  28. 28. Mapping just works. No boilerplate.
  29. 29. Mapping just works. No boilerplate.
  30. 30. Mapping just works. No boilerplate.
  31. 31. Mapping just works. Returns what you want.
  32. 32. No surprises - Sane (performant) defaults ● The exact, 50 lines if you want, SQL queries you want to write. ● PreparedStatement by default. ● Batch updates are given. ● Comparison with JDBC
  33. 33. Rob Norris @tpolecat (like, he produced working code for SQLXML mapping. At 3 a.m. Just for me) (OK, 3 a.m for my timezone. But still :) is extremely nice and helpful actually likes SQL
  34. 34. Update 0.4.0: rainbows and wonders ● Fragments ○ https://tpolecat.github.io/doobie-scalaz-0.4.0/08-Fragments.html ○ Doobie 0.4.0 add fragments, which allows to safely build and factor out part of requests (typically: “select column1, …, column42 in the_table”) ● Logging ○ https://tpolecat.github.io/doobie-scalaz-0.4.0/10-Logging.html ○ Allows to log queries… based on conditions ! Plus, access to full, fine grained timing. ■ “only the one for which you get an error from Database” ■ Or “all the queries taking more than 200ms” ! ○ über easy to connect with your logging framework ● Cats or Scalaz ○ now, you can choose!
  35. 35. Yes. Really. Savant word for “Makes you love SQL - No surprise, it just works” Questions ? The End
  36. 36. References ● Book of Doobie : https://tpolecat.github.io/doobie-0.3.0/00-index.html ● Really nice presentation of concepts and use of Free Monad: ○ SBTB 2015: Rob Norris, Programs as Values: JDBC Programming with Doobie: https://www.youtube.com/watch?v=M5MF6M7FHPo ● https://twitter.com/tpolecat ● https://gitter.im/tpolecat/doobie ● The faq is pretty cool: https://tpolecat.github.io/doobie-0.3.0/15-FAQ.html (“in” clause, outer join, pure SQL strings and more) ● Rudder is full of examples, feel free to read files (importing Doobie) in: https://github.com/Normation/rudder/tree/branches/rudder/4.0/rudder-core/src/ main/scala/com/normation/rudder/repository/jdbc
  37. 37. Question: testing mapping in the repl ? This is integrated with testing frameworks, in particular scalacheck
  38. 38. Question: more typed, safer queries ? ● Some things are coming in Doobie 0.4.0 ! ○ but nothing is fixed for now ○ [update] Actually, was reported post 0.4.0 ● I sum-up all the feedback/ideas I get at Scala.io 2016 here: https://github.com/tpolecat/doobie/issues/375
  39. 39. Question: variables number or parameters? How I deal with a query whose number of parameter is know at runtime ? Doobie has several level of API: ● sql””” …. “”” : the simplest, but also the less flexible ● Query/Query0: give a return type, a type for parameters, and a string for query: allows to build queries by string concatenation (ideal for porting from JDBC) ● HC: “high interface”: allows to add parameter by index, “à la” JDBC, but typed. ○ full, complexe example on next page that adapt a query at runtime based on user parameters, and use HC ● and a low level interface, where all JDBC ugliness is exposed
  40. 40. Question: variables number or parameters? } Request depends of parameters of the function Query is a pure string built with concatenation Dynamically set parameters with HPS & HC
  41. 41. Question: retrieving variable depths of dependent objects? One big question in data persistance layer is to manage the depth in the dependency graph of object you are going to retrieve. Typically, with an employee having a property “manager”, which is an ID in DB but also (of course) an employee, how I manage to get only the first employee with the manager ID ? The first employee with the full employee manager ? And his manager ? Rob Norris gave a super talk exactly on that subject at ScalaWorld 2016: ● “Pure Functional Database Programming with Fixpoint Types “ ○ slides: http://tpolecat.github.io/presentations/sw2016/slides.html#1 ○ video: https://www.youtube.com/watch?v=7xSfLPD6tiQ
  42. 42. License This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. http://www.slideshare.net/normation

×