53
Copyright © 2013 TriFort, Inc. All Rights Reserved. RDB と KVS とととととととととと ととととととととととと とと とと

RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Embed Size (px)

DESCRIPTION

2013年11月11日の勉強会@LIG社で発表した際の資料です。

Citation preview

Page 1: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

RDBと KVSとの上手な付き合い方

株式会社トライフォート 大谷祐司

Page 2: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

自己紹介・山口県出身の 33歳・ 2013年 4月にトライフォート入社。・サーバーサイド開発チームの責任者。・車とプログラミングを愛しています。

Page 3: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

自己紹介

ソーシャル業界に飛び込んで約 8ヶ月。それまでは、ネット広告関連の比較的固い開発を行っていました。

今ではすっかりソーシャルに染まっていま

す。

Page 4: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

今日のテーマ

RDBと KVSとの上手な付き合い方

Page 5: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

ところで、皆さん KVS使ってますか?

Page 6: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

KVSについてのおさらい

データに対応する一意のキーを設定し、ペアで保存する DB。

Page 7: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

KVSについてのおさらい

key Value

KVS

key

key

Keyを指定してValueを取得する

Value

Value

Page 8: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

今日お話すること

KVSと RDBをどうやって使うと、

どんな問題解決ができるのか。

AWSの採用で注目されている Redisを

例にお話します。

Page 9: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

KVSは主に、データアクセスにおけるパフォーマンスの問題を解決できま

す。

Page 10: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

KVSが速い 3つのポイント

・インメモリー

・シンプルな処理

・イベント駆動アーキテクチャ

Page 11: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

KVSが速い 3つのポイント

・インメモリー

・シンプルな処理

・イベント駆動アーキテクチャ

Page 12: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

問題:メモリと HDDはどれくらいの速

度差があるでしょうか?

Page 13: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

答え: 10万〜 100万倍

Page 14: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

高いパフォーマンス

全てのデータセットをメモリ内に読み込む

高速なデータアクセスを実現

Page 15: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

KVSが速い 3つのポイント

・インメモリー

・シンプルな処理

・イベント駆動アーキテクチャ

Page 16: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

一般的な RDBの SELECTクエリ実行

① プロセスを作成する ② SQLを解析する ③ 該当の行をロックする ④ HDDから値を取得する ⑤ ロックを解除する ⑥ 値を返す

※分かりやすいように単純化しています。

Page 17: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

① コマンドを解読 ② メモリから値を取得する ③ 値を返す

KVSから値を取得する処理

→シンプルに素早く動作します。

※分かりやすいように単純化しています。

Page 18: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

KVSが速い 3つのポイント

・インメモリー

・シンプルな処理

・イベント駆動アーキテクチャ

Page 19: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

命令をトリガにプロセスを立ち上げるのではなく、予め待機しているプロセスが命令を処理します。

プロセス生成は時間がかかるのです。

イベント駆動アーキテクチャ

※スレッドを立ち上げる RDBも存在します。

プロセス

プロセスの情報

データ

プログラムコード

Page 20: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

ボクシングに例えるなら、

RDB : パンチが来たらそれからグローブを付けて殴り返す。

KVS : ファイティングポーズをとっておき、いつでも 殴り返せるようにしておく

というイメージです。

イベント駆動アーキテクチャ

Page 21: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

Redisはシングルスレッドで動作します。一般的な RDBのように複数の処理を並列で行う事は不可能で

す。

必然的に、全てのデータ操作は排他的になります。

Redis

コマンド

コマンド

コマンド

コマンド

1スレッドで順番に処理

シングルスレッド

Page 22: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

これらのポイントから、KVSは高速なデータアクセ

スを実現します。

Page 23: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

KVSの良い点を上げましたが、もちろん弱点もあります。

Page 24: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

KVSの弱点

・ディスク容量

・クラッシュセーフでない

・取得時の集計 /ソートに弱い

Page 25: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

KVSの弱点

・ディスク容量

・クラッシュセーフでない

・取得時の集計 /ソートに弱い

Page 26: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

メモリにデータを保存するので、大容量を保存する事が難しくなってきます。

①ハードウェア的なメモリの上限

②コスト的なデメリット

という要因があります。

Page 27: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

①ハードウェア的なメモリの上限

一般的な 16スロットサーバの場合、

16G × 16 = 256G

程度が、メモリの上限になります。※実際は OSがメモリを使うので、もっと少なくなります。

Page 28: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

①ハードウェア的なメモリの上限

データのバックアップを行う場合には、使用できる量がその半分程度になります。

バックアップ実行時に、保存データと同じサイズのメモリを使用します。

Page 29: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

②コスト的なデメリット

16G × 16 = 256Gのメモリは、約 43万円にもなります。安価になったとはいえ、まだまだ値が張ります。

Page 30: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

KVSの弱点

・ディスク容量

・クラッシュセーフでない

・取得時の集計 /ソートに弱い

Page 31: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

メモリにデータを保存しているので、マシンを再起動すると全て消失してし

まいます。

バックアップ /リカバリ方法が用意さ

れていますが、まだ RDBの方が信頼

性が高いと言われています。

Page 32: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

データ永続化 (バックアップ )

①SAVE/BGSAVE⇒DBのフルダンプ( RDB = Redis DataBase)を作成。

SAVE/BGSAVE

Redis RDB全データ

Page 33: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

データ永続化 (バックアップ )

②AOF(Append Only File)⇒コマンド実行ログ。ここからデータ復元可能。

コマンド

Redis AOFコマンド

Page 34: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

KVSの弱点

・ディスク容量

・クラッシュセーフでない

・取得時の集計 /ソートに弱い

Page 35: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

値の集計 /ソート /計算などの柔軟な操作ができない。

アプリケーション側で実装する必要があります。

Page 36: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

ソート order by

集計 group by

件数 count()

合計 sum()

フィルタ where YY = ZZ

結合 join

SQLなら簡単な操作も、アプリケーション

側で実装する必要があります。

Page 37: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

結論

異なる特徴を持っている RDBと KVS。

補完し合う事で多くの問題解決ができます。

Page 38: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

RDBと KVSをどのように共存させる?

Page 39: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

RDBの値を KVSに保持する方法

・ RDBのレコードをそのままセット

・ RDBのレコードを結合 /加工してセット

・レコードの統計情報をセット

等があります。

Page 40: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

RDBのレコードをそのままセット

Page 41: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

RDBのレコードをそのままセット

【メリット】

・ RDB→KVSのキャッシュ処理をシンプルに実装できる。

・値を KVSから取得しても RDBから取得しても、 同じように扱う事ができる。

・データ更新時の RDB→KVSのキャッシュを簡単に行える。

Page 42: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

RDBのレコードをそのままセット

【注意点】

・データの持ち方によっては、 KVSへのアクセス回数が増える。 ( レコードを補完するデータを取得 etc)

・データの加工が必要な場合、取得した後に操作が必要になる。

・「そのまま」データを持つので、サイズが大きくなって しまう事がある。

Page 43: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

RDBのレコードを操作 /加工してセット

操作 /加工

Page 44: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

RDBのレコードを操作 /加工してセット

【メリット】

・データ取得後にそのまま活用できるケースが増える。

・負荷がかかるデータ操作 /加工の回数を減らせる。

・必要なデータを選択する事で、サイズを減らす事ができる。

Page 45: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

RDBのレコードを操作 /加工してセット

【注意点】

・プログラム側でデータ操作 /加工の処理が必要になる。

・ RDBのデータが変更されたとき、 KVSへのキャッシュが 複雑になる。

Page 46: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

レコードの統計情報をセット

統計処理

Page 47: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

レコードの統計情報をセット

【メリット】

・ RDBやプログラムで、統計処理の回数を減らせる。

・ RDBで統計情報を冗長的に持たなくてよくなる。

・時間のかかる統計処理の結果を活用することができる。 (統計に時間がかかると、リアルタイムでの活用が困難 )

Page 48: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

レコードの統計情報をセット

【注意点】

・プログラム側でデータ集計処理の実装が必要になる。

・データ変更されたとき、再集計の必要がある。

・実データと集計値に差分が出ない (出ても良い )工夫が必要。

Page 49: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

サーバの構成について

Page 50: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

サーバ構成パターン

・ Redisサーバのみで値を保持する

・ RDBのキャッシュサーバとして Redisを利用する

・Webサーバに Redisを同居させる

・ 1台のサーバに多数の Redisを立ち上げて、複数の CPUコアを

使う

・監視サーバを設置してフェールオーバーできるようにする。時間の関係で詳しい説明は割愛しますが、様々な構成が存在します。

Page 51: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

結論

組み合わせのパターンは多いので、

「何を実現したいか」によって構成を

使い分ける事が重要です。

Page 52: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

Redisについて詳しく知りたい方

社内勉強会の資料をアップしていますので

「 Redis勉強会」で検索してみてくださ

い。

Page 53: RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)

Copyright © 2013 TriFort, Inc. All Rights Reserved.

発表は以上になります。

ご清聴ありがとうございました。