Location via proxy:
[ UP ]
[Report a bug]
[Manage cookies]
No cookies
No scripts
No ads
No referrer
Show this form
Submit Search
実務で役立つデータベースの活用法
•
91 likes
•
19,323 views
Soudai Sone
Follow
オープンセミナー2015@香川の登壇資料です。 http://connpass.com/event/15646/
Read less
Read more
1 of 140
Download now
Downloaded 64 times
More Related Content
実務で役立つデータベースの活用法
1.
実務で役立つ! データベースの活用法 オープンセミナー2015@香川
2.
What is it? データベースは何を基準に選んでますか?
3.
What is it? 利用するデータベースを 正しく選ぶこと はプロジェクトの成功にとても大切です
4.
What is it? しかし、時代は大NOSQL時代
5.
What is it? RDBすら多いのに… NOSQLって何よ… どれがいいのよ…
6.
What is it? RDBすら多いのに… NOSQLって何よ… どれがいいのよ…
7.
What is it? RDBすら多いのに… NOSQLって何よ… どれがいいのよ…
8.
What is it? そう言ったお悩みに 種類別データベースの活用方法 を今日は発表します
9.
What is it? ただし チューニングやDB設計 の話は今日はしません
10.
What is it? 主にデータベースの選び方の話です
11.
What is it? 正しいDB選択で 未来の自分を助ける 方法を説明します
12.
あじぇんだ 1 自己紹介 2 データベースの種類と特徴 3 データベースの選び方 4 まとめ
13.
あじぇんだ 1 自己紹介 2 データベースの種類と特徴 3 データベースの選び方 4 まとめ
14.
自己紹介 名前:曽根 壮大(そね たけとも) 年齢:30歳(三人の子供がいます) 職業:Webエンジニア 所属:日本PostgreSQLユーザ会 中国支部 支部長 技術的にはLL系言語とかRDBが好きです
15.
https://dbstudychugoku.github.io/
16.
あじぇんだ 1 自己紹介 2 データベースの種類と特徴 3 データベースの選び方 4 まとめ
17.
データベースの種類と特徴 RDBとNOSQL
18.
アーキテクチャ ーーーーーーー データモデル マスタ型 P2P型 その他 リレーショナル
RDB全般 pgpool2など キーバリュー Hibari Dynamo Riak Memcached Redis カラム指向 Bigtable HBase Cassandra ドキュメント指向 MongoDB CouchDB グラフ指向 Neo4J InfiniteGraph
19.
アーキテクチャ ーーーーーーー データモデル マスタ型 P2P型 その他 リレーショナル
RDB全般 pgpool2など キーバリュー Hibari Dynamo Riak Memcached Redis カラム指向 Bigtable HBase Cassandra ドキュメント指向 MongoDB CouchDB グラフ指向 Neo4J InfiniteGraph
20.
データベースの種類と特徴 RDB リレーショナルデータモデルの理論に 基づいたDBMSで現在もっとも広く使 われているデータベースシステム
21.
データベースの種類と特徴 NOSQL(Not Only SQL) RDB以外のDBシステムの総称 グラフデータモデルなどのリレーショ ナルモデル以外のサポートなどRDBが 不得意な分野に特化している
22.
データベースの種類と特徴 ACIDとCAP定理とBASE
23.
データベースの種類と特徴 ACID
24.
データベースの種類と特徴 ACID 関連する複数の処理を一つの処理単位 にまとめて管理するトランザクション 処理に求められる4つの特性
25.
データベースの種類と特徴 ACID • 原子性(Atomicity) • 一貫性(Consistency) •
独立性(Isolation) • 永続性(Durability)
26.
データベースの種類と特徴 ACID • 原子性(Atomicity) • 一貫性(Consistency) •
独立性(Isolation) • 永続性(Durability) Atomicity(原子性)とは、 トランザクションに含まれる個々の手順が 「すべて実行される」か「一つも実行されない」 のどちらかの状態になるという性質
27.
データベースの種類と特徴 ACID • 原子性(Atomicity) • 一貫性(Consistency) •
独立性(Isolation) • 永続性(Durability) Consistency(一貫性)とは、 トランザクションの前後でデータの整合性が保たれ、 矛盾の無い状態が継続される性質
28.
データベースの種類と特徴 ACID • 原子性(Atomicity) • 一貫性(Consistency) •
独立性(Isolation) • 永続性(Durability) Isolation(独立性)とは、 トランザクション実行中の処理過程が外部から隠 され、 他の処理などに影響を与えない性質
29.
データベースの種類と特徴 ACID • 原子性(Atomicity) • 一貫性(Consistency) •
独立性(Isolation) • 永続性(Durability) Durability(永続性)とは、 トランザクションが完了したら、 その結果は記録され、失われることがないという性質
30.
データベースの種類と特徴 CAP定理
31.
データベースの種類と特徴 CAP定理 Webサービスを想定して作られた 分散化データベースの定理 全てを完璧に満たすことができず、 いずれかに偏る形でしか出来ない
32.
データベースの種類と特徴 CAP定理 • 整合性 (Consistency) •
可用性 (Availability) • 分断耐性 (Partitions)
33.
データベースの種類と特徴 CAP定理 • 整合性 (Consistency) •
可用性 (Availability) • 分断耐性 (Partitions) 整合性 (Consistency)とは、 全てのクライアントが常に同一のデータを見る性質
34.
データベースの種類と特徴 CAP定理 • 整合性 (Consistency) •
可用性 (Availability) • 分断耐性 (Partitions) 可用性 (Availability)とは、 全てのクライアントが読み出しと書き込みが出来る性質
35.
データベースの種類と特徴 CAP定理 • 整合性 (Consistency) •
可用性 (Availability) • 分断耐性 (Partitions) 分断耐性 (Partitions)とは、 物理ネットワークが分断されても 間違った結果が発生しない性質
36.
データベースの種類と特徴 A:可用性C:整合性 P:分断耐性
37.
データベースの種類と特徴 A:可用性C:整合性 P:分断耐性 CA型 PostgreSQL、MySQLなど(RDB全般)
38.
データベースの種類と特徴 A:可用性C:整合性 P:分断耐性 Dynamo、Cassandraなど AP型
39.
データベースの種類と特徴 A:可用性C:整合性 P:分断耐性 MongoDB、Redisなど CP型
40.
データベースの種類と特徴 BASE
41.
データベースの種類と特徴 BASE 整合性(C)と分断耐性(P)を重視した場 合はACIDを満たす必要がある しかし整合性(C)よりも可用性(A)と分 断耐性(P)を重視する場合はBASEを 満たす必要がある
42.
データベースの種類と特徴 ACID(CP型)とBASE(AP型)
43.
データベースの種類と特徴 BASE • Basically Available •
Soft-State • Eventual Consistency
44.
データベースの種類と特徴 BASE • Basically Available •
Soft-State • Eventual Consistency どんな時でもアプリケーションが動く
45.
データベースの種類と特徴 BASE • Basically Available •
Soft-State • Eventual Consistency 常に整合性を保つ必要がない
46.
データベースの種類と特徴 BASE • Basically Available •
Soft-State • Eventual Consistency 結果として整合性が取れる状態に至る
47.
データベースの種類と特徴 アーキテクチャ
48.
データベースの種類と特徴 アーキテクチャ ↓ ACIDやBASEを どのように実現するか
49.
データベースの種類と特徴 アーキテクチャ ↓ マスタ型とP2P型
50.
データベースの種類と特徴 マスタ型 マスタ スレーブ スレーブ スレーブ
51.
データベースの種類と特徴 マスタ型 • RDB • MongoDB •
Bigtable • HBase …など
52.
データベースの種類と特徴 P2P型 マスタ マスタ マスタ マスタ
53.
データベースの種類と特徴 P2P型 • Cassandra • Dynamo •
Riak • Voldemort …など
54.
データベースの種類と特徴 データモデル
55.
データベースの種類と特徴 データモデル ↓ どのようなデータを扱うか
56.
データベースの種類と特徴 データモデル • リレーショナル • キーバリュー •
カラム指向 • ドキュメント指向 …など
57.
データベースの種類と特徴 データモデル • リレーショナル • キーバリュー •
カラム指向 • ドキュメント指向 …など
58.
データベースの種類と特徴 データモデル • リレーショナル • キーバリュー •
カラム指向 • ドキュメント指向 …など RDBの元となるデータモデル 集合と関連でデータを表現する
59.
データベースの種類と特徴 リレーショナル user_id name 1 hoge 2
fuga 3 bar 4 foo role_id name 1 開発部 2 営業部 3 運用部 4 総務部 user_id role_id 1 1 1 3 3 2 4 4
60.
データベースの種類と特徴 リレーショナル user_id name 1 hoge 2
fuga 3 bar 4 foo role_id name 1 開発部 2 営業部 3 運用部 4 総務部 user_id role_id 1 1 1 3 3 2 4 4 集合を定義する 関係を定義する
61.
データベースの種類と特徴 データモデル • リレーショナル • キーバリュー •
カラム指向 • ドキュメント指向 …など
62.
データベースの種類と特徴 データモデル • リレーショナル • キーバリュー •
カラム指向 • ドキュメント指向 …など KeyとValueの組み合わせでデータを表現する シンプルな構造なのでスケールアウトに適している keyとvalueが1対1
63.
データベースの種類と特徴 キーバリュー key value 1 hoge 2
fuga 3 bar 4 foo 5 test 6 花子 7 一太郎 8 三四郎
64.
データベースの種類と特徴 キーバリュー key value 1 hoge 2
fuga 3 bar 4 foo 5 test 6 花子 7 一太郎 8 三四郎 1:1の関係を保持する
65.
データベースの種類と特徴 データモデル • リレーショナル • キーバリュー •
カラム指向 • ドキュメント指向 …など
66.
データベースの種類と特徴 データモデル • リレーショナル • キーバリュー •
カラム指向 • ドキュメント指向 …など キーバリュー型を拡張して行とカラムの概念を追加 RDBのテーブルに似ているがカラムは事前に定義しない keyに対してvalue(カラム)が1対多も可能
67.
データベースの種類と特徴 カラム指向 key name 所属
所属2 年齢 1 hoge 開発 運用 30 2 fuga 営業 25 3 bar 総務 運用 22 4 foo 運用 35 5 test 開発 42 6 花子 デザイン 運用 25 7 一太郎 ドキュメント 開発 25 8 三四郎 表計算 総務 25
68.
データベースの種類と特徴 カラム指向 key name 所属
所属2 年齢 1 hoge 開発 運用 30 2 fuga 営業 25 3 bar 総務 運用 22 4 foo 運用 35 5 test 開発 42 6 花子 デザイン 運用 25 7 一太郎 ドキュメント 開発 25 8 三四郎 表計算 総務 25 1:Nの関係を保持する
69.
データベースの種類と特徴 データモデル • リレーショナル • キーバリュー •
カラム指向 • ドキュメント指向 …など
70.
データベースの種類と特徴 データモデル • リレーショナル • キーバリュー •
カラム指向 • ドキュメント指向 …など 階層構造を持たず、ドキュメントそのものを保持する ドキュメントにはユニークなIDが振られる スキーマレスなので柔軟な変更が可能
71.
データベースの種類と特徴 ドキュメント指向 name : hoge role1
: 開発 role2 : 運用 age : 30 name : fuga role1 : 営業 from : 広島 age : 25 name : bar role1 : 総務
72.
データベースの種類と特徴 ドキュメント指向 name : hoge role1
: 開発 role2 : 運用 age : 30 name : fuga role1 : 営業 from : 広島 age : 25 name : bar role1 : 総務 それぞれが独立したドキュメント ドキュメントにはユニークなIDでアクセスが可能
73.
データベースの種類と特徴 ドキュメント指向 name : hoge role1
: 開発 role2 : 運用 age : 30 name : fuga role1 : 営業 from : 広島 age : 25 name : bar role1 : 総務 それぞれが独立しているので 自由な変更が可能
74.
データベースの種類と特徴 データモデル • リレーショナル • キーバリュー •
カラム指向 • ドキュメント指向 …など
75.
データベースの種類と特徴 データモデル • リレーショナル • キーバリュー •
カラム指向 • ドキュメント指向 …など 他にもグラフ型やツリー型など多種多様にある
76.
データベースの種類と特徴 これらの組み合わせで データベースの種類と特徴が決まる
77.
アーキテクチャ ーーーーーーー データモデル マスタ型 P2P型 その他 リレーショナル
RDB全般 pgpool2など キーバリュー Hibari Dynamo Riak Memcached Redis カラム指向 Bigtable HBase Cassandra ドキュメント指向 MongoDB CouchDB グラフ指向 Neo4J InfiniteGraph
78.
あじぇんだ 1 自己紹介 2 データベースの種類と特徴 3 データベースの選び方 4 まとめ
79.
データベースの選び方 ドメインに合わせて選ぶ ACIDの必要性、CAP定理の条件でど れが必要か考えて選択肢を選ぶ
80.
データベースの選び方 RDBは多くのデータに対応している
81.
データベースの選び方 しかしRDBは万能ではない
82.
データベースの選び方 NOSQLは目的を絞り込んだDB
83.
データベースの選び方 まずはRDBで検討する ↓ その後、不足をNOSQLで補う
84.
データベースの選び方 RDBで問題なければRDBのみ
85.
データベースの選び方 RDBで問題なければRDBのみ ↓ 無理にNOSQLを使わない
86.
データベースの選び方 RDBも要件によって選ぶ
87.
データベースの選び方 SQL Server • 開発環境(VS,C#など)の連携が強力 •
標準的な機能の多くをサポート • GUIツールが便利
88.
データベースの選び方 Oracle • Active -
Activeな構成が可能(RAC) • 独自・標準的な多くの機能 • GUIやサードパーティが充実 • 強力なOracleサポートチーム(有償)
89.
データベースの選び方 MySQL • レプリケーションが柔軟で強力 • 自動フェイルオーバー完備 •
高速なコネクション(multi Thread) • OSSなサードパーティが充実 • SSDと相性が良い
90.
データベースの選び方 PostgreSQL • Oracleにも負けない豊富な機能 • 企業に属さない中立なOSS •
コミュニティを含めたサポート • OSSなサードパーティが充実
91.
データベースの選び方 デメリットも見る
92.
データベースの選び方 SQL Server • 商用なので有償 •
スケールアウトが苦手 • MS以外の環境でメリットが少ない • CUIの連携が少ない
93.
データベースの選び方 Oracle • 商用なので有償(しかも高い) • 行連鎖や行移行など設計が難しい •
サードパーティが有償(しかも高い) • ORA-00600のトラウマ
94.
データベースの選び方 MySQL • 実装されてない機能がある Window関数が無い マテビューがない等 • ギャップロック •
相関サブクエリが苦手(遅い)
95.
データベースの選び方 PostgreSQL • 追記型の制約(VACUUM、HOT等) • SSDにしても劇的な高速化はしない •
GUIが弱い(設定を含め、CUIベース) • デフォルトがdataチェックサム無効 そもそも9.3以上の機能
96.
データベースの選び方 RDBで解決できない問題
97.
データベースの選び方 RDBで解決できない問題 ↓ それをNOSQLで解決する
98.
データベースの選び方 RDB全般の問題 • 大量のデータを処理(ビックデータ) • DBの水平拡張(スケールアウト) •
多種多様なデータモデル対応
99.
データベースの選び方 RDB全般の問題 • 大量のデータを処理(ビックデータ) • DBの水平拡張(スケールアウト) •
多種多様なデータモデル対応
100.
データベースの選び方 大量のデータを処理 • テラやペタ級を処理 • それを高速に処理 •
結果を高速に表示 …など
101.
アーキテクチャ ーーーーーーー データモデル マスタ型 P2P型 その他 リレーショナル
RDB全般 pgpool2など キーバリュー Hibari Dynamo Riak Memcached Redis カラム指向 Bigtable HBase Cassandra ドキュメント指向 MongoDB CouchDB グラフ指向 Neo4J InfiniteGraph
102.
アーキテクチャ ーーーーーーー データモデル マスタ型 P2P型 その他 リレーショナル
RDB全般 pgpool2など キーバリュー Hibari Dynamo Riak Memcached Redis カラム指向 Bigtable HBase Cassandra ドキュメント指向 MongoDB CouchDB グラフ指向 Neo4J InfiniteGraph 大量のデータから高速に結果を場合
103.
アーキテクチャ ーーーーーーー データモデル マスタ型 P2P型 その他 リレーショナル
RDB全般 pgpool2など キーバリュー Hibari Dynamo Riak Memcached Redis カラム指向 Bigtable HBase Cassandra ドキュメント指向 MongoDB CouchDB グラフ指向 Neo4J InfiniteGraph 結果のみを高速に返す場合
104.
アーキテクチャ ーーーーーーー データモデル マスタ型 P2P型 その他 リレーショナル
RDB全般 pgpool2など キーバリュー Hibari Dynamo Riak Memcached Redis カラム指向 Bigtable HBase Cassandra ドキュメント指向 MongoDB CouchDB グラフ指向 Neo4J InfiniteGraph 大量のデータを集計する場合
105.
データベースの選び方 大量のデータを処理 PaaS(クラウド)がマッチしやすい ・BigQuery ・RedShift ・TreasureData
106.
データベースの選び方 高速に処理 キャッシュのようにKVSを使う ・Memcached ・DynamoDB ・Redis
107.
データベースの選び方 RDB全般の問題 • 大量のデータを処理(ビックデータ) • DBの水平拡張(スケールアウト) •
多種多様なデータモデル対応
108.
データベースの選び方 DBの水平拡張(スケールアウト) • 参照の負荷分散 • 更新の負荷分散 •
可用性の確保 …など
109.
アーキテクチャ ーーーーーーー データモデル マスタ型 P2P型 その他 リレーショナル
RDB全般 pgpool2など キーバリュー Hibari Dynamo Riak Memcached Redis カラム指向 Bigtable HBase Cassandra ドキュメント指向 MongoDB CouchDB グラフ指向 Neo4J InfiniteGraph RDBでも出来るが 高速ではなかったり、 サードパーティが必要だったりする
110.
アーキテクチャ ーーーーーーー データモデル マスタ型 P2P型 その他 リレーショナル
RDB全般 pgpool2など キーバリュー Hibari Dynamo Riak Memcached Redis カラム指向 Bigtable HBase Cassandra ドキュメント指向 MongoDB CouchDB グラフ指向 Neo4J InfiniteGraph Dataは分散するが 偏ったアクセスなどは 分散しない場合も多い
111.
アーキテクチャ ーーーーーーー データモデル マスタ型 P2P型 その他 リレーショナル
RDB全般 pgpool2など キーバリュー Hibari Dynamo Riak Memcached Redis カラム指向 Bigtable HBase Cassandra ドキュメント指向 MongoDB CouchDB グラフ指向 Neo4J InfiniteGraph MongoDBはマスタ型だか 自動フェイルオーバーするので 要件によってはマッチする
112.
データベースの選び方 DBの水平拡張(スケールアウト) • RDBでも可能 シャーディングやレプリケーション ・負荷の予測と分散化が難しい ・RDBよりも簡単にNOSQLで行う
113.
データベースの選び方 DBの水平拡張(スケールアウト) • NOSQLは弱い整合性が多い(AP型) • データにリアルタイム性が不要な場 合がにマッチする(履歴ログなど) •
データの一貫性が不要な場合もマッ チする(ブログなど)
114.
データベースの選び方 RDB全般の問題 • 大量のデータを処理(ビックデータ) • DBの水平拡張(スケールアウト) •
多種多様なデータモデル対応
115.
アーキテクチャ ーーーーーーー データモデル マスタ型 P2P型 その他 リレーショナル
RDB全般 pgpool2など キーバリュー Hibari Dynamo Riak Memcached Redis カラム指向 Bigtable HBase Cassandra ドキュメント指向 MongoDB CouchDB グラフ指向 Neo4J InfiniteGraph
116.
アーキテクチャ ーーーーーーー データモデル マスタ型 P2P型 その他 リレーショナル
RDB全般 pgpool2など キーバリュー Hibari Dynamo Riak Memcached Redis カラム指向 Bigtable HBase Cassandra ドキュメント指向 MongoDB CouchDB グラフ指向 Neo4J InfiniteGraph JSONなど非構造化データを格納 最近、PostgreSQLやMySQLも対応してきた領域
117.
アーキテクチャ ーーーーーーー データモデル マスタ型 P2P型 その他 リレーショナル
RDB全般 pgpool2など キーバリュー Hibari Dynamo Riak Memcached Redis カラム指向 Bigtable HBase Cassandra ドキュメント指向 MongoDB CouchDB グラフ指向 Neo4J InfiniteGraph グラフ型はRDBが苦手なデータモデルの最たる例 RDBでは難しいデータ構造の表現を可能にする
118.
データベースの選び方 多種多様なデータモデル対応 • リレーショナルモデルで表現出来ないデー タ構造は無理しない 無理に表現すると問題の原因になる • データモデルが違う場合、お互いのデータ 利用にインターフェイスが必要 多くの場合はプログラムが結合する
119.
あじぇんだ 1 自己紹介 2 データベースの種類と特徴 3 データベースの選び方 4 まとめ
120.
まとめ データの寿命はコードより長い
121.
まとめ 一度作ったデータは変更が難しい
122.
まとめ 一度作ったデータは変更が難しい ↓ ソフトウェアの選択が大事
123.
まとめ 長所と短所を把握する
124.
まとめ 長所と短所を把握する ↓ 苦手なことをさせない
125.
まとめ ACIDとCAP定理で比較する + データモデルと要件を比較する
126.
まとめ データモデルとソフトウェア の特性を理解する
127.
まとめ リレーショナル・データベース
128.
まとめ リレーショナル・データベース ↓ グラフやツリーを表現させない
129.
まとめ ACIDを担保してないNOSQL
130.
まとめ ACIDを担保してないNOSQL ↓ お金の管理や集計をさせない
131.
まとめ インフラをデザインする ¦¦ 得意分野を組み合わせる
132.
まとめ 適切な設計は適切な拡張を生む
133.
まとめ 適切な設計は適切な拡張を生む ↓ Scale UpやScale Outを可能にする
134.
まとめ データの寿命はコードより長い 大事なことなので二回(ry
135.
まとめ オススメの書籍
136.
まとめ
137.
まとめ
138.
まとめ
139.
まとめ もし現在のアプリケーションがRDBで 上手く動いているのであれば、 それをNOSQLに置換する理由は無いし、 それを勧めたりはしない Nate McCall(@zznate)
140.
ご静聴ありがとうございました。
Download