RDBがスケールしない本質的な理由を考えてみたことがありますか?正規化、ディスクベース、I/Oコスト、join...なぜ?
2010-11-17 16:57:24RDBがスケールしない理由: 正規化(垂直分割の一種)、ディスクベース(有限メモリならどんんなデータモデルでもあり)、I/Oコスト(ディスクベースと同じく)、join(分割したものの複合化はデータモデルに依存しない)、トランザクション(更新系なら必要)。どれも違います。
2010-11-18 14:21:30I/Oコストはオンメモリにすれば良いと思うので、ノード間でトランザクションを保障するためのオーバヘッドですかね。CPU的にもネットワーク的にも。 QT @masayh RDBがスケールしない本質的な理由を考えてみたことがありますか?正規化、ディスクベース、join...なぜ?
2010-11-18 20:11:57残念ですが違います。@Bizuayeu I/Oコストはオンメモリにすれば良いと思うので、ノード間でトランザクションを保障するためのオーバヘッドですかね。
2010-11-19 00:45:01I/Oコストはオンメモリにすれば良いと思う...簡単にオンメモリといいますが、性能を上げるにはインデックス、ハッシュテーブル、バケットなどいろんなデータ構造を適切なアルゴリズムとタイミングでオンメモリに乗せるので簡単ではありません。クラウドのデータは数百GBを想定して考えましょう
2010-11-19 00:51:02SQLのパースは分散処理出来ないからですかね。ノード感のデータ移動負荷はどの仕組みでも高いですし RT @masayh RDBがスケールしない理由: 正規化(垂直分割の一種)、ディスクベース(有限メモリならどんんなデータモデルでもあり)、I/Oコスト(ディスクベースと同じく)
2010-11-19 01:07:11んー、この記事の内容が答えに近いか? http://bit.ly/anuEup QT @masayh 簡単にオンメモリといいますが、(略)いろんなデータ構造を適切なアルゴリズムとタイミングでオンメモリに乗せるので簡単ではありません。クラウドのデータは数百GBを想定して考えましょう
2010-11-19 01:44:12RDBがスケールしない理由: 行指向であること。ページサイズがOLTPに最適化されているので分析系でのI/Oの負荷が高いこと。行指向であることは、関係代数の徹底のために、挿入、変更対象データだけでなく、処理の中間データ形式までtupleを使い、B-treeが前提となっている点。
2010-11-19 11:38:40行指向は人間が情報を扱う点でシステムのどこかで必ず出現し、主に入口で使われるので避けて通れません。ただ、RDBはそれをシステム全体で使っている点が制約で、その優れたアルゴリズムだけを取り出して、並列エンジンに乗せてNoSQLと組み合わせ、入口以外のところに適用していくのがいい。
2010-11-19 11:41:05情報を行で扱うのは人間の意味の認識と深くかかわるので、避けて通れない自然の発想、概念です。それ自体は何も制約がない。
2010-11-19 11:42:27@tatsuya6502 HBaseについて質問ですが、ブロックサイズの64KBは固定でしょうか。これはRDBでいうページサイズと同じI/Oの単位でしょうか?なぜ、64KBかの根拠はありますか?
2010-11-19 11:44:57@masayh HBase のブロックサイズはRDBでいうページサイズと同じI/Oの単位で、テーブルのカラムファミリーごとに設定できます。小さくするとランダムアクセスが有利になり、大きくするとレンジスキャンが有利になります。
2010-11-19 12:32:57@masayh なぜ、ディフォルトを64KBにしたかの根拠はわからないです(RDBだと4KBくらいですよね) 推測ですが、HDFSとのやりとりにコストがかかるので、少しまとめて取るのかも。最適値は平均的な行のサイズで決まりますので、チューニングすべきパラメータだと思います。
2010-11-19 12:38:14ありがとうございます。64KBはOLTPには大きいし、データ分析には小さい中途半端な数字なので気になっていました。HDFSとの相性とか、Hadoopとの関係か @tatsuya6502 なぜ、ディフォルトを64KBにしたかの根拠はわからないです(RDBだと4KBくらいですよね)
2010-11-19 12:43:35この大きさはディスクのスピンドル数の設計とセットで考えないといけませんね。@tatsuya6502 、チューニングすべきパラメータだと思います。
2010-11-19 12:45:07横から失礼。おそらくHbaseのもとになった、GoogleのBigtableのブロックサイズが64KBだったからでは。@tatsuya6502 @masayh なぜ、ディフォルトを64KBにしたかの根拠はわからないです(RDBだと4KBくらいですよね) 推測ですが、
2010-11-19 12:45:50なるほど、それはありえますね。@ichiro_satoh おそらくHbaseのもとになった、GoogleのBigtableのブロックサイズが64KBだったからでは。
2010-11-19 12:54:14@ichiro_satoh @masayh あ、そちらは64KBではなくて、64MBです。HFDSはランダムreadが可能なので、HBaseでは、HDFSファイルの中を論理的なブロックで区切って、seek+readしてます。
2010-11-19 13:04:02こちらはキーサイズの話だとおもっていたのですが・・・@tatsuya6502 @ichiro_satoh @masayh あ、そちらは64KBではなくて、64MBです。HFDSはランダムreadが可能なので、HBaseでは、HDFSファイルの中を論理的なブロックで区切って、…
2010-11-19 13:20:53@ichiro_satoh @masayh 失礼しました。このブログ記事の真ん中あたり、HFileの中のDataと書かれたブロックについて話していました。 http://j.mp/4Hwp8U
2010-11-19 14:15:01HBase使ってMapReduceするときは、ログのjoinではmaster dataが小さいときはrandom readでもメモリに載るのでログだけのsequential readを考えてブロックを大きくしておけばいいが、問題はmaster dataが大きい場合。今日説明しよう
2010-11-19 15:27:52