Skip to content

jackc/json_api_bench

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JSON API Benchmark

This application is a sample benchmark for various approaches to generating JSON API responses. It was written to accompany this post about PostgreSQL JSON generation on the Hashrocket blog. It exercises the entire application stack instead of just JSON generation so that the timing can be viewed in the context of the entire application. It uses unicorn with 4 worker processes. It typically tests three approaches:

  • Standard Rails - to_json on model objects
  • Optimized Rails - pluck and select_all
  • PostgreSQL - row_to_json and array_to_json

The sample domain is a simple dictionary. The entities involved are words, definitions, quotes, and related words.

Requirements

PostgreSQL, siege

Scenarios

  • Concise auto-complete word search - Returns first 10 words matching search term. This scenario is an example of a very simple, feather weight API call that returns only an array of 10 strings.
  • Rich auto-complete word search - Returns first 10 words matching search term with text, pronunciation, part of speech, and first definition. This is a light weight example that involves two entity types.
  • Word definition - Shows the definitions, quotes, and related words for the specified word. This is a middle weight example.
  • Many word definitions - Shows the definitions, quotes, and related words for many words at a time. This is representative of a heavy weight JSON API.

Running the Benchmarks

Bundle dependencies:

bundle install

To setup the test data run the following rake tasks:

rake db:create db:migrate benchmark:setup

Start the server:

RAILS_ENV=production unicorn -c config/unicorn.rb

Run the benchmark rake task:

rake benchmark:run

About

Benchmark of Rails and PostgreSQL JSON generation techniques

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •