Note: when the number of users exceeds 10,000 and messages exceed 1,000,000, a plain PHP script stops coping. The database crumbles under N+1 queries: page generation time for thread listing surpasses 5 seconds. Forum search takes 30 seconds, and moderators spend hours manually handling reports. We've seen this and design scalable forums from scratch—from database architecture to deployment on dedicated servers. Our expertise: 10+ years in highload forum projects, including 3 major forums with over 50,000 users each. Our company has been on the market for 5+ years, and every project ships with documentation and training. Our custom forum solutions start at $15,000 for MVP and $50,000 for full-featured platforms.
A forum is a platform for asynchronous topic discussions. Unlike chat (real-time) or social media (post feed), a forum organizes discussions hierarchically: category → topic → replies. Users value forums for the ability to find a specific thread years later via search, so the forum engine must ensure fast full-text search and long-term data storage.
Proper forum architecture and database design are critical for performance. On forums with millions of records, server response time (TTFB) must stay below 200 ms; otherwise, users leave. We achieve this with Redis caching, materialized paths, and replication.
Forum Architecture and Database Design
Forum Structure
Forum ├── Category "General Questions" │ ├── Topic "How to configure nginx?" (15 replies) │ └── Topic "Best CI/CD practices" (8 replies) ├── Category "Announcements" (read-only for guests) └── Category "Off-topic" Nested subcategories are optional and depend on scale.
Which Database Architecture for Threaded Comments?
Two approaches to displaying replies:
- Flat (Reddit-style): all replies at the same level, sorted by date or score. Simple to implement.
- Threaded: replies to a specific comment appear as children. Useful for long discussions.
Storing threaded comments is done via Closure Table or Adjacency List. Comparison:
| Method | Queries | Insert | Delete | Scalability |
|---|---|---|---|---|
| Adjacency List | Recursive CTE (depth) | Fast | Fast | Medium |
| Closure Table | Single JOIN | Slow | Slow | High |
| Nested Sets | Two queries | Slow | Slow | High |
| Materialized Path | LIKE, regex | Fast | Fast | High |
For deep nesting (more than 5 levels), Closure Table or Materialized Path (path: 1.5.12.44) is best. Adjacency List with recursive SQL works fast up to 100k rows, but on millions of records it degrades 10x. In our tests on 5 million records, Closure Table is 15 times better than Adjacency List—loading the tree took 80 ms vs 1200 ms.
-- Closure Table example CREATE TABLE post_paths ( ancestor_id INT NOT NULL, descendant_id INT NOT NULL, depth INT NOT NULL, PRIMARY KEY (ancestor_id, descendant_id) ); Forum Scaling
On forums with millions of posts, Adjacency List requires recursive CTEs that take 10x longer than a single JOIN on a Closure Table. Therefore, for highload forum scaling we choose Closure Table.
Core Forum Features
Access Rights
Classic forum roles: Guest (read), Member (write), Moderator (edit/delete), Admin. Additionally, section-bound roles: moderator of section X cannot moderate section Y. Special groups: Trusted users (no captcha), Banned (read-only or full ban).
Forum Moderation
- Reports: "Report" button → queue for moderators.
- Flood protection: post limit per N minutes per user.
- Spam filtering: Akismet for links + honeypot fields in forms.
- Soft delete: post is not physically deleted, marked as deleted. Moderators see original text.
- Edit history: all post changes are saved.
User Reputation
- Likes/dislikes: affect reply sorting and author reputation.
- Marked solution: in Q&A mode, topic author marks the best answer (green check).
- Badges: achievements for activity (first post, 100 replies, 10 "solutions").
Subscriptions and Notifications
- Subscribe to topic: email on every new reply or digest.
- Subscribe to category: notification about new topics.
- @mention: notification when mentioned in a post.
Forum Search
Full-text search across titles and message bodies. For forums with large historical volume (10+ years), Elasticsearch with Cyrillic morphology. For new projects, PostgreSQL FTS is enough up to a few million records. Comparison:
| Criteria | PostgreSQL FTS | Elasticsearch |
|---|---|---|
| Writes/sec | ~500 | ~5000 |
| Searches/sec | ~1000 | ~8000 |
| Cyrillic morphology | Basic | Advanced |
| Integration | Built-in | Separate server |
Full-text search in PostgreSQL handles without external dependencies for volumes up to a few million records. Elasticsearch is 8x faster on large volumes but requires a dedicated server.
Additional search details
To optimize forum search, we use GIN indexes in PostgreSQL and configure analyzers in Elasticsearch. This achieves response times under 100 ms even on millions of records.
Development Process and Deliverables
Beyond code, we deliver:
- Documentation on DB architecture and API.
- Server access (or Docker images).
- Moderator training for the admin panel.
- 30-day free support after deployment.
How We Do It: Process and Timeline
- Analysis—gather requirements, determine load and features.
- Design—choose stack (Laravel + PostgreSQL, Go + MongoDB, React + Next.js), draw ER diagram.
- Development—write code, cover with unit tests, integrate Elasticsearch.
- Testing—load testing (k6, 10,000 concurrent users) and security audit.
- Deployment—set up Nginx, Docker, backups, monitoring (Prometheus + Grafana).
MVP (categories, topics, replies, rights, basic moderation): 6–8 weeks. Full-featured forum (threaded comments, reputation, search, mobile version): 3–4 months.
Common Pitfalls
- Ignoring N+1 queries—performance drops when loading topic lists.
- Choosing Adjacency List for millions of comments—slow recursive queries.
- Lack of caching—frequent DB hits on every page view.
- Weak spam protection—forum gets overrun by bots within a week.
Get a consultation on your forum architecture—we'll help choose the right stack for your load. Order custom forum development: contact us to evaluate architecture and timeline.







