2013-06-28 3 views
2

Это вопрос:Ограничения квалификатора столбцов HBase

Я работаю над проектом с использованием HBase для хранения информации о доступности книг. Один из вопросов, на которые я должен ответить (и тот, который будет происходить большую часть времени): Дайте мне все доступные книги в диапазоне дат. Чтобы решить эту проблему, я придумал схему, в которой для каждой книги ISBN у меня есть семейство столбцов с одним квалификатором для каждого дня в году, и там я храню, сколько книг есть для этого дня. Таким образом, у меня есть 365 столбцов на строку, и с помощью ColumnRangeFilter я могу вернуть доступность книги для любой книги (при условии, что она ISBN) в определенном диапазоне дат.

И это само по себе вопрос:

Есть ли предел в количестве столбцов классификаторов строка может иметь? Или, по крайней мере, наилучшая практика для этого? Потому что теперь у меня только 365 классификаторов столбцов в строке, но если этот проект будет успешным, есть шанс иметь около 10000 квалификаторов за строку. Мне нравится знать, хорошо ли эта схема масштабируется для такого сценария.

ответ

2

Несмотря на то, что на самом деле нет такого ограничения, вы должны разработать свою модель, чтобы держать ваш случай использования в уме. ИМХО, вам лучше иметь более широкие ряды, если вам нужно выполнять атомарные операции в широком диапазоне данных, а не иметь большее количество строк с меньшим количеством столбцов. Преимущество такого подхода состоит в том, что вы можете действовать атомарно на нескольких столбцах, как того требует ваш прецедент. Это также позволит читателям, которые одновременно получают доступ к строке, чтобы увидеть все обновление этой строки.

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

+0

Спасибо @Tariq за ваш ответ. Я согласен с первой частью, чего я хотел достичь: выполнять атомные операции в каждой книге.Что касается второй части вашего ответа, я не думал о разделении регионов, я рассмотрю возможность настройки моей схемы, чтобы избежать этого сценария (загрузка одного сервера), возможно, создание семейства столбцов в месяц или год, но это будет требуется дополнительная логика для обработки результатов в коде. Что вы думаете об этом подходе? – Diego

+0

Удовольствие. Если у вас есть 1 CF/month, вы в конечном итоге получаете слишком много CF (в конце 1 года у вас будет 12 CF), что не очень хорошо. – Tariq

+0

Вы правы. Кажется, мне нужно немного подумать об этом, но, чтобы начать, я могу пойти с этим дизайном, по крайней мере, для проведения некоторых тестов. Спасибо за ваши ответы! – Diego

3

Насколько я знаю, нет специального предела количества столбцов в объявленной строке. Все меняется, но по крайней мере люди обсуждают случаи «миллионов столбцов», которые, безусловно, не ваши. ОК, есть предел размера строки, но он далеко от ваших номеров.

Вот еще одна потенциальная проблема со «слишком широкими» рядами. Если вы не укажете точные квалификаторы, любое сканирование приведет к целым строкам, чтобы вы могли получить гораздо больше данных, чем вам действительно нужно. Подумайте о диапазонах, подобных «в этом месяце». Опять же, действительно ли вы хотите использовать медленное сканирование внутри строк, чтобы получить нужный столбец внутри строки?

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

+0

Спасибо за ваш ответ! Вы правы в слишком широких рядах, но еще одна вещь, которую я хочу от описанного дизайна, - это атомарность HBase гарантирует выполнение строки. Время от времени мне нужно будет обновлять количество книг в течение определенного периода времени, и с данным дизайном я могу сделать это атомарно. Вы знаете другой способ решить эту проблему? – Diego

+0

http://staltz.blogspot.com/2012/10/hacid-multi-row-transactions-in-hbase.html выглядит как хороший момент для начала, но поскольку я знаю, что сам HBase не дает никакой гарантии. Вопрос в том, действительно ли вам нужны такие операции, чтобы быть атомарными? –

+0

И вот еще один момент для вас: http://hadoop-hbase.blogspot.com/2012/02/limited-cross-row-transactions-in-hbase.html –