Страницы

воскресенье, 3 ноября 2013 г.

Hbase

     Последнее время приходиться работать с этим вот зверем в загаловке, поэтому думаю напишука  я немного постов о нем.  Что это за зверь - это распределенная база данных, разработаная по мотивам BigTable от Google, которую описал Google в своих статьях. Данная база данных может работать как поверх не безызвестного hadoop, так и без него. Данная база данных прозрачно горизонтально масштабируется в идеальном варианте, не в идеальном смущает ярковыраженный мастер, но обо всем по порядку.
    Для затравки расскажем, что этот зверь позволяет...




     А зверь позволяет кучу интересного.. Для себя я сделал аналогию, что Hbase это база данных excel таблиц, хотя строго говоря это база key-value.
    В Hbase есть следующие сущности :

1) RowKey первичный идентификатор документа( давайте называть это именно так, потому что значением язык не поварачивается назвать эту сущность)
2) Семьи или именнованые множества, по одному ключу можно достучаться до разных множеств.
3) Вторичный ключ в семье-множестве
4) Время - встроенное значение у Hbase, по умолчанию время добавление, но можно менять
5) Значение

и у всего этого есть еще и версионность.

При создании таблицы, необходимо задавать  явно какие множества ключей будут в таблице.
hbase shell
> create 'table',[{NAME=>'params', VERSIONS=>1},{NAME=>'meta', VERSIONS=>1}]

Мы говорим hbase создать таблицу в у которой будет две семьи ключей params и meta ( по аналогии с excel таблицами, я бы сказал что по ключу будут доступны два excel документа ).
Количество вторичных ключей в hbase не ограничено - теоретически в разумных пределах.
Что бы продемонстрировать эти понятия запишем что-то

> put 'table', 'key','params:1',"val"
> put 'table', 'key','meta:1',"val1"

НО НЕ НАДО ДЕЛАТЬ ПО АНАЛОГИИ С СУБД ДЕЛАТЬ аля в первой семье хранить 
аля сумму, во второй имя, в третьей что-то еще... НЕОБХОДИМО подобное хранить  в одной семье ключей.   Например так

> put 'table', 'key','params:name',"val"
> put 'table', 'key','params:amnt',"1"

     Из этого всего мы делаем вывод что ключевым фактором в использовании HBASE является проектирование ключа  ROWKEY, от этого будет напрямую зависеть производительность вашей системы. 



   И по всем по этому Hbase позволяет делать MapReduce таски, которые естественно медленнее тасков Hadoop и всегда так будет, и никогда это не измениться, потому что проектировались эти системы для разных целей. Hbase это online - система, Hadoop -же оffline.

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

В следующем посте мы расскажем о физической организации хранилища данных HBASE.




















   



Комментариев нет: