Upgrade to Pro — share decks privately, control downloads, hide ads and more …

データベース研修 DB基礎【MIXI 25新卒技術研修】

データベース研修 DB基礎【MIXI 25新卒技術研修】

本スライドは、MIXIの2025年度新卒向け技術研修で使用された資料です。
 
MIXI 2025新卒技術研修
『データベース研修 DB基礎』
 
───────────────────────────────
※皆様へのお願い※ 資料・動画・リポジトリのご利用について
───────────────────────────────
公開している資料や動画は、是非、勉強会や社内の研修などにご自由にお使いいただければと思いますが、以下のような場でのご利用はご遠慮ください。
- 受講者から参加費や授業料など金銭を集めるような場での利用
(会場費や飲食費など勉強会の運営に必要な実費を集める場合は問題ありません)
- 出典を削除または改変しての利用

Avatar for MIXI ENGINEERS

MIXI ENGINEERS PRO

April 21, 2025
Tweet

Video

More Decks by MIXI ENGINEERS

Other Decks in Technology

Transcript

  1. 2 ©MIXI 本講義の⽬的 ▪ ⽬的 正式配属後の開発タスクを担当するにあたり、 データベース(DB) に関する必要最低限の知識習得を⽬的とします。 複数ある DB

    種類のそれぞれの特性を知り、 最適な DB を選択‧利⽤できる初期段階まで到達することを⽬的とします。 ▪ 背景 あらゆるプロダクト開発で DB は必須といってよいスキルです。 クラウドと相性が良い DB がサービス化しており、モダンなシステム開発には 基本的かつ広い知識が必要となっています。
  2. 3 ©MIXI 本⽇の内容 第1章: データベースの基本概念 第2章: 様々なデータベース 第3章: クラウド上のデータベースサービス 第4章:

    データベースの選定とアーキテクチャ 第5章: セキュリティとデータガバナンス 第6章: データベースとAI
  3. 4 ©MIXI 時間割 10:30〜10:45 ⾃⼰紹介(お互い) 10:45〜11:50 1〜3章 11:50〜12:00 休憩 12:00〜13:00

    4〜6章 13:00〜14:00 ランチ休憩 14:00〜18:30 データ分析基盤編
  4. 7 ©MIXI ⾃⼰紹介 吉井 亮 (YOSHII RYO) • 経歴 HWエンジニア

    → 中⼩SIer → ERPコンサル → AWS パートナー → 株式会社MIXI(2023年7⽉⼊社) • Community Ops-JAWS (AWS Community Builder) • 好きな⾔葉 No human labor is no human error.
  5. 8 ©MIXI ⾃⼰紹介 北島 祥伍 (KITAJIMA SHOGO) • 経歴 2019年4⽉新卒⼊社、⼊社以来モンストを中⼼としたデータ基盤の⾯倒を⾒ています。

     BigQueryの重いクエリのチューニングが好き • 最近の悩み  毎⽉課⾦したいAIのツールが変わること • 近況  去年、気象予報⼠の資格を取得してみたものの、特に使い道がない
  6. 10 ©MIXI ⾃⼰紹介 渡辺 ⼤貴 (WATANABE TAIKI) • 経歴 2020年新卒⼊社。以来モンストのデータ解析基盤の運⽤、新規事業系のデータ基盤構築など担当。

    • 出⾝地 仙台出⾝ ⼤学は岩⼿の(元)村にある⼤学へ通っていました。 • 最近⾏った旅⾏ 2⽇前まで RubyKaigi 2025 参加のために愛媛県に⾏っていました。
  7. 11 ©MIXI 3つ選んで⾃⼰紹介をお願いします お名前 (必須) 趣味 出⾝地 最近⾏った 旅⾏ 休みにすること

    好きな⾷べ物 ペットの話 私の宝物 将来の夢 好きなテック 気になる 出来事 MIXI で やりたいこと
  8. 13 ©MIXI データベースとは データベースは構造化された情報の集合体であり、膨⼤なデータを体系的に格納、検索、 更新ができるように設計されたシステムです。 データベースを操作するためには、専⽤のソフトウェアである データベース管理システム(DBMS)を使⽤します。 DBMS はデータの整合性を維持するための機能を提供し、 複数ユーザーが同時にデータにアクセスしたり、

    データを安全に保持するためのセキュリティ機能も備えています。 1980年代にリレーショナルデータベース(RDB)が普及しました。 これは SQL を使って DB へアクセス‧管理‧操作をします。 近年ではニーズの多様化により NoSQL データベースが台頭しています。
  9. 14 ©MIXI DBMS の役割 データの格納: データを効率的に格納します。 データの検索: クエリ⾔語を使⽤して、ユーザーが要求するデータを検索します。 データの更新: データの挿⼊、削除、編集を⾏います。

    バックアップとリカバリ: データ損失防⽌のためのバックアップ機能と、障害からの復旧を ⽀援するリカバリ機能を提供します。 セキュリティ: データへのアクセスを制御し、不正アクセスや機密情報の漏洩を防ぎます。 マルチユーザーサポート: 複数のユーザーが同時にデータベースにアクセスし作業できるよ うに、競合と整合性の問題を管理します。
  10. 15 ©MIXI DBMS の役割 パフォーマンス監視: DB のパフォーマンスを最適化し、効率的な運⽤ができるように⽀援 します。 データの整合性保持: 変更が

    DB 全体にわたる⼀貫した状態を保つように、制約とルールを 適⽤します。 トランザクション管理: 複数の DB 操作を⼀つの単位として管理し、ACID特性を適⽤して データの整合性を確保します。 データの抽象化: 複雑な内部構造を隠蔽し、ユーザーがより簡単にデータベースと対話でき るようにします。
  11. 19 ©MIXI ハイブリットトランザクション/分析処理(HTAP) ビジネス要求の複雑化によって OLTP と OLAP の境界があいまいになってきています。 定義: 1つのプラットフォームで

    OLTP と OLAP の両⽅を扱える DBMS。 特徴: 即時性のあるデータ駆動型の意思決定が可能です。 ⽤途: リアルタイムでのデータ分析がビジネスの成功に直結する状況、 例えば⾦融市場のモニタリングやフラウド検知など、 迅速なデータ分析とアクションが要求されるシナリオに適しています。
  12. 20 ©MIXI トランザクション データベースのトランザクションとは、データベースに対する⼀つ以上の変更 (データの挿⼊、更新、削除など)を含む⼀連の操作をまとめた単位です。 トランザクションの流れは以下の通りです。 1. 開始: このステップでトランザクションが開始されます。 2.

    実⾏: データに対する⼀連の変更が⾏われます。 3. コミットまたはロールバック: 全ての操作が成功した場合、変更がデータベースに保存されます。(コミット) 操作が失敗した場合は、トランザクション開始前の状態に戻ります。(ロールバック) トランザクションはデータベースの信頼性と整合性を守るために不可⽋であり、 データベースを利⽤する様々な⽤途で重要な役割を担います。
  13. 21 ©MIXI ACID 特性 トランザクションは、ACID 特性に従います。 原⼦性(Atomicity): トランザクション内の全操作は、ひとつの単位として扱われます。 すべて成功するか、あるいはすべて無かったことにするか、です。 部分的な完了は認められません。

    ⼀貫性(Consistency): トランザクションは、データベースのルールに従い、 正しいデータの状態でのみ変更を適⽤します。 独⽴性(Isolation): 同時に複数実⾏されるトランザクションは、互いに独⽴しており、 他のトランザクションの途中の操作結果に影響を受けません。 耐久性(Durability): トランザクションが完了し、コミットが⾏われると、その結果は 永続的にデータベースに記録され、システム障害が発⽣しても保持されます。
  14. 22 ©MIXI CAP 定理(ブリュワーの定理) データを格納する複数のノードで構成される分散システムでは、 次の 3 つ全てを同時に提供することはできない(1つ諦める)という考え⽅です。 • Consistency(⼀貫性)

    ◦ どのノードに接続しても、最新のデータ、もしくは、エラーが返る • Availability(可⽤性) ◦ 1つ以上のノードがダウンしても、他のノードが応答を返す • Partition-tolerance(分断耐性) ◦ ノード間の通信が切断されても動作し続ける OLTP → CA 型(⼀貫性と多様性)が多い OLAP → AP 型(可⽤性と分断耐性)が多い
  15. 23 ©MIXI インデックス、索引 インデックスは、書籍の⽬次や付箋、ドッグイヤーのようなものです。 データベース内の⼤量データから⽬的のレコードを効率よく取得するための仕組みです。 ⾏No. 名前 1 Alice 100万

    Bob インデックスの無いテーブル 100万⾏を総取得して John を探す インデックスのあるテーブル A-M N-Z (100万⾏) N-P Q-S T-V W-Z Yoshii (more) Tyler (more) Smith (more) Portman (more) A-C D-F G-I J-M John (more) George (more) David (more) Alice (more) J-M のなかから John を探すだけで済む
  16. 24 ©MIXI インデックスの⽋点 インデックスは検索時に有効な機能ですが、インデックスを作り過ぎると DBMS にとって負荷になります。 インデックスはテーブルとは別の特殊なテーブルに索引情報を格納しています。 テーブル内のレコードを追加‧削除するたびにインデックスを最新化しています。 インデックス最新化はコンピュートリソースを使うので、DBMS 全体のパフォーマンスに

    影響を与える可能性があります。 また、インデックスもディスクスペースを消費することになります。 必要なインデックスだけを作る、使わなくなったインデックスは削除する、 ⽉に1度、半年に1度しか使わないインデックスなら使う前に作成、終わったら削除などの ⼯夫をすることをお勧めします。
  17. 25 ©MIXI ⾏指向と列指向 ディスク上でデータがどのように格納されるか、によって分類する⽅法もあります。 ⾏指向 列指向 商品ID 商品名 価格 1

    シャーペン 200 2 消しゴム 130 3 メモ帳 500 1 シャーペン 200 2 消しゴム 130 3 メモ帳500 ブロックには⾏ごとのデータが格納されている ディスクブロック 1 2 3 シャーペン 消しゴム メモ帳 200 130 500 ブロックには列ごとのデータが格納されている ディスクブロック ⼀意のキーで識別されていて、⾏単位のデータが 必要なケースに向いています。 トレンドの把握や平均の計算など集計処理を ⾏う分析的なケースに向いています。
  18. 27 ©MIXI 前提知識 〜 スケールアップとスケールアウト 第2章に⼊る前に「スケール」という⾔葉だけ頭の⽚隅に置いてください。 以下はデータベースでの例です。 スケールアップ(垂直スケール) スケールアウト(水平スケール) 4

    vCPU 16 GiB Mem 8 vCPU 32 GiB Mem インスタンススペックを増やす(大きくする)こと。 リソースが余っていれば比較的容易にアップ可能。 DBMS のパラメータも一緒に変える必要あり。 動的な変更が難しい。システム停止を伴うのが基本。 (工夫して停止時間を最小にする) 4 vCPU 16 GiB Mem 4 vCPU 16 GiB Mem 4 vCPU 16 GiB Mem 4 vCPU 16 GiB Mem インスタンス自体を増やすこと。 仕組みができていれば、インスタンス追加だけでスケールするので急激な アクセス増に対応可能。 インスタンス間の同期や整合性が必要。 Disk Disk Disk
  19. 28 ©MIXI リレーショナルデータベース (RDBMS) RDBMSは1970年代に登場して以来、企業や組織のデータ管理基盤として 広く利⽤されています。 データは⾏と列で構成されるテーブルとして管理され、テーブル間の関連付けにより、 データの重複を避け、⼀貫性のあるデータ管理が可能です。 標準化されたデータベース⾔語 SQL

    を使⽤して、データの検索‧追加‧削除‧保存を ⾏います。 リレーショナルデータベースの歴史は古く、昔から多くのシステムで利⽤されています。 現代の Web アプリケーションではそれ以外のデータベースの利⽤が増えていますが、 それでもリレーショナルデータベースが完全に無くなる可能性は低いと考えます。
  20. 29 ©MIXI RDBMS ACID 特性によりデータの信頼性と⼀貫性を提供していることが RDBMS の特徴です。 ⻑所 • ACID

    特性をサポート ◦ 信頼性が⾼いトランザクション • 複数ユーザーアクセスが可能 ◦ ロック機構により整合性を保つ • データ冗⻑の防⽌ ◦ 適切なテーブル設計が前提 ◦ ストレージスペースの節約 短所 • スケーラビリティに難しさ ◦ スケールアップに依存 • データベース構造が複雑になりがち ◦ スキーマ変更が柔軟ではない • メンテナンスの難易度 ◦ データ量に⽐例して難易度も上がる 代表的な製品 Amazon Aurora, Cloud SQL, MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server ユースケース オンライン決済、銀⾏取引、在庫管理、CRM、⼈事給与、ECサイト、旅⾏予約サイト、医療システムなど多数
  21. 30 ©MIXI NoSQL IoT や AI の急速な進歩によるビックデータ需要の⾼まり、SNS によるよりリアルタイムな データ処理などを受け、NoSQL の利⽤が広まっています。

    ⾮リレーショナルなデータベースを NoSQL と呼んでいます。 テーブル同⼠の関係をもって整合性などの優位点を発揮していた RDB と違い、 NoSQL の柔軟なスキーマは迅速で反復的な開発を可能とします。 NoSQL は⽔平⽅向へのスケールアウトが可能で、スパイクアクセスに対応しやすい設計に なっています。
  22. 31 ©MIXI キーバリューストア キーとバリューのペアでデータが格納されるスキーマレスなデータベースです。 キーに直接アクセスすることで⾼速な読み書きを実現しています。 ⻑所 • シンプルな操作 ◦ API

    がシンプルで扱いやすい • パフォーマンス ◦ ⾼速なデータ構造 • 柔軟性 ◦ データモデルの変更が容易 • 拡張性 ◦ 分散アーキテクチャで⾼拡張性 短所 • 複雑なクエリが苦⼿ ◦ 複雑なクエリや JOIN は避ける • 弱い⼀貫性 ◦ 分散アーキテクチャのトレードオフ • トランザクション管理 ◦ 複雑なトランザクションなら RDB 代表的な製品 Redis, Memcached, etcd, Amazon DynamoDB, Cloud Datastore ユースケース セッション管理、キャッシュ、ショッピングカート、チャットなどのリアルタイム処理、など
  23. 32 ©MIXI ドキュメント データはドキュメント(JSON、XML など)として格納されます。 ドキュメントが⼀纏めに格納されているため、⾼速な読み書きを実現します。 ⻑所 • 開発の効率化 ◦

    アプリケーションのオブジェクトと似た データ構造 • スケーラビリティ ◦ 分散アーキテクチャで拡張性が⾼い • データ表現の豊かさ ◦ 複雑なデータ型やネスト構成が可能 • スキーマ変更の容易さ ◦ スキーマフリー 短所 • 集約操作が苦⼿ ◦ JOIN するような⽤途には向かない • トランザクションが限定的 ◦ トランザクション前提な⽤途ではない • 弱い⼀貫性 ◦ 分散アーキテクチャのトレードオフ 代表的な製品 MongoDB, Couchbase, Amazon DocumentDB, Cloud Firestore ユースケース CMS、商品カタログ、ユーザープロファイル、多様なデバイスから多様なデータを受信するケース
  24. 33 ©MIXI ワイドカラム データはカラムファミリーまたはスーパーカラムと呼ばれる列の集合として格納されます。 カラムへの効率的なアクセスが可能で、⼤量のデータ書き込みと分析が得意です。 ⻑所 • ⼤規模データ運⽤ ◦ ペタバイト規模の分散処理

    • 柔軟なデータモデル ◦ 動的なスキーマ変更が可能 • 能率的なストレージ活⽤ ◦ 使⽤されるカラムのみ保存される • ⾼速なクエリ ◦ カラムへのアクセスや集計が⾼速 短所 • 設計が複雑になりがち ◦ RDB とは異なるアプローチが必要 • 整合性が苦⼿ ◦ ⼀貫性はアプリで保証(したほうが良い) • 独⾃のクエリ ◦ 複雑なクエリや JOIN は苦⼿ 代表的な製品 Cassandra, Google Bigtable, Amazon Keyspaces, ScyllaDB ユースケース ビッグデータのリアルタイム処理、リコメンデーションエンジン、⼤量のイベントログ管理
  25. 34 ©MIXI インメモリ データをメモリ上に配置し⾼速な読み書きを提供します。 ⻑所 • 処理速度の向上 ◦ ⾼スループット、低レイテンシー •

    スケーラビリティ ◦ ⽔平スケーリングに対応 短所 • コスト ◦ RAM はディスクに⽐べて⾼額 • データの揮発性 ◦ 電源喪失でデータは消える ◦ データ永続化処理が別途必要 • リソース制約 ◦ ディスクに⽐べるとリソース増が難しい 代表的な製品 Redis, Memcached, SAP HANA, Apache Ignite ユースケース キャッシュ、セッションストア、ゲームバックエンド、チャット
  26. 35 ©MIXI タイムシリーズ 時系列データの扱いに特化したデータベースです。 時系列クエリの⾼速処理やリアルタイム分析を⾏います。 ⻑所 • 時系列処理のパフォーマンス ◦ 時系列の収集‧保存‧分析に特化

    • データの洞察⼒ ◦ ⾼度な分析機能を有していることがほとんど • スケーラビリティ ◦ 分散アーキテクチャの利点 短所 • 汎⽤性は無い ◦ ⾮時系列データには向かない • クエリの制限 ◦ JOIN などの複雑なクエリは不向き • 特殊性 ◦ ニーズを満たすには条件がある 代表的な製品 InfluxDB, TimescaleDB, Amazon Timestream, Google Bigtable ユースケース IoT デバイスデータの収集、⾦融マーケット、メトリクス、ログ
  27. 36 ©MIXI グラフ データエンティティがネットワーク状の関係を持ったデータの集まりです。 A は B の友達、B は C

    の友達、C は A の友達の友達、のようなイメージです。 ⻑所 • 関係性の深掘り ◦ ネットワーク状関係の探索が速い ◦ 深い関係でも把握しやすい • クエリの最適化 ◦ RDB の JOIN に⽐べてパフォーマンスが良い • 柔軟性と拡張性 ◦ 関係の追加が容易 短所 • ユースケースが限定的 • 運⽤の難易度 ◦ グラフが⼤きくなると維持管理が⼤変 • 学習の難易度 ◦ 専⾨的な知識が必要なことも 代表的な製品 Neo4j, Amazon Neptune, OrientDB ユースケース ソーシャルネットワーク、リコメンデーションエンジン、ナレッジマネジメント、⽣物学的ネットワークモデル
  28. 37 ©MIXI NewSQL 古くから広く使われてきた RDB ですが、⽔平スケールに難点がありました。 モダンなアプリケーションは、短時間でアクセスが増えることが当たり前に発⽣し、 スケーラビリティの問題が頭痛の種でした。 Google が

    RDBMS の特性を維持しつつ、スケーラビリティも兼ね備える Google Spanner をリリースしました。 これに影響‧刺激を受けるように TiDB、CockroachDB などの製品がリリースされまし た。
  29. 38 ©MIXI NewSQL NewSQLは、リレーショナルデータベースの利点を維持しつつ、モダンな分散システムアーキテクチャ のスケーラビリティとパフォーマンスを兼ね備えたソリューションです。 ⻑所 • スケーラビリティ ◦ 分散アーキテクチャの利点

    • ⾼いトランザクション性能 ◦ トランザクション処理の実現 • 強⼒なデータ整合性 ◦ ACID 特性の維持 • リレーショナルデータモデル ◦ 既存データモデルの活⽤ 短所 • 複雑性 ◦ DBMS の管理が難しくなりがち • 成熟度 ◦ まだ新しい技術 • 既存からの移⾏ ◦ 移⾏にかかるコストは無視できない 代表的な製品 Google Spanner, TiDB, CockroachDB ユースケース ⾦融取引、eコマース、ゲーム、ソーシャルネットワーク
  30. 41 ©MIXI AWS が提供するクラウドデータベース https://aws.amazon.com/jp/products/databases/ より データベースのタイプ 例 AWS のサービス

    リレーショナル 従来のアプリケーション、エンタープライズリソースプランニング (ERP)、カスタマーリレーショ ンシップマネジメント (CRM)、e コマース Amazon Aurora , Amazon RDS, Amazon Redshift Key-Value トラフィックの多いウェブアプリケーション、e コマースシステム、ゲームアプリケーション Amazon DynamoDB インメモリ キャッシュ、セッション管理、ゲームのリーダーボード、地理空間アプリケーション Amazon ElastiCache, Amazon MemoryDB ドキュメント コンテンツ管理、カタログ、ユーザープロファイル Amazon DocumentDB (MongoDB 互換) グラフ 不正検出、ソーシャルネットワーク、レコメンデーションエンジン Amazon Neptune ワイドカラム ⾼スケールの業界アプリケーション、設備のメンテナンス、多数の装置の管理、ルートの最適化 Amazon Keyspaces タイムシリーズ モノのインターネット (IoT) アプリケーション、DevOps、産業⽤テレメトリ Amazon Timestream
  31. 42 ©MIXI Google Cloud データベース https://cloud.google.com/products/databases?hl=ja より データベースの種類 GOOGLE CLOUD

    サービス 説明 リレーショナル Cloud SQL 最も柔軟なフルマネージドデータベースサービス AlloyDB for PostgreSQL 優れたパフォーマンス、可⽤性、拡張性を提供する、100% PostgreSQL 互換のデータベース Spanner 常時稼働、グローバルに⼀貫性のある、マルチモデル、事実上無制限のスケールのデータベース NoSQL Bigtable ⼤規模な⾼スループット、低レイテンシのアプリケーションに最適最も柔軟な NoSQL データベース Spanner Graph 事実上無制限にスケールする Graph データベース Memorystore 完全に管理されたインメモリ データベースサービス ベクターデータベース AlloyDB AI モデル推論⽤のVertex AIなどの AI ツールや、pgvectorや LangChain などのオープンな標準テクノロ ジーと統合 Cloud SQL モデル推論のためにVertex AIと統合され、gen AI アプリを迅速に構築するためのオープンソースの pgvectorをサポート Spanner 正確な最近傍 (KNN) 検索または近似最近傍 (ANN) 検索を使⽤した検索をサポート
  32. 45 ©MIXI グローバル展開 グローバル展開しやすいこともクラウドデータベースの特徴です。 世界中のユーザー ⽇本 北⽶ App DB ⽇本のリージョン

    App DB 北⽶のリージョン スマホとサーバーは 距離的、NW 的に 近いほうが ユーザー体験が良い グローバルスマホアプリの省略図 App と DB も 近いほうが パフォーマンスが良い DB のレプリケーションが必要 - マネージドサービスを使う - ⾃前でレプリケーションする - スキーマ設計を⼯夫する ※ 参考資料:『家族アルバム みてね』 AWSマルチリージョン構成における データベース運用
  33. 46 ©MIXI スケーラビリティ 第2章で紹介したスケールアップ/スケールアウトでは、インスタンスのサイズや数を 増やすことで性能を向上させていました。 クラウドデータベースのなかには、スループットに応じて性能を変化するサービスがあります。 ユーザーアクセスを予測しにくい Web サービスに最適な⽅式です。 Amazon

    DynamoDB の場合 https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/CostOptimization_TableCapacityMode.html より オンデマンドキャパシティモード テーブルへのリクエスト量に応じて性能が変わります。 次のようなケースで使います。 • リクエストの増減が予測できない • リクエスト量が流動的、波が激しい プロビジョンドキャパシティモード 性能を管理者が決めます。または、AutoScaling を使います。 次のようなケースで使います。 • リクエスト予測が可能、周期的 • リクエスト増減が限定的
  34. 47 ©MIXI 料⾦ 商⽤サービスを開発していくにあたり、”コストへの考慮” は避けて通れません。 パフォーマンスが悪いからといってスケールアウト/アップを単純に⾏うと請求で苦しむことになります。 クラウドデータベースの料⾦特性を理解して使うようにしましょう。 料⾦発⽣要素 例 (AWS)

    ▪ Aurora (リレーショナル) インスタンスサイズと台数 ストレージ容量 I/O 発⽣量 バックアップストレージ容量 データ転送量 その他オプションの選択 ▪ DynamoDB (Key-Value) ※ オンデマンドモード 書き込みリクエスト量 読み込みリクエスト量 ストレージ容量 バックアップストレージ容量 リストアしたテーブル容量 データ転送量 その他オプションの選択 ▪ ElastiCache (インメモリ) ※ オンデマンド ノードサイズと台数 バックアップ容量 データ転送量 その他オプションの選択
  35. 48 ©MIXI クラウドデータベースサービスの注意点 モダンな開発ではクラウドデータベースの利⽤が当たり前ですが、注意点もあります。 • コントロールできないクラウドベンダーによるメンテナンス ◦ 機器⽼朽化の対応による再起動 ◦ セキュリティパッチの適⽤による再起動

    ◦ マイナーバージョンアップによる再起動 • DBMS バージョンのサポート ◦ 古いバージョンはサポートが終わると使えなくなる ◦ 新しいバージョンへのアップグレードを計画 • 何事も100%ではない ◦ 予期しないフェールオーバー(障害でインスタンスが切り替わること) ◦ 瞬間的なエラー ◦ トレンド⼊りするような⼤規模障害
  36. 50 ©MIXI ミニクイズ 1 ACID 特性の正しい組み合わせを選んでください。 原⼦性(Atomicity) ⼀貫性(Consistency) 独⽴性(Isolation) 耐久性(Durability)

    トランザクションはお互いに独⽴しており 同時並⾏実⾏される他のトランザクションの影響を受けない トランザクション内の操作は⼀つの単位として扱われ ”全て成功” か ”全てなかったこと” の何れかです トランザクションは、データベースのルールに従い 正しいデータの状態でのみ変更を適⽤する コミットが⾏われるとトランザクションは 永続的に保存される
  37. 51 ©MIXI ミニクイズ2 ❏ CAP 定理に照らし合わせた場合、OLTP、OLAP それぞれで多く⾒られるパターンは 何でしょうか? ❏ データの信頼性と⼀貫性を重視したアプリケーションを構築する計画があります。

    データベースは何を選べば良いでしょうか? ❏ 永続性が必要ではないデータに対して⾼速に読み書きをしたい要件があります。 データベースは何を選べば良いでしょうか? ❏ 先輩社員が「クラウドのマネージドデータベースを使っていれば何もしなくていいか ら楽だよ」と⾔っていました。本当でしょうか? 注意点があれば教えてください。
  38. 52 ©MIXI 休憩 第1章: データベースの基本概念 第2章: 様々なデータベース 第3章: クラウド上のデータベースサービス 第4章:

    データベースの選定とアーキテクチャ 第5章: セキュリティとデータガバナンス 第6章: データベースとAI
  39. 55 ©MIXI 選択に役⽴つ質問 • データはどのように構造化されていますか。 • どのレベルの参照整合性が必要ですか。 • ACID への準拠は必要ですか。

    • ストレージ要件は時間の経過とともにどのように変化しますか。 これにより、スケーラビリティにどのような影響があり ますか。 • 書き込みクエリに対する読み取りクエリの割合はどのくらいですか。 キャッシングによってパフォーマンスが向上する可 能性はありますか。 • OLTP - オンライントランザクション処理 または OLAP - オンライン分析処理 のどちらが優先されますか。 • データにはどのレベルの耐久性が必要ですか。 • 商⽤データベースエンジンやライセンスコストから離れたいという希望はありますか。 • データベースには運⽤上どのようなことが期待されますか。 マネージドサービスへの移⾏は主な懸念事項ですか。 • データベースへのアクセスは現在どのように⾏われていますか。 アプリケーションアクセスのみですか、それともビジネ スインテリジェンス (BI) ユーザーやその他の接続された既製アプリケーションが存在しますか。 https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/performance-efficiency-pillar/perf_data_use_purpose_built_data_store.html より
  40. 56 ©MIXI データベース選定例 AWS 社が公開しているブログからデータベース選定例を学びます。 https://aws.amazon.com/jp/blogs/database/building-a-modern-application-with-purpose-built-aws-databases/?dbd_mod4 使⽤例1 キーバリュー: 製品カタログの使⽤例です。通常、製品には⼀意の識別⼦と 製品名、価格などの属性が含まれています。

    ⼀意のキー検索に強い Amazon DynamoDB を選定しました。 使⽤例2 全⽂検索: 顧客が製品カタログを検索するシステムです。 キーワード検索を効率的に⾏える Amazon OpenSearch Service を選定します。(図中は Amazon Elasticsearch) 使⽤例1 の DynamoDB と同期しています。 使⽤例3 インメモリ: ユーザーが購⼊された書籍の「トップ 20」を確認できる ベストセラーリストです。 ユーザーに検索結果を素早く返すために Amazon ElastiCache を 使⽤します。注⽂が⼊るたびに注⽂テーブルからリアルタイムで 更新が⼊ります。 使⽤例4 グラフ: ソーシャルレコメンデーションです。Amazon Neptune を使って 友達が購⼊したものからオススメを⽣成します。
  41. 57 ©MIXI マイクロサービスとデータベース マイクロサービス毎にデータベースを持ちます。データベース製品はマイクロサービスに 合わせて選択します。サービス間の疎結合と独⽴性を確保します。 ユーザー Front UI Identity Identity

    DB Cart Cart DB Inventory Inventory DB Shipping Shipping DB その他たくさん BI/分析 BI/分析 DB DB間のデータは API で取得 KVS RDB KVS WideColumn ECサイトの省略図 Session InMemory
  42. 58 ©MIXI API 構成例 前のページで「DB間のデータは API で取得」と書きました。 API でデータを操作するアーキテクチャのシンプルな構成例を紹介します。 API

    Gateway Sales DB Order DB User DB User Microservice Sales Microservice Order Microservice API リクエストを 受け付けるサービス。 URI ごとに捌く。 API キャッシュも可能。 /user /sales /order Container, Serverless クエリを代⾏して レスポンスを返す # API仕様書 ## 概要 ## パス /user/v1/search ## メソッド GET ## パラメータ ## レスポンス ### 成功時 ### 失敗時 ## リクエストサンプル ## レスポンスサンプル
  43. 59 ©MIXI コネクションと RDS Proxy アプリケーションから RDB へクエリを発⾏するためにコネクションを張ります。 サーバーレスアプリケーションの場合、多数並列的に起動されるファンクション数だけコネクションが 必要となります。

    DBMS 観点だとコネクションはリソースを消費します。過剰なコネクションはそれだけでDBMS の負荷と なり、全体的なレスポンスを遅くする可能性があります。 RDS Proxy はアプリケーションと DBMS の間に⼊り、コネクションプーリングの役割を果たします。 DB Cluster RDS Proxy 無し ファンクション数の コネクションが必要 RDS Proxy 有り DB Cluster Many Functions Many Functions ファンクションは 多数並列的に起動 プールしている コネクションのうち Available のものを使う Proxy がコネクションを 肩代わりするイメージ
  44. 60 ©MIXI Write と Read を使い分けよう クラウドデータベースサービスの多くは、Write と Read のインスタンスを分離可能です。

    アプリケーションロジックで、更新処理は Writer インスタンスへ、 読み取り処理はReader インスタンスへと振り分けます。 インスタンスの負荷が分散‧軽減され、全体のスループットが改善します。 https://pages.awscloud.com/rs/112-TZM-766/images/01_Amazon%20Aurora%20%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3%E6%A6%82%E8%A6%81.pdf より
  45. 61 ©MIXI シャーディング アーキテクチャの話を少しずれるかもしれませんが、⼤事なテクニックを紹介します。 シャーディングは、⼤規模なデータベースを⼩さな、扱いやすい部分に分割するプロセスです。 これにより、データベースのスケーラビリティとパフォーマンスが向上し、特に書き込みや読み込みの多い アプリケーションにおいて、データ管理の効率を⾼めます。 ⾏No. 名前 1

    Alice ‧‧‧ ‧‧‧ 100万 Bob 名前が A〜I 名前が J〜S 名前が T〜Z ▪ 主なシャーティングの種類 □ 範囲ベース 値の範囲に基づいて分割します。(左の例) □ ハッシュ ハッシュ関数を使って⾏にシャードキーを付与 シャードキーで分割します。 □ ディレクトリ ルックアップテーブルを使⽤して、 どのシャードにデータが存在するかを追跡します。
  46. 63 ©MIXI 分散システムでのロールバック トランザクション 決済App ポイントApp 発送App ポイントDB 発送DB 決済API

    ECサイトで 買い物をする 在庫App 在庫DB 在庫引当 クレカ 決済 ポイント 付与 エラー!! ロールバック 決済App ポイントApp 在庫App ポイント 減算 クレカ 返⾦ 補充
  47. 66 ©MIXI データベースセキュリティの主要概念 • 認証 ◦ ユーザーがデータベースにアクセスする前に、正しい認証資格を持っていることを 要求します。パスワード認証などが代表です。 • 認可

    ◦ 認証されたユーザーに対して、特定リソースへのアクセスを許可‧拒否します。 • アクセス制御 ◦ ユーザーが実⾏できる操作の種類(読み取り、書き込み、更新、削除など)を定義します。 • 暗号化 ◦ 通信時、保管時にデータを暗号化し、不正な盗聴⾏為を防⽌します。 • 監査 ◦ データベースのアクセスログや操作ログを監視し、不審な活動やポリシー違反を検知します。 • データマスキング ◦ 本番環境以外でデータを使う際には、機密データを隠蔽(ダミーに変える)します。 • バックアップ‧リストア ◦ データ損失やデータ損害時に早期の回復をするためにバックアップを取得します。
  48. 67 ©MIXI クラウドの認証 古くからデータベースの認証はパスワードが利⽤されてきました。 ただ、アプリケーションに何らかの形でパスワードを持たす⽅式は、漏洩の可能性を排除できません。 クラウドではシークレットストアを使ってパスワードを保管するようにしましょう。 DB App Secrets Store

    (1) App から Secrets Store にパスワード問い合わせ (2) 許可された App から許可された操作だった場合、 Secrets Store はパスワードを返す (3) App は返されたパスワードでデータベース認証を⾏う ▪ メリット - 開発者がパスワードを知る必要が無い - パスワードの保護をクラウドの IAM で⼀元管理できる - 定期的なパスワード変更を容易に実装できる - パスワード管理をクラウドベンダーにオフロードできる (1) (3) (2)
  49. 69 ©MIXI 最⼩権限の原則 ネットワーク的な制限はかけました。次はデータベースの権限を制限します。 DBMS の権限では、どのテーブルに対してどの操作(INSERT、DELETE、UPDATE など)を 許可するか、という設定を⾏います。 この権限設定は少しだけ難しいので、アプリケーションユーザーに強い権限(全テーブルに全操作OK)を 付与してしまうことが残念ながら多くあります。それはアンチパターンです。

    必要な権限だけを付与するようにしましょう。 クラウド データベースサブネット 管理サブネット パブリックサブネット DB App-A Management App-A にはアプリケーションで使うテーブルに INSERT,UPDATE,DELETE,SELECT を付与 アプリケーションに関係ないテーブルには アクセスさせない 社内管理者 管理者が強い権限を使う場合は 社内ワークフローで承認をもらう 作業時は複数⼈で⾏う
  50. 71 ©MIXI SQL インジェクション SQL インジェクションは、アプリケーションの脆弱性をついて不正な SQL ⽂を混⼊させ、 本来アクセスできないはずのデータにアクセスし、内部侵⼊する攻撃⼿法です。 ID

    PW Login ▪ 本来の挙動 SELECT id FROM USER_TABLE WHERE id = $ID and password = $PW; id と password が⼀致すると TRUE になってログイン成功 ID に⼊⼒した値が $ID、 PW に⼊⼒した値が $PW の変数で SQL ⽂に渡される ▪ SQL インジェクション Web 画⾯の ID に 「1′ OR 1=1;」と⼊⼒すると、 SELECT id FROM USER_TABLE WHERE id = 1 OR 1=1; and password = $PW; 必ず TRUE になってしまいログインされてしまう
  51. 72 ©MIXI SQL インジェクションの対策 SQL インジェクションは対策⽅法が開⽰されています。 アプリケーションで必ず対策を⾏いましょう。 • SQL⽂の組み⽴ては全てプレースホルダで実装する。 •

    SQL⽂の組み⽴てを⽂字列連結により⾏う場合は、 エスケープ処理等を⾏うデータベースエンジンのAPIを⽤いて、SQL⽂のリテラルを正しく構成する。 • ウェブアプリケーションに渡されるパラメータにSQL⽂を直接指定しない。 • SQL インジェクションに対応したフレームワークを使う。 • 前段のロードバランサー等に WAF を設置する。 https://www.ipa.go.jp/security/vuln/websecurity/sql.html より
  52. 74 ©MIXI データベースとAI 第6章ではデータベースと AI の関わりについて話します。 データベースと AI の統合がもたらす可能性について理解を深めます。 世の中の

    IT システムには既に AI を活⽤したものが数多く存在します。 それらがデータベースをどのように使っているのかは、興味深い題材です。 また、DBMS(データベースマネジメントシステム)⾃体にも AI が組み込まています。 それらの製品を知り、今後のシステム開発に活かしてもらえれば嬉しいです。
  53. 76 ©MIXI ベクトルデータベースの実践的ユースケース ベクトルデータベースのユースケースを紹介します。 • パーソナライズされたレコメンデーション ◦ 顧客の閲覧履歴や購買データなどのデータをベクトル化し、リアルタイムで ユーザーに最適な商品を推薦します。 •

    ⾼度なセマンティック検索: ◦ ⽂書データや画像をベクトル化し、意味的に類似した情報を検索します。 • RAG(検索拡張⽣成) ◦ ドメイン固有の知識を活⽤し、ハルシネーションを減少させます。 • リアルタイム分析 ◦ IoTセンサーデータのような複雑なデータをリアルタイムで分析し、異常検知や詐 欺防⽌に役⽴てます。 • 不正検知 ◦ データのつながりから⽭盾を発⾒し、不正リスクを軽減します。
  54. 77 ©MIXI NoSQLデータベースとAI NoSQLデータベースは、その設計思想と特性により、AI に特に適しています。 • 柔軟なデータ構造とスキーマレス設計 ◦ スキーマレスの特性により、AI で必要な多様なデータを扱えます。

    • 多様なデータ形式の処理能⼒ ◦ ⾮構造化、半構造化データに対応 • 優れたスケーラビリティと分散処理 ◦ ⼤量のリクエストを処理するために NoSQL のスケーラビリティが必須 • ⾼速データ処理、リアルタイムデータ処理の対応 ◦ NoSQL の低レイテンシーと⾼スループットは AI と相性が良い
  55. 78 ©MIXI データベース管理の⾃動化とAI DBMS にも AI が組み込まれている製品があり、管理タスクの効率化を実現しています。 【例】 • データベースのプロビジョニング、パッチ適⽤、トラブルシューティングなどの

    管理タスクに関するガイダンスをチャットボットで提供 • データベースから SQL でデータを抽出、抽出されたデータを基に機械学習を実施、 ⽣成されたモデルを使った推論が可能 • Text-to-SQL: ⾃然⾔語で表現されたクエリを SQL ⽂へ変換 「先⽉の◯◯と△△の売上を教えて」 → 「SELECT …」
  56. 80 ©MIXI ミニクイズ 3 次の問に答えてください。 1. データベースへの書き込みより読み込みが多いシステムがあります。 クラウドデータベースで実施できる対策を教えてください。 2. ゲーム内で当⽇の成績

    Top10 を表⽰するスコアボードを作ろうとしています。 採⽤するデータベースとデータの更新⽅法を考えてください。 3. 新しいプロダクトの⽴ち上げに参加しました。アーキテクチャを検討した結果、 データベースの採⽤に2つの選択肢があります。 最終決定を下すためにすることは何でしょう?
  57. 81 ©MIXI ミニクイズ 4 次の問に 正 or 誤 で答えてください。理由も説明してください。 1.

    ソースコードは厳重に管理しており安⼼なので、 データベースパスワードはコード内に書いた。 2. どうしても動かないロジックがあり、デバッグ⽬的で管理者権限を使って データベースを操作した。 3. セキュリティチェックはセキュリティチームの仕事なので、彼らを信頼し、 とにかく動くことを優先してコードを書いた。 4. プログラム開発で使っているツールに脆弱性が⾒つかりパッチが公開された。 セキュリティチームの案内に従ってツールにパッチを適⽤した。