Как HBase управляет своими индексами? - PullRequest
0 голосов
/ 06 февраля 2012

Как он может поддерживать упорядоченный индекс, если HDFS доступна только для чтения (или добавляется в базовом сценарии)?

Сохраняет ли он свои индексы в HDFS или в каком-либо постоянном хранилище?

[РЕДАКТИРОВАТЬ] Для примера, допустим, я добавил строки F B A E в этом порядке. Поскольку HDFS может только добавляться, я подозреваю, что порядок строк на диске будет таким же, как порядок вставки. Но как он поддерживает свой индекс или держит свои ключи в порядке? - поскольку область, в которой хранятся ключи, однократно записывается.

1 Ответ

2 голосов
/ 06 февраля 2012

HBase не имеет индексов. Он имеет упорядоченные ключи (примерно эквивалентные кластерному индексу в SQL Server или упорядоченным по индексу таблицам в Oracle, но без b-дерева), которые поддерживаются с помощью упорядоченного разбиения и записи с метками времени.

HFiles сбрасываются на диск только , когда memstore достигает определенного (настраиваемого) размера, и вы правы - они записываются только один раз, а затем не изменяются. Когда HBase выполняет сжатие, несколько файлов считываются с диска, объединяются, а затем перезаписываются в один больший (объединенный) файл. Затем файлы меньшего размера удаляются.

В то же время журнал записи вперед (WAL) периодически записывается в HDFS (по умолчанию 10 с) и содержит упорядоченный набор правок для данного сервера регионов. Я считаю, что WAL требует HDFS Append для правильной работы.

Все это и многое другое @ моя презентация на HBase здесь: http://www.slideshare.net/trihug/intro-to-apache-hbase-by-chris-shain-of-tresata и здесь http://outerthought.org/blog/465-ot.html и здесь http://outerthought.org/blog/417-ot.html

...