원클릭으로
managed-databases
DigitalOcean Managed Database provisioning and connection patterns
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
DigitalOcean Managed Database provisioning and connection patterns
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Google File Search API patterns for managed RAG with Gemini. Covers both TypeScript (@google/genai) and Python (google-genai) SDKs. Use when building File Search integrations, implementing RAG with Google AI, or when user mentions Google File Search, Gemini RAG, document indexing, or semantic search.
BullMQ queue configuration patterns including connection pooling, job options, rate limiting, and TypeScript types. Use when setting up queues or configuring job behavior.
BullMQ worker implementation patterns including job processors, concurrency, error handling, and graceful shutdown. Use when creating workers or handling job processing.
DigitalOcean networking patterns - VPCs, firewalls, load balancers, DNS
DigitalOcean Spaces (S3-compatible) object storage patterns
LangGraph checkpointing patterns for state persistence with memory, SQLite, and Postgres backends. Use when implementing state recovery or human-in-the-loop workflows.
| name | managed-databases |
| description | DigitalOcean Managed Database provisioning and connection patterns |
# Create production cluster
doctl databases create prod-pg \
--engine pg \
--version 16 \
--region nyc1 \
--size db-s-2vcpu-4gb \
--num-nodes 2 \
--private-network-uuid <vpc-id>
Node.js (pg):
import { Pool } from 'pg';
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: true,
ca: process.env.DATABASE_CA_CERT,
},
max: 20,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000,
});
// Query
const { rows } = await pool.query('SELECT * FROM users WHERE id = $1', [id]);
// Transaction
const client = await pool.connect();
try {
await client.query('BEGIN');
await client.query('INSERT INTO users(name) VALUES($1)', ['John']);
await client.query('COMMIT');
} catch (e) {
await client.query('ROLLBACK');
throw e;
} finally {
client.release();
}
Python (psycopg2):
import psycopg2
from psycopg2.extras import RealDictCursor
conn = psycopg2.connect(
os.environ['DATABASE_URL'],
sslmode='require',
sslrootcert='ca-certificate.crt',
cursor_factory=RealDictCursor
)
with conn.cursor() as cur:
cur.execute("SELECT * FROM users WHERE id = %s", (user_id,))
user = cur.fetchone()
Prisma:
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
Drizzle:
import { drizzle } from 'drizzle-orm/node-postgres';
import { Pool } from 'pg';
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
ssl: { rejectUnauthorized: true },
});
export const db = drizzle(pool);
# Create connection pool
doctl databases pool create <cluster-id> app-pool \
--db myapp_production \
--user app_user \
--mode transaction \
--size 25
doctl databases create prod-cache \
--engine valkey \
--version 7 \
--region nyc1 \
--size db-s-1vcpu-2gb \
--num-nodes 1
Node.js (ioredis):
import Redis from 'ioredis';
const redis = new Redis(process.env.REDIS_URL, {
tls: { rejectUnauthorized: true },
maxRetriesPerRequest: 3,
retryDelayOnFailover: 100,
});
// String operations
await redis.set('key', 'value', 'EX', 3600);
const value = await redis.get('key');
// Hash operations
await redis.hset('user:1', { name: 'John', email: 'john@example.com' });
const user = await redis.hgetall('user:1');
// Pub/Sub
redis.subscribe('events');
redis.on('message', (channel, message) => {
console.log(channel, message);
});
// Caching pattern
async function getCached<T>(
key: string,
fetcher: () => Promise<T>,
ttl = 3600
): Promise<T> {
const cached = await redis.get(key);
if (cached) return JSON.parse(cached);
const data = await fetcher();
await redis.set(key, JSON.stringify(data), 'EX', ttl);
return data;
}
Python (redis-py):
import redis
r = redis.Redis.from_url(
os.environ['REDIS_URL'],
ssl_cert_reqs='required',
decode_responses=True
)
r.set('key', 'value', ex=3600)
value = r.get('key')
doctl databases create prod-mongo \
--engine mongodb \
--version 7 \
--region nyc1 \
--size db-s-2vcpu-4gb \
--num-nodes 3
Node.js:
import { MongoClient } from 'mongodb';
const client = new MongoClient(process.env.MONGODB_URL, {
tls: true,
tlsCAFile: 'ca-certificate.crt',
});
await client.connect();
const db = client.db('myapp');
const users = db.collection('users');
// CRUD
await users.insertOne({ name: 'John', email: 'john@example.com' });
const user = await users.findOne({ email: 'john@example.com' });
await users.updateOne({ _id: user._id }, { $set: { name: 'Jane' } });
await users.deleteOne({ _id: user._id });
// Aggregation
const results = await users
.aggregate([
{ $match: { status: 'active' } },
{ $group: { _id: '$role', count: { $sum: 1 } } },
])
.toArray();
doctl databases create prod-mysql \
--engine mysql \
--version 8 \
--region nyc1 \
--size db-s-2vcpu-4gb \
--num-nodes 2
Node.js (mysql2):
import mysql from 'mysql2/promise';
const pool = mysql.createPool({
uri: process.env.DATABASE_URL,
ssl: { ca: process.env.DATABASE_CA_CERT },
waitForConnections: true,
connectionLimit: 10,
});
const [rows] = await pool.execute('SELECT * FROM users WHERE id = ?', [id]);
doctl databases create prod-kafka \
--engine kafka \
--version 3.6 \
--region nyc1 \
--size db-s-2vcpu-4gb \
--num-nodes 3
Node.js (kafkajs):
import { Kafka } from 'kafkajs';
const kafka = new Kafka({
clientId: 'my-app',
brokers: [process.env.KAFKA_BROKER],
ssl: { ca: [process.env.KAFKA_CA_CERT] },
sasl: {
mechanism: 'scram-sha-256',
username: process.env.KAFKA_USERNAME,
password: process.env.KAFKA_PASSWORD,
},
});
// Producer
const producer = kafka.producer();
await producer.connect();
await producer.send({
topic: 'events',
messages: [
{ key: 'key', value: JSON.stringify({ type: 'user.created', data: {} }) },
],
});
// Consumer
const consumer = kafka.consumer({ groupId: 'my-group' });
await consumer.connect();
await consumer.subscribe({ topic: 'events', fromBeginning: true });
await consumer.run({
eachMessage: async ({ topic, partition, message }) => {
console.log(JSON.parse(message.value.toString()));
},
});
| Use Case | PostgreSQL | Redis | MongoDB |
|---|---|---|---|
| Development | db-s-1vcpu-1gb | db-s-1vcpu-1gb | db-s-1vcpu-1gb |
| Small Production | db-s-2vcpu-4gb | db-s-1vcpu-2gb | db-s-2vcpu-4gb |
| Medium Production | db-s-4vcpu-8gb | db-s-2vcpu-4gb | db-s-4vcpu-8gb |
| High Traffic | db-s-8vcpu-16gb | db-s-4vcpu-8gb | db-s-8vcpu-16gb |