How frequently does the letter н appear in:
Q: Очередь к базе данных Задача такова
Приходит большой массив данных в формате JSON
Их него надо выбрать несколько полей и сохранить их в базу данных.
Проблема в том, что таких массивов данных очень много, обработка одного занимает приличное время. 
Хотелось бы организовать следующую систему. 
 http-parser->| Queue |->{Worker_1}->{DB}
              | Item1 |  {Worker_2}
              | Item2 |  {Worker_n}
              | ItemN |          

Небольшой скрипт на Ruby получает ответ от сервера, добавляет его в очередь и продолжает и ждет следующего ответа от сервера. В свою очередь воркеры, если видят информацию в очереди, то они разбирают её и начинают обрабатывать и сохранять в базу данных. 
На данный момент сложность в том, что парсер отвечает за все: парсинг, выборку, сохранение в БД, поэтому обработка ответов от сервера сильно затягивается. 
Нулевая мысль была банально бросать сохранение в БД в отдельный тред, однако это не очень гибкое решение. 
Первая же мысль была банально забрасывать весь json объект прямо в базу, а потом тягать оттуда, но тогда стоит вопрос о том, как блокировать запись, чтобы worker_n не стал обрабатывать одну и ту же запись вместе с другим воркером. 
Другими словами интересуют известные методы\ПО, позволяющее сократить время записи в БД. В частности интересуют какие-нибудь продукты Amazon Web Services. Я вскользь прочитал про Amazon Simple Queue, но не уверен, что она покроет мои задачи. 

A: Способов, вообще говоря,  полно.
Можно использовать Amazon SQS, верно. Пример использования выглядит несложно. Но это облачный сервис, что многие для такой (вроде) простой задачи сочтут пушкой по воробьям, хотя вы сами поинтересовались именно ими.
Можно использовать свой сервер обмена сообщениями с подтверждением доставки, их есть много, но для примера, есть RabbitMQ.
Можно использовать PostgreSQL и его фичу advisory lock, блокировку, о смысле которой знает только приложение, сама СУБД не обращает на неё внимания. Такой подход использует очередь Que, в которой уже реализована SQL-часть. В этом подходе приятно то, что управлять задачами можно в транзакциях с ACID вместе с изменением других данных.

А теперь плохие идеи.
Можно использовать Concurrent::Edge::Channel из concurrent-ruby. А в задачах, где большая часть состоит из активного Ruby, а не ввода/вывода, это плохая идея, потому что в MRI есть GIL, из-за которого будет выполняться только одна задача в каждый момент времени.
Можно выполнять каждым воркером каждую N-ую задачу из БД, как предложено в комментариях. Но это будет хорошо работать только если все задачи примерно одинаково трудоёмки (иначе некоторые воркеры будут отставать от остальных) и все воркеры никогда не падают (т. к. каждая N-ая задача может быть выполнена ровно одним воркером).

A: 
На данный момент сложность в том, что парсер отвечает за все: парсинг, выборку, сохранение в БД, поэтому обработка ответов от сервера сильно затягивается.

Поздравляю. Это называется God-object. И от него в любом случае следует избавиться.
Что же касается основной задачи - вариант в лоб это сохранять данные в файл и в отдельном процессе их разбирать.
На самом деле, есть более изящные решения, например тот же Sidekiq
Работает это так:
Тебе нужно создать класс, который будет содержать публичный метод perform и примешать к нему Sidekiq::Worker.
Т.е. получится что-то типа такого:
class DelayedParser
  include Sidekiq::Worker

  def perform(json)
    # тут что-то делаешь с данными
  end
end
DelayedParser.perform_async(json) # json - данные которые нужно обрабатывать.


user
I found 149 "н"s in the provided passage.
assistant