Professional Documents
Culture Documents
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
•Tag.find :conditions => [‘text LIKE ?’, ...]
Tyler McMullen
Put Down the Hammer
•Tag.find
:conditions
=>
[‘text
LIKE
?’,
...]
•TagController#autocomplete
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
SPEED
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
Ajax Call
Tyler McMullen
Put Down the Hammer
Ajax Call
Nginx
Tyler McMullen
Put Down the Hammer
Ajax Call
Nginx
Router
Tyler McMullen
Put Down the Hammer
Ajax Call
Nginx
Router
Action
Tyler McMullen
Put Down the Hammer
Ajax Call
Nginx
Router
Action
Tag.find
Tyler McMullen
Put Down the Hammer
Ajax Call
Nginx
Router
Action
Tag.find
MySQL full table scan
Tyler McMullen
Put Down the Hammer
Ajax Call
Nginx
Router
Action
Tag.find
MySQL full table scan
Map rows to ActiveRecord objects
Tyler McMullen
Put Down the Hammer
Ajax Call
Nginx
Router
Action
Tag.find
MySQL full table scan
Map rows to ActiveRecord objects
Render JSON/HTML
Tyler McMullen
Put Down the Hammer
Ajax Call
Nginx
Router
Action
Tag.find
MySQL full table scan
Map rows to ActiveRecord objects
Render JSON/HTML
Respond
Tyler McMullen
Put Down the Hammer
Ajax Call
Nginx
Router
Action
Tag.find
MySQL full table scan
Map rows to ActiveRecord objects
Render JSON/HTML
Respond
Tyler McMullen
Put Down the Hammer
Ajax Call
Nginx
Router
Action
Tag.find
MySQL full table scan
Map rows to ActiveRecord objects
Render JSON/HTML
Respond
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
Use a Trie.
Tyler McMullen
Put Down the Hammer
Use a Trie.
Tyler McMullen
Put Down the Hammer
B E E
Tyler McMullen
Put Down the Hammer
A R
B E
Tyler McMullen
Put Down the Hammer
A R T
B E A R
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
Ajax Call
Nginx
Router
Action
Tag.find
MySQL full table scan
Map rows to ActiveRecord objects
Render JSON/HTML
Respond
Tyler McMullen
Put Down the Hammer
Ajax Call
Nginx
Router
Action
Trie#children(prefix)
Render JSON/HTML
Respond
Tyler McMullen
Put Down the Hammer
Ajax Call
Nginx
Router
Action
Trie#children(prefix)
Render JSON/HTML
Respond
Our next victims!
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
•Fast
Tyler McMullen
Put Down the Hammer
•Fast
•Low Memory Usage
Tyler McMullen
Put Down the Hammer
•Fast
•Low Memory Usage
•Easy
Tyler McMullen
Put Down the Hammer
class
Autocompleter
def
initialize
@trie
=
Trie.load_file(file,
/(\w+)\|(\d+)/)
end
def
call(env)
req
=
Rack::Request.new(env)
words
=
@trie.children(req.params['query'])[0,5]
[
200,
{
"Content‐Type"
=>
"text/html"
},
[words.to_json]
]
end
end
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
location
/autocomplete
{
proxy_pass
http://autocompleter;
}
Tyler McMullen
Put Down the Hammer
location
/autocomplete
{
proxy_pass
http://autocompleter;
}
Tyler McMullen
Put Down the Hammer
Ajax Call
Nginx
Router
Action
Trie#children(prefix)
Render JSON/HTML
Respond
Tyler McMullen
Put Down the Hammer
Ajax Call
Nginx
Rack Service
Trie#children(prefix)
Render JSON/HTML
Respond
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
Tyler McMullen
Put Down the Hammer
Questions?
Tyler McMullen