2013-04-15 5 views
1

Мы имеем простую таблицу, например следующим образом:Какое лучшее решение для больших данных для интерактивных запросов строк до 200 столбцов?

------------------------------------------------------------------------ 
| Name | Attribute1 | Attribute2 | Attribute3 | ... | Attribute200 | 
------------------------------------------------------------------------ 
| Name1 | Value1  | Value2  | null  | ... | Value3  | 
| Name2 | null  | Value4  | null  | ... | Value5  | 
| Name3 | Value6  | null  | Value7  | ... | null   | 
| ...                 | 
------------------------------------------------------------------------ 

Но может быть до сотни миллионов строк/имен. Данные будут заполняться каждый час или около того.

Цель состоит в том, чтобы получить результаты для интерактивных запросов по данным за пару секунд.

Большинство запросов выглядит следующим образом:

select count(*) from table 
where Attribute1 = Value1 and Attribute3 = Value3 and Attribute113 = Value113; 

где положение содержит произвольное количество пар имя-значение атрибута.

Я новичок в больших данных и задаюсь вопросом, что лучший вариант с точки зрения хранилища данных (MySQL, HBase, Cassandra и т. Д.) И механизма обработки (Hadoop, Drill, Storm и т. Д.) Для интерактивных запросов, как описано выше.

+0

Ваше описание того, какие типы запросов вы хотите выполнить, состоит в том, что вы хотите иметь возможность экспоненциально выполнять множество разных запросов (2^200 в вашем примере). Если это так, я считаю, что я не думаю, что вы найдете решение дешевле, чем сканирование таблицы и подсчет количества строк, соответствующих вашему предикату. Если вы можете каким-то образом ограничить возможные запросы или предоставить больше контекста, возможно, у меня есть лучшее решение для вас. –

+0

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

+0

Я менее знаком с Кассандрой, поэтому буду говорить в терминах HBase. Если вы попытаетесь просто сканировать все строки, вы можете выполнить простую проверку HBase с фильтром (http://hbase.apache.org/book/thrift.html), чтобы потоковое обращение к клиенту HBase (скажем, бережливость client) набор строк, который соответствует вашему предикату, а затем подсчитайте их. На каком языке вы будете взаимодействовать с базой данных (HBase?)? Опять же, я могу дать «реальный» ответ с более подробной информацией об окружающей среде. –

ответ

0

Столбчатый DB, такой как Vertica (закрытый источник) или MonetDB (с открытым исходным кодом - но я его не использовал) будет обрабатывать запросы, подобные тем, которые вы упомянули эффективно. В 50000 футах рассмотрите причины этого, так как они хранят каждый столбец отдельно и, таким образом, не считывают ненужные столбцы, когда им нужно запрашивать данные. В вашем примере будут считываться 3 атрибута, а другой 197 не будет