Upload
soudai-sone
View
10.276
Download
1
Embed Size (px)
Citation preview
自己紹介名前:曽根 壮大(そね たけとも) 年齢:30歳(三人の子供がいます) 職業:Webエンジニア
所属:日本PostgreSQLユーザ会
中国支部 支部長
技術的にはLL系言語とかRDBが好きです
アーキテクチャ ーーーーーーー データモデル
マスタ型 P2P型 その他
リレーショナル RDB全般 pgpool2など
キーバリュー Hibari Dynamo Riak
Memcached Redis
カラム指向 Bigtable HBase
Cassandra
ドキュメント指向 MongoDB CouchDB
グラフ指向 Neo4J InfiniteGraph
アーキテクチャ ーーーーーーー データモデル
マスタ型 P2P型 その他
リレーショナル RDB全般 pgpool2など
キーバリュー Hibari Dynamo Riak
Memcached Redis
カラム指向 Bigtable HBase
Cassandra
ドキュメント指向 MongoDB CouchDB
グラフ指向 Neo4J InfiniteGraph
データベースの種類と特徴ACID
• 原子性(Atomicity) • 一貫性(Consistency) • 独立性(Isolation) • 永続性(Durability)
Atomicity(原子性)とは、 トランザクションに含まれる個々の手順が
「すべて実行される」か「一つも実行されない」
のどちらかの状態になるという性質
データベースの種類と特徴ACID
• 原子性(Atomicity) • 一貫性(Consistency) • 独立性(Isolation) • 永続性(Durability)
Consistency(一貫性)とは、 トランザクションの前後でデータの整合性が保たれ、
矛盾の無い状態が継続される性質
データベースの種類と特徴ACID
• 原子性(Atomicity) • 一貫性(Consistency) • 独立性(Isolation) • 永続性(Durability)
Isolation(独立性)とは、 トランザクション実行中の処理過程が外部から隠蔽され、
他の処理などに影響を与えない性質
データベースの種類と特徴ACID
• 原子性(Atomicity) • 一貫性(Consistency) • 独立性(Isolation) • 永続性(Durability)
Durability(永続性)とは、 トランザクションが完了したら、
その結果は記録され、失われることがないという性質
データベースの種類と特徴CAP定理
• 整合性 (Consistency) • 可用性 (Availability) • 分断耐性 (Partitions)
整合性 (Consistency)とは、 全てのクライアントが常に同一のデータを見る性質
データベースの種類と特徴CAP定理
• 整合性 (Consistency) • 可用性 (Availability) • 分断耐性 (Partitions)
可用性 (Availability)とは、 全てのクライアントが読み出しと書き込みが出来る性質
データベースの種類と特徴CAP定理
• 整合性 (Consistency) • 可用性 (Availability) • 分断耐性 (Partitions)
分断耐性 (Partitions)とは、 物理ネットワークが分断されても 間違った結果が発生しない性質
データベースの種類と特徴BASE
整合性(C)と分断耐性(P)を重視した場合はACIDを満たす必要がある しかし整合性(C)よりも可用性(A)と分断耐性(P)を重視する場合はBASEを満たす必要がある
データベースの種類と特徴リレーショナル
user_id name1 hoge2 fuga3 bar4 foo
role_id name1 開発部2 営業部3 運用部4 総務部
user_id role_id1 11 33 24 4
データベースの種類と特徴リレーショナル
user_id name1 hoge2 fuga3 bar4 foo
role_id name1 開発部2 営業部3 運用部4 総務部
user_id role_id1 11 33 24 4
集合を定義する
関係を定義する
データベースの種類と特徴データモデル
• リレーショナル • キーバリュー • カラム指向 • ドキュメント指向 …など
KeyとValueの組み合わせでデータを表現する シンプルな構造なのでスケールアウトに適している
keyとvalueが1対1
データベースの種類と特徴データモデル
• リレーショナル • キーバリュー • カラム指向 • ドキュメント指向 …など
キーバリュー型を拡張して行とカラムの概念を追加 RDBのテーブルに似ているがカラムは事前に定義しない
keyに対してvalue(カラム)が1対多も可能
データベースの種類と特徴カラム指向
key name 所属 所属2 年齢1 hoge 開発 運用 302 fuga 営業 253 bar 総務 運用 224 foo 運用 355 test 開発 426 花子 デザイン 運用 257 一太郎 ドキュメント 開発 258 三四郎 表計算 総務 25
データベースの種類と特徴カラム指向
key name 所属 所属2 年齢1 hoge 開発 運用 302 fuga 営業 253 bar 総務 運用 224 foo 運用 355 test 開発 426 花子 デザイン 運用 257 一太郎 ドキュメント 開発 258 三四郎 表計算 総務 25
1:Nの関係を保持する
データベースの種類と特徴データモデル
• リレーショナル • キーバリュー • カラム指向 • ドキュメント指向 …など
階層構造を持たず、ドキュメントそのものを保持する ドキュメントにはユニークなIDが振られる スキーマレスなので柔軟な変更が可能
データベースの種類と特徴ドキュメント指向
“name” : “hoge” “role1” : 開発 “role2” : 運用 “age” : 30
“name” : “fuga” “role1” : 営業 “from” : 広島 “age” : 25
“name” : “bar” “role1” : 総務
データベースの種類と特徴ドキュメント指向
“name” : “hoge” “role1” : 開発 “role2” : 運用 “age” : 30
“name” : “fuga” “role1” : 営業 “from” : 広島 “age” : 25
“name” : “bar” “role1” : 総務
それぞれが独立したドキュメント ドキュメントにはユニークなIDでアクセスが可能
データベースの種類と特徴ドキュメント指向
“name” : “hoge” “role1” : 開発 “role2” : 運用 “age” : 30
“name” : “fuga” “role1” : 営業 “from” : 広島 “age” : 25
“name” : “bar” “role1” : 総務
それぞれが独立しているので 自由な変更が可能
アーキテクチャ ーーーーーーー データモデル
マスタ型 P2P型 その他
リレーショナル RDB全般 pgpool2など
キーバリュー Hibari Dynamo Riak
Memcached Redis
カラム指向 Bigtable HBase
Cassandra
ドキュメント指向 MongoDB CouchDB
グラフ指向 Neo4J InfiniteGraph
データベースの選び方Oracle
• Active - Activeな構成が可能(RAC) • 独自・標準的な多くの機能 • GUIやサードパーティが充実 • 強力なOracleサポートチーム(有償)
データベースの選び方MySQL
• レプリケーションが柔軟で強力 • 自動フェイルオーバー完備 • 高速なコネクション(multi Thread) • OSSなサードパーティが充実 • SSDと相性が良い
データベースの選び方PostgreSQL
• 追記型の制約(VACUUM、HOT等) • SSDにしても劇的な高速化はしない • GUIが弱い(設定を含め、CUIベース) • デフォルトがdataチェックサム無効 そもそも9.3以上の機能
アーキテクチャ ーーーーーーー データモデル
マスタ型 P2P型 その他
リレーショナル RDB全般 pgpool2など
キーバリュー HibariDynamo Riak
Memcached Redis
カラム指向 Bigtable HBase Cassandra
ドキュメント指向 MongoDB CouchDB
グラフ指向 Neo4J InfiniteGraph
アーキテクチャ ーーーーーーー データモデル
マスタ型 P2P型 その他
リレーショナル RDB全般 pgpool2など
キーバリュー HibariDynamo Riak
Memcached Redis
カラム指向 Bigtable HBase Cassandra
ドキュメント指向 MongoDB CouchDB
グラフ指向 Neo4J InfiniteGraph
大量のデータから高速に結果を場合
アーキテクチャ ーーーーーーー データモデル
マスタ型 P2P型 その他
リレーショナル RDB全般 pgpool2など
キーバリュー HibariDynamo Riak
Memcached Redis
カラム指向 Bigtable HBase Cassandra
ドキュメント指向 MongoDB CouchDB
グラフ指向 Neo4J InfiniteGraph
結果のみを高速に返す場合
アーキテクチャ ーーーーーーー データモデル
マスタ型 P2P型 その他
リレーショナル RDB全般 pgpool2など
キーバリュー HibariDynamo Riak
Memcached Redis
カラム指向 Bigtable HBase Cassandra
ドキュメント指向 MongoDB CouchDB
グラフ指向 Neo4J InfiniteGraph
大量のデータを集計する場合
アーキテクチャ ーーーーーーー データモデル
マスタ型 P2P型 その他
リレーショナル RDB全般 pgpool2など
キーバリュー Hibari Dynamo Riak
Memcached Redis
カラム指向 Bigtable HBase
Cassandra
ドキュメント指向 MongoDB CouchDB
グラフ指向 Neo4J InfiniteGraph
RDBでも出来るが 高速ではなかったり、
サードパーティが必要だったりする
アーキテクチャ ーーーーーーー データモデル
マスタ型 P2P型 その他
リレーショナル RDB全般 pgpool2など
キーバリュー Hibari Dynamo Riak
Memcached Redis
カラム指向 Bigtable HBase
Cassandra
ドキュメント指向 MongoDB CouchDB
グラフ指向 Neo4J InfiniteGraph
Dataは分散するが 偏ったアクセスなどは 分散しない場合も多い
アーキテクチャ ーーーーーーー データモデル
マスタ型 P2P型 その他
リレーショナル RDB全般 pgpool2など
キーバリュー Hibari Dynamo Riak
Memcached Redis
カラム指向 Bigtable HBase
Cassandra
ドキュメント指向 MongoDB CouchDB
グラフ指向 Neo4J InfiniteGraph
MongoDBはマスタ型だか 自動フェイルオーバーするので 要件によってはマッチする
データベースの選び方DBの水平拡張(スケールアウト)
• NOSQLは弱い整合性が多い(AP型) • データにリアルタイム性が不要な場合がにマッチする(履歴ログなど)
• データの一貫性が不要な場合もマッチする(ブログなど)
アーキテクチャ ーーーーーーー データモデル
マスタ型 P2P型 その他
リレーショナル RDB全般 pgpool2など
キーバリュー Hibari Dynamo Riak
Memcached Redis
カラム指向 Bigtable HBase Cassandra
ドキュメント指向 MongoDB CouchDB
グラフ指向 Neo4J InfiniteGraph
アーキテクチャ ーーーーーーー データモデル
マスタ型 P2P型 その他
リレーショナル RDB全般 pgpool2など
キーバリュー Hibari Dynamo Riak
Memcached Redis
カラム指向 Bigtable HBase Cassandra
ドキュメント指向 MongoDB CouchDB
グラフ指向 Neo4J InfiniteGraph
JSONなど非構造化データを格納 最近、PostgreSQLやMySQLも対応してきた領域
アーキテクチャ ーーーーーーー データモデル
マスタ型 P2P型 その他
リレーショナル RDB全般 pgpool2など
キーバリュー Hibari Dynamo Riak
Memcached Redis
カラム指向 Bigtable HBase Cassandra
ドキュメント指向 MongoDB CouchDB
グラフ指向 Neo4J InfiniteGraph
グラフ型はRDBが苦手なデータモデルの最たる例 RDBでは難しいデータ構造の表現を可能にする
データベースの選び方多種多様なデータモデル対応
• リレーショナルモデルで表現出来ないデータ構造は無理しない 無理に表現すると問題の原因になる • データモデルが違う場合、お互いのデータ利用にインターフェイスが必要 多くの場合はプログラムが結合する