Import 50 000 movies
into a database
Task
[
{title: “Back to the Future”, year: 1985, …},
{title: “The Matrix”, year: 1999, …},
{title: “The Shawshank Redemption”, year: 1994, …},
…
]
Slide 3
Slide 3 text
ActiveRecord
require “active_record”
ActiveRecord::Base.establish_connection(“postgres:///test”)
class Movie < ActiveRecord::Base
end
Movie.create(movies_data)
=> 1 minute
#=> [#,#,…]
Movie.where{plot.like(’%future%’)}
# WHERE (plot LIKE ‘%future%’)
Movie.where{plot.like(’%future%’)}
# WHERE (plot LIKE ‘%future%’)
Movie.where{info.cast(String).like(‘%future%’)}
Movie.where{plot.like(’%future%’)}
# WHERE (plot LIKE ‘%future%’)
Movie.where{info.cast(String).like(‘%future%’)}
Movie.where{date.extract(:year) => 2015}
# WHERE (extract(year FROM “date”) = 2015)
Movie.where{plot.like(’%future%’)}
# WHERE (plot LIKE ‘%future%’)
Movie.where{info.cast(String).like(‘%future%’)}
Movie.where{date.extract(:year) => 2015}
# WHERE (extract(year FROM “date”) = 2015)
Movie.select{avg(:rating).as(“average_rating”)}
Virtual rows
Slide 14
Slide 14 text
Movie.where{title.like(‘%Batman%’)}
Movie.where{title.like(‘%Batman%’)}
Movie.where(title: /Batman/)
# WHERE (title ~ ‘Batman’)
Movie.where{title.like(‘%Batman%’)}
Movie.where(title: /Batman/)
# WHERE (title ~ ‘Batman’)
Movie.where(title: /Batman/i)
# WHERE (title ~* ‘Batman’)
Regex
Slide 15
Slide 15 text
Movie.recent.except(Movie.horror)
Movie.recent.except(Movie.horror)
Movie.action.instersect(Movie.science_fiction)
Movie.recent.except(Movie.horror)
Movie.action.instersect(Movie.science_fiction)
Movie.romance.union(Movie.adventure)
EXCEPT
INTERSECT
UNION
• Advanced database interface (Postgres!)
• Sequel::Model or Sequel::Dataset (your choice)
• Plugins/Extensions design
• Very similar to ActiveRecord, but much better
(query interface)
• 0 issues, awesome support
Overview