SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
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が左詰めで返してしまう。
以上、ありがとうございました。

Mais conteúdo relacionado

Mais procurados

分かった気分になるスタックトレース
分かった気分になるスタックトレース分かった気分になるスタックトレース
分かった気分になるスタックトレース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
 

Mais procurados (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章
 

Último

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Último (8)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

Random partionerのデータモデリング