Mais conteúdo relacionado
Semelhante a RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ (20)
Mais de Recruit Technologies (20)
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
- 2. 自己紹介
{"ID" :"fetaro"
"名前" :"渡部 徹太郎"
"所属" :株式会社リクルートテクノロジーズ
"研究" :"東京工業大学でデータベースと情報検索の研究
(@日本データベース学会)"
"仕事" :["証券会社のオンライントレードシステムのWeb基盤",
"オープンソースなら何でも。主にMongoDB",
"リクルート各種サービスを横断的分析する基盤。主にHadoop"]
"エディタ":"emacs派"
"趣味":"自宅サーバ"
"属性" : ["ギーク","スーツ"]}
fetaro
RDB技術者のためのNoSQLガイド 2
- 6. 背景: 3つのVの増加
• Variety(多様性)の増加
社内 社外
非リレー
ショナル
データ
非構造
半構造
リレーショ
ナルデータ
構造化
オフィス文章
システムロ
グ
テキスト・音声
(顧客対応履
歴)電子メール
経理・財務・
人事
営業・CRM
センサー
情報 位置・地
図
SNS
マルチメ
ディア
他社が保
有する
データ
気象・交
通
健康・医
療
各種統計 行政 金融取引
商品・在庫
決済・残高
口コミ文
章
RDB技術者のためのNoSQLガイド 6
[課題] 半構造データはRDBでは格納が困難
Schema on Write < Schema on Read
- 7. RDBだと厳しい身近なケース
• 「Twitterのデータを分析して商品評判を知りたい。プロトを3日で作ってくれ」
TwitterのAPIが返却するデータ(JSON)
• この状況でこのデータをRDBMSにいれますか??
{
"_id" : ObjectId("55b93f4bb427f0c12e080473"),
"created_at" : "Wed Jul 29 20:57:42 +0000 2015",
"id" : 626496848031690800,
"text" : "@mchris4duke and certainly not concious, for a f
moment, of their prejudices",
"source" : "<a href=¥"http://twitter.com¥" rel=¥"nofollow
Web Client</a>",
"truncated" : false,
"in_reply_to_status_id" : 626496667957751800,
"in_reply_to_screen_name" : "mchris4duke",
"user" : {
"id" : 772136,
"id_str" : "772136",
"name" : "Greg Smith",
"place" : null,
"contributors" : null,"retweet_count" : 0,
"favorite_count" : 0,
"entities" : {
"hashtags" : [ ],
"trends" : [ ],
"urls" : [ ],
"user_mentions" : [
{
"screen_name" : "mchris4duke",
"name" : "Chris Bourg",
"id" : 14093339,
"id_str" : "14093339",
"indices" : [0,12]
ここは一対多
これは何桁ある
んだろう?
なんか、前と変
わってるような ここも一対多
テーブルは3つに分けて、
JOINを2回するしかない
RDB技術者のためのNoSQLガイド 7
- 11. DBを重視する性能で分類
• レスポンスを重視 →主にオペレーション用途
• スループットを重視 →主に分析用途
11
アプリケーションサーバ
オペレーション
用途
データベース登録画面
リクエスト 参照
更新
挿入
参照画面
編集画面
即時応答
マスタ
データベース
BIツール
集計
バッチで
ロード 分析用途
データベース
レポート生成ジョ
ブ
抽出
CSV
バッチで
ロード
レポート
20分で全件集計
10秒で全件取得
RDB技術者のためのNoSQLガイド
- 19. NoSQLの分類
RDB技術者のためのNoSQLガイド 19
NoSQL ー NoSQL
プロダ
クト
KVS(キーバリューストア) ドキュメントDB RDB グラフDB
データ
モデル
キーバリュー ワイドカラム ドキュメント(JSON) リレーショナ
ルモデル
グラフ
データ
構造
キー 値
キー
値
array
hash
階層構造 ノード
リレー
ション
ノード
ノード
リレー
ション
データの複雑度 大小
処理の分散がしやすい 複雑なデータ処理が可能
キー 列
- 22. NoSQL - NoSQL
DB KVS(キーバリューストア) ドキュメントDB RDB グラフDB
OSS
商用
製品
サー
ビス
NoSQLの主要プロダクト
RDB技術者のためのNoSQLガイド 22
ElastiCache
Microsoft Azure
Redis Cache
- 30. データモデル JSON
{
ID : 12345 ,
name :"渡部”,
address : {
City :"東京”,
ZipNo :"045-3356”,
}
friendID : [ 3134 , 10231 , 10974 , 11165 ] ,
hobbies :
[
{ name :"自宅サーバ","year": 6 } ,
{ name :"プログラミング","year": 10 } ,
配列
サブドキュメントの配
列
キーと値
サブドキュメント
- 31. データモデル リレーショナルとの比較
{
id: 10
name: "マトリクス"
tag : ["SF", "キアヌ", "ハリウッド"]
}
id name
10 "マトリクス"
11 "天空の城ラピュタ"
JSON
id movie_id value
1 10 "SF"
2 10 "キアヌ"
3 10 "ハリウッド"
4 11 "ファンタジー"
5 11 "宮崎駿"
6 11 "ジブリ"
リレーショナル
movieテーブル
tagテーブル
・全貌が分からない
・データ構造を事前に定
義する必要がある
・読みやすい
・全貌がわかる
・データ変更に対応できる
{
Id: 11
name: "天空の城ラピュタ"
tag : ["ファンタジー", "宮崎駿","ジブリ"]
}
- 32. データモデル キーバリューとの比較
{
id: 10
name: "マトリクス"
tag : ["SF", "キアヌ", "ハリウッド"]
}
JSON
・読みやすい
・全貌がわかる
・データ変更に対応できる
{
Id: 11
name: "天空の城ラピュタ"
tag : ["ファンタジー", "宮崎駿","ジブリ"]
}
キーバリュー
・複雑なデータ構造だと
扱いが困難
key value
10-name "マトリクス"
10-tag-0 "SF"
10-tag-1 "キアヌ"
10-tag-2 "ハリウッド"
11-name "天空の城ラピュ
タ"
11-tag-0 "ファンタジー"
11-tag-1 "宮崎駿"
11-tag-2 "ジブリ"
- 33. API
•
• 表現力豊かなクエリ
• 強力なインデックス
• セカンダリインデックス:主キー以外でインデックスを作成可能
• 複合キーインデックス:複数のキーでインデックスを作成可能
• マルチキーインデックス:配列の要素に対してインデックス作成可能
• 集計できる(集計中はJOINもできる)
• データバリデーションできる
db.person.find( {"name":"watanabe","age": 30 } ).limit(3)
- 42. ユースケース Webアプリ・オンラインゲーム
• KVSでは扱えないデータの複雑さ
• ユーザが一気に増えた時に、
RDBでは性能の拡張が難しい
• そもそもデータ量が多すぎて
RDBでは現実的なコストで扱えない
app
Mongo
Mongoapp
Mongo
app Mongo
Mongo
Mongo
Mongo
Mongo
Mongo
急なユーザ増加にも、水
平分散で簡単に対応で
きる
課題 選定理由・解決策 結果
•MySQLがスケーラビリティの上限に達して性能要
件を達成できなくなった
•RBMSでは非定型なメタデータの管理が困難
•性能とスケーラビリティに期待しMongoDBを導入
•60億におよぶ属性情報データの代わりに、1コン
テンツを1ドキュメントにする構造を導入
•秒間11万件以上のクエリに対応
•3年で200万ドル以上のコスト削減
•新規機能の導入のスピードが著しく早くなった
•新規プロジェクトでは全てMongoDBを利用する方
針となった
活用事例: orange(Webサービス事業)
700万ユーザを超えるWebサービスのバックグラウンドDB
- 44. ユースケース カタログ管理
• RDBでは列の定義が膨大になる
• エンジニアでなくてもデータの全貌
がわかる
• データ追加項目が容易
Mongo
app
カタログ
(JSON)
課金情報等
(リレーショナル)
既存
新規
トランザクションが必要な課金は
従来通りRDBMSで一貫性を担保
読みやすい。
項目追加も簡単。
カタログ管理
RDBMS
課題 選定理由・解決策 結果
•RDBMSベースの旧システムでは商品カタログの
アップデートに12時間かかった
•JSONがスキーマレスでかつ複雑なデータ構造を
格納できるので、商品データを入れるのには最
適だった
•カタログのアップデートに要する時間が12時間か
ら15分になり、ビジネス環境の変化に応じて迅速
にカタログを変更できるようになった
活用事例: OTTO
毎日200万人が利用する大手Eコマースサイトの商品カタログを管理
- 45. ユースケース アジャイル
• スキーマの変更不要
• 直観的にデータを表現できるため、データの扱
いが簡単
• ORマッパーを使う必要なし
• アプリ開発をサポートする機能が充実
• ハッカソンでは常連DB
• 近年のWeb開発フレームワークに採用されてい
る
機能 ユースケース
GridFS 大容量ファイルの管理
地理空間インデッ
クス
地図アプリ
集計機能 データの集計
旧データ自動削除 ログ保管