At 8tracks.com we believe on finding the best tool for the job.
In the quest of finding a great persistence solution to power our "Explore" system one of our engineers stumbled upon redis.io.
A few years later, we run 25 different Redis instances powering several features for our 10 million users.
From Tag Browsing, to Autocomplete Search, persisting Player sessions and our News Feed. Our 4 engineers team eats the redis documentation for breakfast.
Come join me in some redis love while I tell you why we're such big fans of zsets, set intersections and some other nice features that help us power 12.5 million hours of streaming per month.
19. When development tries to
blame operations for the outage
http://devopsreactions.tumblr.com/post/84309007419/when-development-tries-to-blame-operations-for-the
29. things to keep in mind
• all in memory (but not restricted to)
• no joins or iterating over data (but not restricted to)
• you should be able to rebuild data
30. why?
• sometimes basic data structures is all you need
• some problems are hard to fit in a relational way
31. redis @ 8tracks = <3
sidekiq
feature toggles
caching
player (moved to couchdb, then to mysql)
autocomplete (moved to SOLR, then to ElasticSearch)
tag browsing!
news feed
listening sessions
rate limiter
37. 1 SELECT name !
! ! FROM tags !
! ! WHERE name !
! ! LIKE 'ind%' LIMIT 10;!
!
2 SELECT name !
! ! FROM mixes !
! ! WHERE name !
! ! LIKE 'ind%' LIMIT 10;!
!
3 SELECT login !
! ! FROM users !
! ! WHERE login !
! ! LIKE 'ind%' LIMIT 10;!
!
4 SELECT name !
! FROM artists !
! WHERE name !
! LIKE 'ind%' LIMIT 10;!
38. you could do
1 (SELECT name FROM tags WHERE
name LIKE 'ind%' LIMIT 10)!
2 UNION ALL!
3 (SELECT name FROM mixes WHERE
name LIKE 'ind%' LIMIT 10);!
39. the problems
• cross-type search
• I don’t want 10 of each, I want the 10 most relevant
ones
• can’t select different column counts
40. not a fair comparison
people don’t use sql databases for search.
they use SOLR (or elasticsearch)