У меня есть решение, которое можно распараллелить, но у меня (пока) нет опыта работы с 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, чтобы почувствовать это. Стоит ли мне вместо этого посмотреть на Улей? Кассандра? Волдеморт?
спасибо!
задан anish 26 July 2011 в 17:12
поделиться