Skip to main content
Monkeytype uses a combination of MongoDB for persistent storage and Redis for caching and real-time leaderboards.

Database Overview

MongoDB (Primary Database)

Location: backend/src/dal/ (Data Access Layer)

Redis (Cache & Leaderboards)

Location: backend/src/init/redis.ts

MongoDB Architecture

Database Connection

backend/src/init/db.ts
Connection pooling:
  • Max pool size: 100 connections
  • Min pool size: 10 connections
  • Idle timeout: 30 seconds

Collections Overview

Monkeytype uses the following MongoDB collections:

Core Data Models

Users Collection

Schema location: @monkeytype/schemas/users DAL location: backend/src/dal/user.ts:43
Key operations:
backend/src/dal/user.ts:82
Indices:

Results Collection

Schema location: @monkeytype/schemas/results DAL location: backend/src/dal/result.ts:14
Key operations:
backend/src/dal/result.ts:17
Indices:

Configs Collection

DAL location: backend/src/dal/config.ts
Operations:

Presets Collection

DAL location: backend/src/dal/preset.ts
Operations:

ApeKeys Collection

DAL location: backend/src/dal/ape-keys.ts
Operations:

Redis Architecture

Redis Connection

backend/src/init/redis.ts:75

Redis Data Structures

1. Leaderboards (Sorted Sets)

Custom Lua script for atomic leaderboard updates:
backend/src/init/redis.ts:10

2. Configuration Cache

3. Rate Limiting

4. Session Storage

Leaderboard DAL

DAL location: backend/src/dal/leaderboards.ts

Data Relationships

Data Backup & Migration

MongoDB Backup

Redis Persistence

Performance Optimization

Database Indices

backend/src/dal/leaderboards.ts:18

Query Optimization

Redis Caching Strategy

Next Steps