jackc / json_api_bench

Benchmark of Rails and PostgreSQL JSON generation techniques

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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


Languages

Language:Ruby 67.9%Language:TSQL 18.3%Language:HTML 10.8%Language:CSS 1.5%Language:JavaScript 1.5%