SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
RandomPartitonerの
データモデリング


            株式会社ワークスアプリケーションズ
                      堤 勇人(@2t3)
自己紹介

 所属
  ワークスアプリケーションズ
  Incubation Labo4 Webmail

 お仕事
  ウェブメールの開発
自己紹介

 所属
  ワークスアプリケーションズ
  Incubation Labo4 Webmail

 お仕事
  ウェブメールの開発
  ・・・という名義で最先端技術を試す実験場
Webmail
          AP: jetty
          DB:
          cassandra,
          hbase

          全てクラウド
          (AWS)で動作
今回の達成目標

 1. CRUDが存在するデータを扱う
  DELETEが存在する。

 2. BETWEEN検索が可能
  例えば、このユーザーの3月~5月の
  データ、という検索をしたい。

 3. 余剰リソースを少なく
  低予算。
前提知識:普通のデータモデリング

   いわゆるRDB的な
     例えば、Accountデータ

キー / カラム     username(key)   password
tsutsumi_h   tsutsumi_h      ********
yutuki_r     yutuki_r        **********
test_data    test_data       ******
RDBを使え?
RDBを使え?

知らん!
批判は断る!
いやいや、分かってる分かってるん
だ。最初から動的なウェブアプリ
ケーションにCassandraなんて無理
だし。アトミック操作も無いしね。
件数表示とかすごい勢いでズレるし。
それは分かっていながら、敢えて、
そう敢えてのチャレンジなのですよ。
本当はlike検索とかしたい。超した
い。気軽にインデックスとか貼りた
い。でも最先端技術使うって名目な
んだもの。
もう一度、今回の達成目標

 1. CRUDが存在するデータを扱う
  DELETEが存在する。

 2. BETWEEN検索が可能
  例えば、このユーザーの3月~5月の
  データ、という検索をしたい。

 3. 余剰リソースを少なく
  低予算。
案1:人工キーを利用する

キー / カラム   username     password
1          tsutsumi_h   ********
2          yutuki_r     **********
3          test_data    ******

    1. CRUDが存在するデータを扱う
    2. BETWEEN検索が可能
    3. 余剰リソースを少なく
案1:人工キーを利用する

キー / カラム   username     password
1          tsutsumi_h   ********
2          yutuki_r     **********
3          test_data    ******

    2,3は良いが、1で問題が起こる
     DELETEが発生すると、キーに抜け
     ができ、パフォーマンスが落ちる
案1:人工キーを利用する

キー / カラム   username     password
1          tsutsumi_h   ********
2          yutuki_r     **********
3          test_data    ******

    2,3は良いが、1で問題が起こる
     DELETEが発生すると、キーに抜け
     ができ、パフォーマンスが落ちる
案2:OrderPreservingPartitioner
                              yutuki_r
tsutsumi_h             node
       node

              node
                     test_data

  1. CRUDが存在するデータを扱う
  2. BETWEEN検索が可能
  3. 余剰リソースを少なく
案2:OrderPreservingPartitioner
                              yutuki_r
tsutsumi_h             node
       node

              node
                     test_data

  1,2は良いが、3が微妙
    データの偏りが発生し、仕事をあま
    りしないノードが出来る
案2:OrderPreservingPartitioner
                              yutuki_r
tsutsumi_h             node
       node

              node
                     test_data

  1,2は良いが、3が微妙
    データの偏りが発生し、仕事をあま
    りしないノードが出来る
OPPを使った場合のデータ分布




 稼働率が全体で50%以下
  仕事をしないノードは仕事をする
  ノードの25%以下しか働かない。
  しかもこの余剰分は他が溢れた時に
  活かされることはない。
前提知識:RandomPartitioner

   Columnについては検索ができる
     例えば、p~zまでのカラム名を抽出

キー / カラム     username(key)   …   password
tsutsumi_h   tsutsumi_h      …   ********
yutuki_r     yutuki_r        …   **********
test_data    test_data       …   ******
案3:RPを使って横持ちindex化



key   suzuki   tamura   tsutsumi   urata   wakui   yutuki   zhag




  1. CRUDが存在するデータを扱う
  2. BETWEEN検索が可能
  3. 余剰リソースを少なく
案3:RPを使って横持ちindex化



key   suzuki   tamura   tsutsumi   urata   wakui   yutuki   zhag




  1,2,3を満たす・・・が
      indexが壊れた場合に、全てのデータ
      を一括で読むしか修復の方法が
      なくなる。
案3:RPを使って横持ちindex化



key   suzuki   tamura   tsutsumi   urata   wakui   yutuki   zhag




  1,2,3を満たす・・・が
      indexが壊れた場合に、全てのデータ
      を一括で読むしか修復の方法がなく
      なる
案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. 余剰リソースを少なく
案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()
           も使えるように!
案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()
           も使えるように!
横持ちの仕方には色々ある

key / column   tsutsumi@20110524   tsutsumi@20110525
key            tsutsumi@20110524   tsutsumi@20110525
username       tsutsumi            tsutsumi_h
password       *******             ******************
active         0                   1


      完全横持ち
         全てのデータが、column名ごとに
         横に入る。自由に検索が出来るが、
         rowが大きくなる。
横持ちの仕方には色々ある

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も出来る。
       ただし、ブロック内しか検索できない
横持ちの仕方には色々ある

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が小さくなり負荷が少ない
RP横持ちを使ったデータ分布

ブロック持ちの場合

 DB1     DB2     DB3
 79.82   79.56   79.77   (GB)



 ほぼ均等なデータ分布・稼働率
   個々のノード毎の偏りがなくなり、
   負荷も全体に分散するようになった。

   さらに、get_Count()関数の利用が
   可能になり、range_ghostの呪いから
   も開放された。
RP横持ちを使ったデータ分布

ブロック持ちの場合

 DB1     DB2     DB3
 79.82   79.56   79.77   (GB)



 ほぼ均等なデータ分布・稼働率
   個々のノード毎の偏りがなくなり、
   負荷も全体に分散するようになった。

   さらに、get_Count()関数の利用が
   可能になり、range_ghostの呪いから
   も開放された。
注意事項

key / column   a   b   c   d   e   f   g   h   i   j   k   l   m n   o
key
username
password
active

      ー データ無し

      空データの扱い方
         データが無いカラムには、nullではなく、
         適当な0xDEADBEEF等を入れないと、
         cassandraが左詰めで返してしまう。
以上、ありがとうございました。

Weitere ähnliche Inhalte

Was ist angesagt?

分かった気分になるスタックトレース
分かった気分になるスタックトレース分かった気分になるスタックトレース
分かった気分になるスタックトレースTrash Briefing ,Ltd
 
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...RのffでGLMしてみたけど...
RのffでGLMしてみたけど...Kazuya Wada
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用Shintaro Fukushima
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたKazuya Wada
 
20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-FunctionsToshi Harada
 
第7回社内勉強会「Code Sucks - 人の振り見て我が振り直せ」
第7回社内勉強会「Code Sucks - 人の振り見て我が振り直せ」第7回社内勉強会「Code Sucks - 人の振り見て我が振り直せ」
第7回社内勉強会「Code Sucks - 人の振り見て我が振り直せ」Hiromu Shioya
 
Web技術勉強会 第38回
Web技術勉強会 第38回Web技術勉強会 第38回
Web技術勉強会 第38回龍一 田中
 
Stanの便利な事後処理関数
Stanの便利な事後処理関数Stanの便利な事後処理関数
Stanの便利な事後処理関数daiki hojo
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~Takuya Akiba
 
ぼくのかんがえたさいきょうのついったーくらいあんと
ぼくのかんがえたさいきょうのついったーくらいあんとぼくのかんがえたさいきょうのついったーくらいあんと
ぼくのかんがえたさいきょうのついったーくらいあんとYutaka Tsumori
 
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Hiro H.
 
Rubyによるデータ解析
Rubyによるデータ解析Rubyによるデータ解析
Rubyによるデータ解析Shugo Maeda
 
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)karupanerura
 
Pg14_sql_standard_function_body
Pg14_sql_standard_function_bodyPg14_sql_standard_function_body
Pg14_sql_standard_function_bodykasaharatt
 
Pythonデータ分析 第3回勉強会資料 8章
Pythonデータ分析 第3回勉強会資料 8章 Pythonデータ分析 第3回勉強会資料 8章
Pythonデータ分析 第3回勉強会資料 8章 Makoto Kawano
 

Was ist angesagt? (20)

R3.0.0 is relased
R3.0.0 is relasedR3.0.0 is relased
R3.0.0 is relased
 
R-hpc-1 TokyoR#11
R-hpc-1 TokyoR#11R-hpc-1 TokyoR#11
R-hpc-1 TokyoR#11
 
分かった気分になるスタックトレース
分かった気分になるスタックトレース分かった気分になるスタックトレース
分かった気分になるスタックトレース
 
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...RのffでGLMしてみたけど...
RのffでGLMしてみたけど...
 
Rの高速化
Rの高速化Rの高速化
Rの高速化
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
 
20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions
 
第7回社内勉強会「Code Sucks - 人の振り見て我が振り直せ」
第7回社内勉強会「Code Sucks - 人の振り見て我が振り直せ」第7回社内勉強会「Code Sucks - 人の振り見て我が振り直せ」
第7回社内勉強会「Code Sucks - 人の振り見て我が振り直せ」
 
Web技術勉強会 第38回
Web技術勉強会 第38回Web技術勉強会 第38回
Web技術勉強会 第38回
 
Gensim
GensimGensim
Gensim
 
Stanの便利な事後処理関数
Stanの便利な事後処理関数Stanの便利な事後処理関数
Stanの便利な事後処理関数
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
 
ぼくのかんがえたさいきょうのついったーくらいあんと
ぼくのかんがえたさいきょうのついったーくらいあんとぼくのかんがえたさいきょうのついったーくらいあんと
ぼくのかんがえたさいきょうのついったーくらいあんと
 
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
 
Rubyによるデータ解析
Rubyによるデータ解析Rubyによるデータ解析
Rubyによるデータ解析
 
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
 
Pg14_sql_standard_function_body
Pg14_sql_standard_function_bodyPg14_sql_standard_function_body
Pg14_sql_standard_function_body
 
全探索
全探索全探索
全探索
 
Pythonデータ分析 第3回勉強会資料 8章
Pythonデータ分析 第3回勉強会資料 8章 Pythonデータ分析 第3回勉強会資料 8章
Pythonデータ分析 第3回勉強会資料 8章
 

Kürzlich hochgeladen

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 

Kürzlich hochgeladen (10)

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 

Random partionerのデータモデリング