LESSON 25分

ストーリー

「ユーザーのセッション情報をRDBに入れてるのか? 毎秒数千回のRead/Writeでデッドロックが頻発するのは当然だ」

高橋アーキテクトが状況を見て言う。

「すべてのデータをRDBに入れる必要はない。NoSQLはRDBの代替ではなく、補完だ。データの特性に合わせてストレージを選ぶ。それがポリグロットパーシステンスだよ」


NoSQLとは

NoSQL(Not Only SQL)は、RDB以外のデータストアの総称。スキーマレス、水平スケーラビリティ、特定のデータモデルへの最適化が特徴。

4つの主要カテゴリ

NoSQL
├── Key-Value Store(KVS)
├── Document Store
├── Column-Family Store
└── Graph Database

Key-Value Store(KVS)

キーと値のペアで格納。最もシンプルで高速。

Key: "session:abc123"  →  Value: {"userId": 1, "cart": [...]}
Key: "cache:user:1"    →  Value: {"name": "田中", "email": "..."}

代表的なKVS

プロダクト特徴用途
Redisインメモリ、データ構造豊富キャッシュ、セッション、キュー
Memcachedインメモリ、シンプル純粋なキャッシュ
DynamoDBマネージド、スケーラブルサーバーレスアプリ

TypeScript での使用例

import Redis from 'ioredis';

const redis = new Redis();

// セッション管理
await redis.set('session:abc123', JSON.stringify({
  userId: 1,
  loginAt: new Date().toISOString(),
}), 'EX', 3600); // 1時間で期限切れ

const session = JSON.parse(await redis.get('session:abc123') ?? '{}');

Document Store

JSONライクなドキュメントで格納。柔軟なスキーマ、ネストした構造を自然に表現。

{
  "_id": "user_001",
  "name": "田中太郎",
  "addresses": [
    { "type": "home", "city": "東京", "zip": "100-0001" },
    { "type": "work", "city": "横浜", "zip": "220-0001" }
  ],
  "preferences": {
    "language": "ja",
    "notifications": true
  }
}

代表的なDocument Store

プロダクト特徴用途
MongoDB最も普及、豊富なクエリ汎用アプリ、CMS
Firestoreリアルタイム同期モバイルアプリ
CouchDBオフライン同期分散環境

Column-Family Store

列指向でデータを格納。大量データの集計・分析に最適。

Row Key: "user_001"
  Column Family: "profile"
    name: "田中太郎"
    email: "tanaka@example.com"
  Column Family: "activity"
    last_login: "2024-03-15"
    login_count: 142

代表的なColumn-Family Store

プロダクト特徴用途
Cassandra高可用性、線形スケールIoT、時系列データ
HBaseHadoop連携大規模分析
ScyllaDBCassandra互換、高性能リアルタイム分析

Graph Database

ノード(頂点)とエッジ(辺)でデータを格納。関係性の探索に特化。

(田中)--[FOLLOWS]-->(佐藤)
(田中)--[LIKES]-->(記事A)
(佐藤)--[WROTE]-->(記事A)

代表的なGraph Database

プロダクト特徴用途
Neo4j最も普及、Cypher言語ソーシャルグラフ、推薦
Amazon Neptuneマネージドナレッジグラフ
ArangoDBマルチモデル柔軟なグラフ処理

データ特性による選択ガイド

データ特性推奨ストア理由
構造化データ、複雑なJOINRDBACID、制約、SQL
セッション、キャッシュKVS(Redis)高速Read/Write、TTL
柔軟なスキーマ、ネスト構造Document(MongoDB)スキーマレス
大量の時系列データColumn-Family書き込み性能、集計
関係性の探索Graph(Neo4j)多段の関連トラバーサル

ポリグロットパーシステンス

1つのシステムで複数のデータストアを組み合わせる設計思想。

ECサイトの例:
├── 商品カタログ       → MongoDB(柔軟な属性)
├── 注文・決済         → PostgreSQL(トランザクション)
├── セッション・カート  → Redis(高速アクセス)
├── 商品推薦           → Neo4j(関係性の探索)
├── アクセスログ       → Cassandra(大量書き込み)
└── 全文検索           → Elasticsearch(検索エンジン)

まとめ

カテゴリデータモデル強み代表例
KVSキー-値超高速、シンプルRedis
DocumentJSON文書柔軟なスキーマMongoDB
Column-Family列指向大量データ集計Cassandra
Graphノード-エッジ関係性の探索Neo4j

理解度チェックリスト

  • NoSQLの4カテゴリをそれぞれ説明できる
  • データ特性に応じた適切なストアを選択できる
  • ポリグロットパーシステンスの概念を理解している

次のステップ

次のレッスンでは、Document Storeの代表格MongoDBのデータモデリングを深く学ぶ。RDBとは異なるモデリング手法を身につけよう。


推定読了時間: 25分