У меня есть решение, которое можно распараллелить, но у меня (пока) нет опыта работы с hadoop / nosql, и я не уверен, какое решение лучше всего подходит для моих нужд.Теоретически, если бы у меня было неограниченное количество процессоров, мои результаты должны возвращаться мгновенно.Таким образом, любая помощь будет оценена.Спасибо!
Вот что у меня есть:
- 1000с наборов данных
- ключи набора данных:
- все наборы данных имеют одинаковые ключи
- 1 миллион ключей (это может быть позже 10 или 20 миллионов)
- столбцы набора данных:
- каждый набор данных имеет одинаковые столбцы
- От 10 до 20 столбцов
- большинство столбцов являются числовыми значениями, для которых нам нужно агрегировать (avg, stddev и использовать R для вычисления статистики)
- несколько столбцов являются столбцами "type_id",поскольку в конкретный запрос мы можем включить только определенные type_ids
- веб-приложение
- , пользователь может выбрать, какие наборы данных ему интересны (от 15 до1000)
- приложение должно представить: ключевые и агрегированные результаты (avg, stddev) каждого столбца
- обновления данных:
- всегоНабор данных может быть добавлен, удален или заменен / обновлен
- было бы здорово, чтобы иметь возможность добавлять столбцы.Но, если требуется, можно просто заменить весь набор данных.
- никогда не добавлять строки / ключи в набор данных - поэтому не требуется система с большим количеством быстрых записей
- инфраструктура:
- в настоящее время две машины с 24 ядрами в каждом
- в конце концов, хотите иметь возможность запускать это на amazon
Я не могу предварительно вычислить мои агрегированные значения, но поскольку каждый ключ независим, это должно быть легко масштабируемым.В настоящее время у меня есть эти данные в базе данных postgres, где каждый набор данных находится в своем собственном разделе.
- разделы хороши, так как могут легко добавлять / удалять / заменять разделы
- база данныххорошо подходит для фильтрации по базам данных type_id
- , для написания параллельных запросов нелегко * базы данных 1065 *
- хороши для структурированных данных, а мои данные не структурированы
Asподтверждение концепции, которую я опробовал hadoop:
- создал файл с разделением табуляцией для каждого набора данных для определенного type_id
- , загруженного в hdfs
- map: получил значение /столбец для каждого ключа
- уменьшить: вычисленное среднее и стандартное отклонение
Из моего грубого подтверждения концепции я вижу, что это будет хорошо масштабироваться, но я могу видеть hadoop / hdfsимеет время ожидания, я читал, что он обычно не используется для запросов в режиме реального времени (хотя я в порядке с возвращением результатов пользователям через 5 секунд).
Любое предложение о том, как я должен подходить к этому?Я думал о том, чтобы попробовать HBase, чтобы почувствовать это.Стоит ли мне вместо этого смотреть на Улей?Cassandra?Волдеморт?
спасибо!