SlideShare a Scribd company logo
データモデルについてデータモデルについて
知っておくべき知っておくべき 77 つのことつのこと
奥野 幹也
Twitter: @nippondanji
mikiya (dot) okuno (at) gmail (dot) com
@MyNA ・ JPUG 合同 DB 勉強会  in 東京
〜〜 NoSQLNoSQL に手を出す前に〜に手を出す前に〜
免責事項
本プレゼンテーションにおいて示されている見解は、私
自身の見解であって、オラクル・コーポレーションの見
解を必ずしも反映したものではありません。ご了承くだ
さい。
自己紹介
●
MySQL サポートエンジニア
– 日々のしごと
● トラブルシューティング全般
●
Q&A 回答
● パフォーマンスチューニング
など
● ライフワーク
– 自由なソフトウェアの普及
● オープンソースではない
– 最近はまってる趣味はリカンベントに乗ること
● ブログ
– 漢のコンピュータ道
– http://nippondanji.blogspot.com/
その 1
データモデルとは!
データモデルを三行で
● データの論理的な表現方法
●
データを表現するためにどんな方法が使えるか
● データベース設計のことじゃないよ!!
データモデル=データ設計?
● データモデルという言葉は二通りの意味で使われる
– データの論理的な表現
– データ設計
●
意味は全く違う
– 両者を混同すると意味不明!!
今日話すデータモデルとは
リレーショナルモデル
ERD
その 2
データモデルと演算
データは表現するだけで
終わりではない
● データの表現方法 ≒ 格納方法
– 格納して終わりではない!!
– アプリケーションから利用してこそ意味がある
●
どのように出し入れするかが重要
– できるだけ簡単かつ的確に出し入れしたい
– 必要なデータは何かを簡潔に定義できること
データの論理的な意味
= どんな演算が適用できるか
● 用意された演算の種類が重要
– データの意味から必然的に決まる
● 整数の四則演算、文字列の分解・連結
● リレーショナルモデルの射影、制限、結合
etc
– 高速で信頼できる操作
●
用意された演算を適切に使えば簡素に書ける
– 反例:文字列で整数の四則演算を実装するケースを考え
よ
●
遅い
● 実装できてもバグだらけ
●
そもそも実装する意味がない
– データの種類に応じて適切な操作方法は異なる!!
自分で書けば何でもできる?
● 間違いではないが現実的ではない
– 既に存在して利用できるツールは利用すべき
●
なぜ一から OS を書かないのか?
●
なぜ CPU を自分で設計しないのか?
●
なぜ自分で DB を開発しないのか?
●
せっかくデータベースが使えるのなら活用すべき!!
データベースを単なる入れ物だと
考えてはいけない理由
● データベースには特性がある
– どんな処理が得意か
– どんな処理が苦手か
●
データベースはデータモデルを意識して作られている
– データモデルに沿った演算が用意されている
● データモデルに沿った使い方が得意
● そうでない処理は苦手
– データモデルを実践できるかどうかで、データベースのパ
ワーを利用できるかどうかが決まる
その 3
様々なデータモデル
代表的なデータモデル
● リレーショナルモデル
●
グラフ
● 階層型
● キーバリュー
●
オブジェクト
●
ドキュメント
適切なデータモデルを選ぶ
● 双方向で考える
– そのデータモデルはどのような演算が得意か
– アプリケーションが必要とする演算は何か
●
最大公約数を取る
– データモデルは万能ではない
● 演算がうまく表現できないものも存在する
– データモデルに合致しない部分はアプリケーション側で作
りこむ
● データベースソフトウェアが備えている、データモデルか
ら逸脱した演算を活用する
– ソートやストアドプロシージャ、マテリアライズドビューなど
一つのデータモデルでは
足りない!!
● 複数の製品を組み合わせる
– 異なるデータモデルを持つ製品を組み合わせる
– データの同期が課題
● 分散トランザクションがあれば理想
● トランザクションがない製品はキャッシュとして
●
マルチモデル
– ひとつの製品が複数のデータモデルを持つ
●
RDB + JSON
etc
– データの同期について考える必要がない
– スケーラビリティが課題
その 4
データの正しさ
正しいデータを得られない
データベースは無価値
● 正しい答えが欲しいからデータベースを使う
– デタラメな答えで良いのなら /dev/random でも使った
ほうがマシ
● 速いしリソース食わないし文句なし!!
●
データの正しさとは一体何か?
RDB 上でデータの正しさを保つ
● トランザクション
– 同時アクセス時の整合性
– クラッシュリカバリ
●
正規化理論
– 重複を排除することによる論理的な矛盾の回避
● 制約
– ビジネスロジック
NoSQL 上でデータの正しさを保つ
●
RDB のような便利な道具はない
– トランザクションなし
– リレーショナルモデルなし
– 制約なし
●
データの正しさの保証はアプリケーションに委ねられる
– データの正しさを保証するためのコードを量産
– バグはデータの不整合に直結する
– テストコードが増殖する
その 5
実装について意識する
データモデルは論理的な表現
論理的な表現 = データモデル
物理的な表現 = 実装
実装の例
● データがテーブルスペースに格納される
●
データは高速化のためにメモリ上にキャッシュされる
● インデックスによって高速にアクセスできる
● オプティマイザが最適な実行計画を立てる
●
データがパーティションに分かれている
●
データが複数のノードにまたがって複製されている
これらは実装であって
データモデルではない!
実装について知ることの意義
● コンピュータ上で仕事をするのはプログラムそのもの
– プログラムは思った通りではなく、書いた通りに動く
– コンピュータ上で実際に何が行われているか
●
仕事の量を見積もる
– データモデルを使って表現するだけでは片手落ち
● 満足な性能が出るとは限らない
– 演算が具体的にどのように処理されるか
● その処理は十分に高速なのか
● どのリソースをどれだけ消費するか
– I/O 処理
– メモリ
– CPU
– ベンチマークするべし!!
● 机上の計算では全てはわからない
実装と理論の混同
ダメ、ゼッタイ。
● 実装はデータモデルの一部ではない
●
論理データの設計はデータモデルに沿って行う
● データモデルの要求を満たせるように実装を考える
● すなわち、設計する順序は論理設計>物理設計
その 6
スケーラビリティに
ついての課題
マシンの能力には限界がある
● 一台のマシンで処理できる能力には限界がある
– CPU はムーアの法則で確実に速くなっている
– それでも処理能力には限界がある
● 万物は物理法則を超えることはできない
●
一方、データベースに求められる処理能力は青天井
– 特に公開されたウェブサービスでは止めどないトラフィック
がやってくる
– ソーシャル機能で負荷はうなぎのぼり
必然的に
分散処理が必要に
分散処理における課題
● どのようにデータを分散するか
– 分散を前提とした製品か
– 自前で分散するのか
● シャーディング、コンシステントハッシュ
● 何をキーにするか
●
データモデルが保たれないケースをどうするか
– 例: RDB におけるシャーディング
●
複数のシャードにまたがった結合( JOIN )はできない
● どのようにデータを同期するか
– そのデータは完全に同期していないとダメか
●
少しの遅れを許容できるか
– 複数の製品を使い分ける場合、データの整合性は保た
れるか
分散処理は難しい!!
● 考え得るアーキテクチャは無数にある
●
データモデルの組み合わせもたくさん
● アーキテクチャが複雑になった分使い方も複雑に
– 単一のデータベースを使用するよりも敷居↑↑↑
– データモデルが保たれないケースの対応
●
アプリケーション側で大きな努力が必要
その 7
システムへの要求は
絶えず変化する
要求は絶えず変化する
● よくある例
– スモールスタート → ユーザー激増
– ベータ版のサービスが流行る → 正式リリース
– 機能追加でスキーマが複雑化
●
ドキュメント型で始めたけど手に負えない・・・
– データが分散してしまっている
– データの正しさを保証できない
– 思ったよりデータ増加のペースが速くてディスク不足
– データ激増で性能劣化
● クエリのチューニングは足りてるか?
● スケーラビリティの問題ならアーキテクチャの変更は必
要か?
道具も絶えず変化する
● 新たなデータベース製品は次々に登場する
– 得に NoSQL 、分散型の製品は盛ん
● ハードウェアは常に進化する
– CPU は年々高速化
● 近年ではコア数が飛躍的に上昇
– メモリの大容量化
– ディスクの高速化
●
SSD
– 仮想化
次の一手を持っておく
● 次の手を打つには引き出しが必要
– 今のシステムからどんな変化に対してどんな手があるか
● ユーザー、アクセス激増
● 機能追加・変更
– データモデルの垣根を超えるのはとても難しい
●
常に手の内のカードはアップデートしておく
– データモデル
– 新しいソフトウェア製品
– ハードウェアの進化
– 他社の事例
etc
● 本当に次の手を打つ必要があるか?
結論: NoSQL は必要か?
YES
結論の補足
● 一つで全ての要件を満たせるデータモデルはない
– リレーショナルモデルで全てを満たせるほど世の中単純
ではない
– 当然 NoSQL は必要
●
RDB は優秀
– より多くの要件をカバーできる
– RDB の実装でカバーできる部分もある
●
インデックスによるソート、ストアドプロシージャ etc
– 足りない部分は開発する
– 最終的には限界がある
●
データモデルの特性を理解する
– しっかりとした計画を持って NoSQL の利用を!!
– 闇雲に利用するのは失敗の元
● 流行に流されるべからず!
まとめ
一、 データモデルとはデータの論理的な表現のことである
二、 どのような演算が用意されているかが重要
三、 適切なデータモデルを持った製品をチョイスする
四、 データの正しさを保証する方法を知る
五、 データモデルだけでなく、実装についての理解も大事
六、 スケーラビリティとデータモデルの限界
七、 常に次の一手を考えておく
NoSQL は必要
だが、使うべきかどうかの判断は
合理的に!!
Q&Aご静聴ありがとうございました。

More Related Content

PPTX
本当は恐ろしい分散システムの話
PDF
データベース設計徹底指南
PPTX
トランザクションの設計と進化
PDF
イミュータブルデータモデル(入門編)
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
PDF
研究効率化Tips Ver.2
PPTX
Anaconda navigatorのアップデートが終わらないときの対処方法メモ
ODP
MVC の Model を考える
本当は恐ろしい分散システムの話
データベース設計徹底指南
トランザクションの設計と進化
イミュータブルデータモデル(入門編)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
研究効率化Tips Ver.2
Anaconda navigatorのアップデートが終わらないときの対処方法メモ
MVC の Model を考える

What's hot (20)

PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
PDF
ドメイン駆動設計 複雑さに立ち向かう
PDF
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
PDF
テスト文字列に「うんこ」と入れるな
PDF
JDLA主催「CVPR2023技術報告会」発表資料
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
PPTX
WayOfNoTrouble.pptx
PDF
3次元レジストレーション(PCLデモとコード付き)
PDF
Javaのログ出力: 道具と考え方
PDF
C#でわかる こわくないMonad
PPTX
Msを16倍出し抜くwpf開発1回目
PDF
ソーシャルゲームのためのデータベース設計
PDF
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
PDF
ブルックスのいう銀の弾丸とは何か?
PDF
イミュータブルデータモデル(世代編)
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
PDF
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
PDF
ソフトウェアの核心にある複雑さに立ち向かう
PDF
C#実装から見るDDD(ドメイン駆動設計)
PDF
MvcのFatモデルに立ち向かう
新入社員のための大規模ゲーム開発入門 サーバサイド編
ドメイン駆動設計 複雑さに立ち向かう
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
テスト文字列に「うんこ」と入れるな
JDLA主催「CVPR2023技術報告会」発表資料
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
WayOfNoTrouble.pptx
3次元レジストレーション(PCLデモとコード付き)
Javaのログ出力: 道具と考え方
C#でわかる こわくないMonad
Msを16倍出し抜くwpf開発1回目
ソーシャルゲームのためのデータベース設計
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
ブルックスのいう銀の弾丸とは何か?
イミュータブルデータモデル(世代編)
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
ソフトウェアの核心にある複雑さに立ち向かう
C#実装から見るDDD(ドメイン駆動設計)
MvcのFatモデルに立ち向かう
Ad

Viewers also liked (20)

PDF
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
PDF
AWS+でスケールアウト&スケールアップ
PDF
とあるギークのキーボード遍歴
PDF
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
PDF
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
PDF
[A31]AWS上でOracleを利用するためのはじめの一歩!by Masatoshi Yoshida
PDF
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
PDF
db tech showcase Tokyo 2013 - A35 特濃JPOUG:潮溜まりでジャブジャブ、SQLチューニング
PDF
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
PDF
Big Master Data PHP BLT #1
PDF
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Amazon S3 バックアップ~
PDF
AWSデータベースアップデート2017
PDF
AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜
PDF
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
PDF
Machine Learning on AWS
PDF
Amazon S3を中心とするデータ分析のベストプラクティス
PDF
AWS Black Belt Online Seminar 2017 初心者向け クラウドコンピューティング はじめの一歩
PDF
2015/04/01 AWS Blackbelt EC2
PDF
DBワークロードのAWS化とデータベースサービス関連最新情報
PDF
AWS Black Belt Techシリーズ Amazon SNS / Amazon SQS
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
AWS+でスケールアウト&スケールアップ
とあるギークのキーボード遍歴
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
[A31]AWS上でOracleを利用するためのはじめの一歩!by Masatoshi Yoshida
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
db tech showcase Tokyo 2013 - A35 特濃JPOUG:潮溜まりでジャブジャブ、SQLチューニング
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
Big Master Data PHP BLT #1
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Amazon S3 バックアップ~
AWSデータベースアップデート2017
AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
Machine Learning on AWS
Amazon S3を中心とするデータ分析のベストプラクティス
AWS Black Belt Online Seminar 2017 初心者向け クラウドコンピューティング はじめの一歩
2015/04/01 AWS Blackbelt EC2
DBワークロードのAWS化とデータベースサービス関連最新情報
AWS Black Belt Techシリーズ Amazon SNS / Amazon SQS
Ad

Similar to データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜 (6)

PDF
リレーショナルデータベースとの上手な付き合い方 long version
PDF
なぜ、いまリレーショナルモデルなのか
PDF
あなたが知らない リレーショナルモデル
PDF
データモデルは時空を越える
PDF
Database smells
PDF
「データベース実践入門」から学ぶリレーショナルモデル
リレーショナルデータベースとの上手な付き合い方 long version
なぜ、いまリレーショナルモデルなのか
あなたが知らない リレーショナルモデル
データモデルは時空を越える
Database smells
「データベース実践入門」から学ぶリレーショナルモデル

More from Mikiya Okuno (20)

PDF
サポート一筋24+年のエンジニア、サポートのイロハは E4500に教わった。 Sun Microsystems 勉強会〜1994年頃から2000年頃の思い...
PDF
MySQL Cluster 新機能解説 7.5 and beyond
PDF
MySQL 5.7 トラブルシューティング 性能解析入門編
PDF
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
PDF
リレーショナルデータベースとの上手な付き合い方
PDF
What's New in MySQL 5.7 Security
PDF
What's New in MySQL 5.7 Replication
PDF
MySQLアーキテクチャ図解講座
PDF
What's New in MySQL 5.7 InnoDB
PDF
人類は如何にして大切な データベースを守るべきか
PDF
RDBにおけるバリデーションをリレーショナルモデルから考える
PDF
リレーショナルな正しいデータベース設計
PDF
MySQLトラブル解析入門
PDF
Mysql toranomaki
PDF
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
ODP
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
PDF
Rdbms qpstudy-okuno
PDF
Database qpstudy-okuno
PDF
MySQL 5.6新機能解説@dbtechshowcase2012
PDF
MySQL日本語利用徹底入門
サポート一筋24+年のエンジニア、サポートのイロハは E4500に教わった。 Sun Microsystems 勉強会〜1994年頃から2000年頃の思い...
MySQL Cluster 新機能解説 7.5 and beyond
MySQL 5.7 トラブルシューティング 性能解析入門編
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
リレーショナルデータベースとの上手な付き合い方
What's New in MySQL 5.7 Security
What's New in MySQL 5.7 Replication
MySQLアーキテクチャ図解講座
What's New in MySQL 5.7 InnoDB
人類は如何にして大切な データベースを守るべきか
RDBにおけるバリデーションをリレーショナルモデルから考える
リレーショナルな正しいデータベース設計
MySQLトラブル解析入門
Mysql toranomaki
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
Rdbms qpstudy-okuno
Database qpstudy-okuno
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL日本語利用徹底入門

データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜