EXERCISE 90分

ストーリー

佐藤CTO
これがMonth 6の集大成だ
佐藤CTO
ヘルスケア分析プラットフォームのデータアーキテクチャを一から設計してほしい

シナリオ

企業: ヘルスケアスタートアップ「HealthData」
目的: 病院・クリニック向けデータ分析プラットフォーム
データソース:
  - 電子カルテ(EMR): 日次バッチ
  - IoTデバイス(バイタルサイン): リアルタイムストリーム
  - 処方データ: 日次バッチ
  - 保険請求データ: 月次バッチ
規模: 100病院、患者500万人
規制: 個人情報保護法、医療情報ガイドライン

Part 1: データモデリング(20分)

解答例

運用DB(OLTP): PostgreSQL

テーブル主要カラム特徴
patientsid, name_encrypted, dob_encrypted, hospital_idPIIは暗号化
vital_signsid, patient_id, type, value, timestampTimescaleDB拡張
prescriptionsid, patient_id, drug_id, dosage, date処方履歴

分析DB(OLAP): BigQuery / Redshift

  • Star Schema: ファクトテーブル(診療、処方)+ ディメンション(患者匿名化、病院、薬剤、時間)
  • 患者データは匿名化IDに変換

Part 2: パイプライン設計(20分)

解答例
graph LR
    subgraph Batch["バッチパイプライン(日次/月次)"]
        SRC["EMR / 処方 / 保険"] --> S3R["S3<br/>(Raw)"] --> SPARK["Spark ETL"] --> S3P["S3<br/>(Processed)"] --> DWH["DWH"]
    end

    subgraph Stream["ストリームパイプライン"]
        IOT["IoTデバイス"] --> KFK["Kafka"] --> FLK["Flink"]
        FLK --> TS["TimescaleDB<br/>(リアルタイム)"]
        FLK --> S3A["S3<br/>(アーカイブ)"]
    end

    subgraph Quality["データ品質"]
        GE["Great Expectations<br/>バリデーション"]
    end

    style Batch fill:#e8f5e9,stroke:#2e7d32
    style Stream fill:#e3f2fd,stroke:#1565c0
    style Quality fill:#fff3e0,stroke:#e65100

Part 3: ガバナンスとプライバシー(20分)

解答例
領域設計
匿名化分析データはk-匿名性(k=10)を適用
アクセス制御病院ごとのRLS、ロールベースアクセス
暗号化AES-256(静止データ)、TLS 1.3(通信)
監査ログ全データアクセスを記録、90日保持
データカタログApache Atlas で全データセットのメタデータ管理
データ保持生データ7年、匿名化データ無期限

Part 4: 移行計画(15分)

解答例
Phase期間内容
11ヶ月5病院でパイロット(バッチのみ)
22ヶ月20病院に拡大、ストリーム追加
33ヶ月全100病院展開

各フェーズでの検証: データ品質スコア > 95%、レイテンシ SLA達成


Part 5: アーキテクチャ全体図(15分)

解答例
graph LR
    subgraph Sources["データソース"]
        EMR["EMR<br/>(バッチ)"]
        IOT["IoT<br/>(ストリーム)"]
        RX["処方<br/>(バッチ)"]
        INS["保険<br/>(月次)"]
    end

    subgraph Ingestion["インジェスション"]
        S3R["S3 Raw Zone"]
        KFK["Kafka"]
    end

    subgraph Processing["処理"]
        SPARK["Spark ETL"]
        FLINK["Flink"]
    end

    subgraph Serving["サービング"]
        DWH["DWH<br/>(Redshift)"]
        TSDB["TimescaleDB"]
        BI["BI Dashboard<br/>(Grafana / Metabase)"]
    end

    EMR --> S3R
    RX --> S3R
    INS --> S3R
    IOT --> KFK

    S3R --> SPARK --> DWH
    KFK --> FLINK --> TSDB

    DWH --> BI
    TSDB --> BI

    style Sources fill:#f3e5f5,stroke:#6a1b9a
    style Ingestion fill:#e3f2fd,stroke:#1565c0
    style Processing fill:#fff3e0,stroke:#e65100
    style Serving fill:#e8f5e9,stroke:#2e7d32

まとめ

ポイント内容
モデリングOLTP/OLAPを分離、PIIは暗号化
パイプラインバッチ+ストリームのLambdaアーキテクチャ
ガバナンス匿名化、RLS、監査ログで医療データを保護
移行段階的ロールアウトで検証しながら展開

チェックリスト

  • データモデルを設計できた
  • バッチ/ストリームパイプラインを設計できた
  • ガバナンスとプライバシーを設計できた
  • 移行計画を策定できた
  • アーキテクチャ全体図を描けた

次のステップへ

最後は卒業クイズです。


推定読了時間: 90分