Más contenido relacionado La actualidad más candente (20) Random partionerのデータモデリング2. 自己紹介
所属
ワークスアプリケーションズ
Incubation Labo4 Webmail
お仕事
ウェブメールの開発
3. 自己紹介
所属
ワークスアプリケーションズ
Incubation Labo4 Webmail
お仕事
ウェブメールの開発
・・・という名義で最先端技術を試す実験場
4. Webmail
AP: jetty
DB:
cassandra,
hbase
全てクラウド
(AWS)で動作
6. 前提知識:普通のデータモデリング
いわゆるRDB的な
例えば、Accountデータ
キー / カラム username(key) password
tsutsumi_h tsutsumi_h ********
yutuki_r yutuki_r **********
test_data test_data ******
10. 案1:人工キーを利用する
キー / カラム username password
1 tsutsumi_h ********
2 yutuki_r **********
3 test_data ******
1. CRUDが存在するデータを扱う
2. BETWEEN検索が可能
3. 余剰リソースを少なく
11. 案1:人工キーを利用する
キー / カラム username password
1 tsutsumi_h ********
2 yutuki_r **********
3 test_data ******
2,3は良いが、1で問題が起こる
DELETEが発生すると、キーに抜け
ができ、パフォーマンスが落ちる
12. 案1:人工キーを利用する
キー / カラム username password
1 tsutsumi_h ********
2 yutuki_r **********
3 test_data ******
2,3は良いが、1で問題が起こる
DELETEが発生すると、キーに抜け
ができ、パフォーマンスが落ちる
17. 前提知識:RandomPartitioner
Columnについては検索ができる
例えば、p~zまでのカラム名を抽出
キー / カラム username(key) … password
tsutsumi_h tsutsumi_h … ********
yutuki_r yutuki_r … **********
test_data test_data … ******
18. 案3:RPを使って横持ちindex化
key suzuki tamura tsutsumi urata wakui yutuki zhag
1. CRUDが存在するデータを扱う
2. BETWEEN検索が可能
3. 余剰リソースを少なく
19. 案3:RPを使って横持ちindex化
key suzuki tamura tsutsumi urata wakui yutuki zhag
1,2,3を満たす・・・が
indexが壊れた場合に、全てのデータ
を一括で読むしか修復の方法が
なくなる。
20. 案3:RPを使って横持ちindex化
key suzuki tamura tsutsumi urata wakui yutuki zhag
1,2,3を満たす・・・が
indexが壊れた場合に、全てのデータ
を一括で読むしか修復の方法がなく
なる
21. 案4:じゃあ全データ横持ちにする
key suzuki tamura tsutsumi urata wakui yutuki zhag
username suzuki tamura tsutsumi urata wakui yutuki zhag
password ***** ***** *** ****** ****** **** ****
active 1 0 0 1 1 1 1
1. CRUDが存在するデータを扱う
2. BETWEEN検索が可能
3. 余剰リソースを少なく
22. 案4:じゃあ全データ横持ちにする
key suzuki tamura tsutsumi urata wakui yutuki zhag
username suzuki tamura tsutsumi urata wakui yutuki zhag
password ***** ***** *** ****** ****** **** ****
active 1 0 0 1 1 1 1
1,2,3を満たす
さらにはcassandraのget_count()
も使えるように!
23. 案4:じゃあ全データ横持ちにする
key suzuki tamura tsutsumi urata wakui yutuki zhag
username suzuki tamura tsutsumi urata wakui yutuki zhag
password ***** ***** *** ****** ****** **** ****
active 1 0 0 1 1 1 1
1,2,3を満たす
さらにはcassandraのget_count()
も使えるように!
24. 横持ちの仕方には色々ある
key / column tsutsumi@20110524 tsutsumi@20110525
key tsutsumi@20110524 tsutsumi@20110525
username tsutsumi tsutsumi_h
password ******* ******************
active 0 1
完全横持ち
全てのデータが、column名ごとに
横に入る。自由に検索が出来るが、
rowが大きくなる。
25. 横持ちの仕方には色々ある
key / column tsutsumi@20110524 tsutsumi@20110525
tsutsumi@key tsutsumi@20110524 tsutsumi@20110525
tsutsumi@username tsutsumi tsutsumi_h
tsutsumi@password ******* ******************
tsutsumi@active 0 1
ブロック(?)持ち
ユーザーなど、ブロックごとに横持ち
する。rowが比較的小さくなり、
ブロック毎のcountも出来る。
ただし、ブロック内しか検索できない
26. 横持ちの仕方には色々ある
key / column tsutsumi@20110524 tsutsumi@20110525
tsutsumi@20110524
tsutsumi@20110524 空
@key
tsutsumi@20110524
tsutsumi 空
@username
tsutsumi@20110525
空 tsutsumi@20110525
@key
tsutsumi@20110525
空 tsutsumi_h
@username
ナナメ持ち
一つのキー毎に別のカラム名で横持ち
する。rowが小さくなり負荷が少ない
27. RP横持ちを使ったデータ分布
ブロック持ちの場合
DB1 DB2 DB3
79.82 79.56 79.77 (GB)
ほぼ均等なデータ分布・稼働率
個々のノード毎の偏りがなくなり、
負荷も全体に分散するようになった。
さらに、get_Count()関数の利用が
可能になり、range_ghostの呪いから
も開放された。
28. RP横持ちを使ったデータ分布
ブロック持ちの場合
DB1 DB2 DB3
79.82 79.56 79.77 (GB)
ほぼ均等なデータ分布・稼働率
個々のノード毎の偏りがなくなり、
負荷も全体に分散するようになった。
さらに、get_Count()関数の利用が
可能になり、range_ghostの呪いから
も開放された。
29. 注意事項
key / column a b c d e f g h i j k l m n o
key
username
password
active
ー データ無し
空データの扱い方
データが無いカラムには、nullではなく、
適当な0xDEADBEEF等を入れないと、
cassandraが左詰めで返してしまう。