O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

実務で役立つデータベースの活用法

18.699 visualizações

Publicada em

オープンセミナー2015@香川の登壇資料です。

http://connpass.com/event/15646/

Publicada em: Tecnologia
  • Entre para ver os comentários

実務で役立つデータベースの活用法

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

×