HBaseのアーキテクチャを理解しよう

CodeZine / 2013年3月5日 14時0分

 前回はHBaseの概要について説明し、実際にHBaseを動かしてみました。今回はHBaseのアーキテクチャについて解説していきたいと思います。

■はじめに

 HBaseのアーキテクチャについて知ることは、HBaseを使ってアプリケーションを設計するためにとても重要なことです。RDBとは違う部分が多いので最初は理解しにくいかもしれませんが、できるだけ分かりやすく解説していきたいと思います。

■対象読者

HBaseを使ってみたいけど、どう使ったらよいか分からない方 MySQLなどのRDB以外のデータベースを使ってみたい方 ■HBaseのデータモデルについてのおさらい

 前回もHBaseのデータモデルについて説明しましたが、最初に簡単にデータモデルのおさらいをします。

 以下、前回の論理データモデルの説明を箇条書きでまとめたものになります。

多次元ソートマップ Table = SortedMap<RowKey, Map<ColumnFamily, SortedMap<Column, SortedMap<Timestamp, Value>>>>
Tableがあり複数のRowがRowKeyによって一意に特定される すべてのRowはRowKeyによって辞書順にソートされている Rowには1つ以上のColumnが存在する Tableには1つ以上のColumnFamilyが存在し、ColumnはいずれかのColumnFamilyに所属する ColumnFamilyはテーブル作成時に定義する必要があるが、Columnは後から自由に追加できる それぞれのColumnには、複数のバージョン(基本的にはTimestampで管理)を持たせることができる

 論理的には上記のようなモデルですが、物理的には以下のようにファイルに分割されディスクに格納されます。

RowKeyの範囲でファイルが分割される(Region) さらに、ColumnFamilyごとにファイルを分けてディスクに保存される Regionごとに各HRegionServerに割り当てられ負荷が分散される  先ほど示した図の例の場合、以下のようにファイルが分割されることになります。

 ただし、HRegionServerにはRegionの単位で割り当てられるので、同じRegionであれば複数のColumnFamilyがあっても同じHRegionServerに割り当てられます。



 それぞれのファイルでは、以下のように格納されています。

各エントリーはRowKey,ColumnFamily,Column,Timestamp,Valueがセットで格納されている RowKey+ColumnFamily+Column+Timestampでソートされている 同じRowでも複数のColumnの値が存在する場合は、同じRowKeyのエントリーが複数存在している 値がNULLであるColumnを保存しない バージョンに関しては、RowKeyやColumnが同じでTimestampのみが違うエントリーとして管理されている



CodeZine

トピックスRSS

ランキング