запрос / агрегирование миллионов записей в реальном времени - hadoop? hbase? cassandra?

У меня есть решение, которое можно распараллелить, но у меня (пока) нет опыта работы с hadoop / nosql, и я не уверен, какое решение лучше всего подходит для моих нужд. Теоретически, если бы у меня было неограниченное количество процессоров, мои результаты должны были бы возвращаться мгновенно. Итак, любая помощь будет оценена. Спасибо!

Вот что у меня есть:

  • 1000 наборов данных
  • ключей набора данных:
    • все наборы данных имеют одинаковые ключи
    • 1 миллион ключей (позже может быть 10 или 20 миллионов)
  • столбцы набора данных:
    • каждый набор данных имеет одинаковые столбцы
    • от 10 до 20 столбцов
    • большинство столбцов представляют собой числовые значения, по которым нам нужно агрегировать (avg, stddev и использовать R для вычисления статистики)
    • , некоторые столбцы являются столбцами type_id, поскольку в конкретном запросе мы можем хотите включить только определенные type_ids
  • веб-приложение
    • пользователь может выбрать, какие наборы данных ему интересны (от 15 до 1000)
    • приложение должно представить: ключ и агрегированные результаты (avg, stddev)каждого столбца
  • обновлений данных:
    • можно добавить, удалить или заменить / обновить весь набор данных
    • было бы здорово иметь возможность добавлять столбцы. Но при необходимости можно просто заменить весь набор данных.
    • никогда не добавляйте строки / ключи к набору данных - поэтому не нужна система с большим количеством быстрой записи
  • инфраструктура:
    • в настоящее время две машины с 24 ядрами каждый
    • в конечном итоге хочет иметь возможность запускать это на Amazon

. Я не могу предварительно вычислить мои агрегированные значения, но поскольку каждый ключ независим, это должно быть легко масштабируемым. В настоящее время у меня есть эти данные в базе данных postgres, где каждый набор данных находится в своем собственном разделе.

  • разделы хороши, так как могут легко добавлять / удалять / заменять разделы
  • база данных хороша для фильтрации на основе type_id
  • базы данных нелегко писать параллельные запросы
  • базы данных хороши для структурированных данных, а мои данные не структурированы

В качестве доказательства концепции я попробовал hadoop:

  • создал файл с разделением табуляцией для каждого набора данных для конкретный type_id
  • загружен в hdfs
  • map: получено значение / столбец для каждого ключа
  • reduce: вычисленное среднее и стандартное отклонение

Из моего грубого доказательства концепции я вижу, что это будет хорошо масштабироваться , но я вижу, что hadoop / hdfs имеет задержку. Я читал, что он обычно не используется для запросов в реальном времени (хотя я нормально возвращаю результаты пользователям через 5 секунд).

Есть предложения, как мне подойти к этому? Я подумывал попробовать HBase, чтобы почувствовать это. Стоит ли мне вместо этого посмотреть на Улей? Кассандра? Волдеморт?

спасибо!

7
задан anish 26 July 2011 в 17:12
поделиться