PostgreSQLVSMongoDB
PostgreSQL vs MongoDB
オープンソースのリレーショナルデータベースの王者PostgreSQLと、柔軟なNoSQLドキュメント型のMongoDB。データモデルに応じて正しいデータベースをどう選ぶか?
多目的なインメモリデータ構造
シンプルかつ高速な分散キャッシュ
| カテゴリー | Redis | Memcached |
|---|---|---|
| パフォーマンス | 9/10 | 9/10 |
| 学習のしやすさ | 7/10 | 10/10 |
| エコシステム | 10/10 | 5/10 |
| コミュニティ | 10/10 | 5/10 |
| 求人市場 | 9/10 | 4/10 |
| 将来性 | 9/10 | 4/10 |
// Redis — キャッシュとpub/sub (Node.js ioredis)
import Redis from 'ioredis';
const redis = new Redis(process.env.REDIS_URL);
// TTL付きキャッシュ
async function getUserCached(userId: string) {
const cached = await redis.get(`user:${userId}`);
if (cached) return JSON.parse(cached);
const user = await db.users.findById(userId);
await redis.setex(`user:${userId}`, 3600, JSON.stringify(user));
return user;
}
// ソート済みセットによるリーダーボード
await redis.zadd('leaderboard', 1500, 'ali');
await redis.zadd('leaderboard', 2300, 'ayse');
const top10 = await redis.zrevrange('leaderboard', 0, 9, 'WITHSCORES');
// レート制限
const key = `rate:${ip}`;
const count = await redis.incr(key);
if (count === 1) await redis.expire(key, 60);
if (count > 100) throw new Error('Çok fazla istek');// Memcached — シンプルなキャッシュ (Node.js memjs)
import Memcached from 'memjs';
const client = Memcached.Client.create(
process.env.MEMCACHIER_SERVERS!,
{
username: process.env.MEMCACHIER_USERNAME,
password: process.env.MEMCACHIER_PASSWORD
}
);
// データキャッシュ (TTL: 1時間)
async function getPageCached(path: string) {
const { value } = await client.get(path);
if (value) return value.toString();
const html = await renderPage(path);
await client.set(path, html, { expires: 3600 });
return html;
}
// キャッシュをクリア
await client.delete('home-page');新規プロジェクトにおいては、ほぼ常にRedisがより優れた選択です。豊富なデータ構造、永続化オプション、活発なエコシステムでMemcachedをリードしています。Memcachedは、既存インフラへの投資がある場合や、非常にシンプルな純粋キャッシュ用途に限り、その価値を保っています。
無料相談を受けるシンプルなkey-valueのget/set操作では、両者はほぼ同等の性能を示します。並列接続負荷が高い場合はMemcachedのマルチスレッドアーキテクチャが有利です。実運用における差はほぼ無視できるレベルです。