NHNカンファレンスでもらったHBaseの本を、ざっと斜め読みして、適当にまとめるシリーズ「HBaseを読む」の続きです。
ちゃんとした情報を知りたい人は、HBaseの本を見てください。
今回は、1.1、1.2章
■1.3 非リレーショナルデータベースシステム、
Not−Only SQLあるいはNoSQL?
・ここ4、5年の間、この問題領域のイノベーションのペースは
ゆっくりしたものから、信じがたいほど速いものになった
→NoSQLソリューションの到来
→Johan Oskarssonの問いに答えて、
Eric Evansが生み出した用語
→特定の問題群に異なるデータストアアーキテクチャ
以前からあった:Berkeley DBなど
・新しいストレージシステムの多くはクエリの手段にSQLが
提供されていなかった
→もっとシンプルなAPI
→SQLの方言を提供するツールが使えることがあり
→すでにクエリを行う制限はRDBMSと
差異がなくなっている
・差異はもっと低レベルにある
→スキーマ、ACIDのようなトランザクション
→スケーラブルになるとき
トランザクション、セカンダリインデックスをサポートしない
固定的なスキーマを持たない
※コラム:一貫性
・一貫性の強さ
Strict:アトミック
Sequential:あらゆる変更が適用された順番で
Causal:関連する要因で生じた変更が、順番で
Eventual:一定期間更新なければ、最終的には
Weak:保証されない
・CAP定理
分散システムにおいて実現可能なのは、一貫性、可用性、分散耐性
の中の2つまで
・一貫性を緩和し、可用性を高めるというのは、強力な考え
→そうなれば、一貫性はアプリケーションで:複雑さ増す
※コラム:ここまで
・RDBMSでないものはすべてNoSQLにされる
→memcachedまで
→技術的可能性をぼやけさせてしまう
・NoSQLには、それぞれのシステムの強みの分類に役立つ多くの
観点がある
1.3.1 観点
・それらの観点のいくつかを見ていく
データモデル:KVS、半構造化の列指向、ドキュメント指向
ストレージモデル:インメモリ、永続型
一貫性→レイテンシーに影響(収穫と生産)
物理モデル:分散型、単独のマシン
読み書きのパフォーマンス
セカンダリインデックス
障害の処理
圧縮
ロードバランス
アトミック名読み出し−変更−書き込み
ロック、ウェイト、デッドロック
・インピーダンスマッチ
ひとつでなんでもまかなうアプローチをとる代わりに
ほかのどんなものが使えるかを知るべき
1.3.2 スケーラビリティ
・RDBMSのパフォーマンス
トランザクション処理には向いている
超大規模な分散処理には向いていない
サーバーを垂直にスケールさせると、十分な効果得られない
トランザクションや並列度に対し、ウェイトやデッドロック
・商用のRDBMS
処理してくれるのは特定の面だけということよくある
とても高価
・リレーショナルな機能をパフォーマンスのために恒久的に犠牲に
するのが、よいことなのか?
・スケーラビリティを実現するものと同じメカニズム
→NoSQLのソリューション
HBaseが提供するのと同じソリューション
1.3.3 データベースの(非)正規化
・大規模システムの場合、スキーマの設計のやり直しを考えないと
いけないことがよくある
→非正規化、複製、インテリジェントキー
・読み出し時にそれ以上集約を行う必要がないように2つ以上の
テーブルにデータを複製
→スキーマを非正規化
必要なビューを事前にマテリアライズ
・旧来のリレーショナルデータベースモデルからHBaseへの列指向の
正確により適しているモデルへの変換
一対一、一対多、多対多の関係をHBaseの下位層のアーキテクチャ
に適合するように変換するには、様々なアプローチがあります
どのアプローチをとるか、HBaseのストレージ設計の潜在能力を
完全に理解しとかなければいけません
・疎で幅の広いテーブルと、列指向の設計がサポートされている
→データを正規化する必要がなくなり、JOIN操作もなくせる
・インテリジェントキーを使う
データがどのように、どこに保存されるかを細かく制御できる
キーの一部分を使ったルックアップが可能
→複合キーと組み合わせて使えば、
属性をインデックスの先頭部分として利用できる
・スキーマを適切に設計すれば、データ数が10から1千万になっても
読み書きのパフォーマンスが変わらないようにできる
次回は、1.4章
ちゃんとした情報を知りたい人は、HBaseの本を見てください。
今回は、1.1、1.2章
■1.3 非リレーショナルデータベースシステム、
Not−Only SQLあるいはNoSQL?
・ここ4、5年の間、この問題領域のイノベーションのペースは
ゆっくりしたものから、信じがたいほど速いものになった
→NoSQLソリューションの到来
→Johan Oskarssonの問いに答えて、
Eric Evansが生み出した用語
→特定の問題群に異なるデータストアアーキテクチャ
以前からあった:Berkeley DBなど
・新しいストレージシステムの多くはクエリの手段にSQLが
提供されていなかった
→もっとシンプルなAPI
→SQLの方言を提供するツールが使えることがあり
→すでにクエリを行う制限はRDBMSと
差異がなくなっている
・差異はもっと低レベルにある
→スキーマ、ACIDのようなトランザクション
→スケーラブルになるとき
トランザクション、セカンダリインデックスをサポートしない
固定的なスキーマを持たない
※コラム:一貫性
・一貫性の強さ
Strict:アトミック
Sequential:あらゆる変更が適用された順番で
Causal:関連する要因で生じた変更が、順番で
Eventual:一定期間更新なければ、最終的には
Weak:保証されない
・CAP定理
分散システムにおいて実現可能なのは、一貫性、可用性、分散耐性
の中の2つまで
・一貫性を緩和し、可用性を高めるというのは、強力な考え
→そうなれば、一貫性はアプリケーションで:複雑さ増す
※コラム:ここまで
・RDBMSでないものはすべてNoSQLにされる
→memcachedまで
→技術的可能性をぼやけさせてしまう
・NoSQLには、それぞれのシステムの強みの分類に役立つ多くの
観点がある
1.3.1 観点
・それらの観点のいくつかを見ていく
データモデル:KVS、半構造化の列指向、ドキュメント指向
ストレージモデル:インメモリ、永続型
一貫性→レイテンシーに影響(収穫と生産)
物理モデル:分散型、単独のマシン
読み書きのパフォーマンス
セカンダリインデックス
障害の処理
圧縮
ロードバランス
アトミック名読み出し−変更−書き込み
ロック、ウェイト、デッドロック
・インピーダンスマッチ
ひとつでなんでもまかなうアプローチをとる代わりに
ほかのどんなものが使えるかを知るべき
1.3.2 スケーラビリティ
・RDBMSのパフォーマンス
トランザクション処理には向いている
超大規模な分散処理には向いていない
サーバーを垂直にスケールさせると、十分な効果得られない
トランザクションや並列度に対し、ウェイトやデッドロック
・商用のRDBMS
処理してくれるのは特定の面だけということよくある
とても高価
・リレーショナルな機能をパフォーマンスのために恒久的に犠牲に
するのが、よいことなのか?
・スケーラビリティを実現するものと同じメカニズム
→NoSQLのソリューション
HBaseが提供するのと同じソリューション
1.3.3 データベースの(非)正規化
・大規模システムの場合、スキーマの設計のやり直しを考えないと
いけないことがよくある
→非正規化、複製、インテリジェントキー
・読み出し時にそれ以上集約を行う必要がないように2つ以上の
テーブルにデータを複製
→スキーマを非正規化
必要なビューを事前にマテリアライズ
・旧来のリレーショナルデータベースモデルからHBaseへの列指向の
正確により適しているモデルへの変換
一対一、一対多、多対多の関係をHBaseの下位層のアーキテクチャ
に適合するように変換するには、様々なアプローチがあります
どのアプローチをとるか、HBaseのストレージ設計の潜在能力を
完全に理解しとかなければいけません
・疎で幅の広いテーブルと、列指向の設計がサポートされている
→データを正規化する必要がなくなり、JOIN操作もなくせる
・インテリジェントキーを使う
データがどのように、どこに保存されるかを細かく制御できる
キーの一部分を使ったルックアップが可能
→複合キーと組み合わせて使えば、
属性をインデックスの先頭部分として利用できる
・スキーマを適切に設計すれば、データ数が10から1千万になっても
読み書きのパフォーマンスが変わらないようにできる
次回は、1.4章