WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Coding Interview Essentials · Designing Real-World Systems · question 112 of 120

How would you design a real-time comment system like Reddit or Quora?

📕 Buy this interview preparation book: 120 Coding Interview Essentials questions & answers — PDF + EPUB for $5

Designing a real-time comment system involves various components including database architecture, caching, APIs, real-time messaging, and notification service. Here’s a high-level design:

**Database Design:**

We can use a relational DB like SQL or a NoSQL DB like MongoDB as per our requirements.

- User: UserId (Primary Key), Name, Email, Password

- Post: PostId (Primary Key), Body, CreatedAt, UserId (Foreign Key)

- Comment: CommentId (Primary Key), Body, CreatedAt, UserId (Foreign Key), PostId (Foreign Key)

- Reply: ReplyId (Primary Key), Body, CreatedAt, UserId (Foreign Key), CommentId (Foreign Key)

**Caching:**

To reduce database load, we could use a caching system like Redis. Frequently accessed data could be cached and data that changes often will be updated in the cache and the database.

**APIs:**

- ‘createComment‘: To submit a new Comment.

- ‘editComment‘: To edit an existing Comment.

- ‘deleteComment‘: To delete a Comment.

- ‘getComments‘: To retrieve Comments for a Post, might include pagination.

**Real-time Commenting and Notification System:**

For real-time commenting, WebSocket can be used. WebSocket provides bidirectional communication between the server and the client. Whenever a new update is available, it is directly pushed to the connected clients.

**Scaling:**

To handle large-scale data, horizontal scaling (sharding the database) could be introduced. Load balancers can be used for distributing traffic.

Now, let’s discuss some additional optimization and scaling techniques.

**1. Database Denormalization & Indexing:**

Database queries could be slow if there are millions of comments on a post. To handle this, we can denormalize our database and keep the count of comments and recent comments data with the post info.

Post: PostId, Body, CreatedAt, UserId, CommentCount, RecentComments

Indexing on PostId, CommentedAt, and UserId columns will make our queries faster.

**2. Sharding:**

We can distribute our data across multiple databases based on PostId. We can use Consistent Hashing for distribution. Hence, if a new shard is added or an existing one is removed, we only need to reorganize a minimal amount of data.

**3. Caching of Top or Trending Posts/Comments:**

Frequently accessed posts/comments should be cached. While generating the news feed, we can check in the cache if the top/trending posts are available - if so, serve from cache, else query the DB and store it in the cache for future requests.

**4. Load Balancing:**

Load balancing should be used to distribute the network traffic across multiple servers. We can leverage Round Robin, Least connections or IP Hash methods for distribution. In the case of web socket servers, Sticky sessions should be used to ensure a user is always directed to the same server he opened a socket connection with.

The above suggestions form a high-level design of the system and can be further detailed and optimized based on specific use cases or requirements.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Coding Interview Essentials interview — then scores it.
📞 Practice Coding Interview Essentials — free 15 min
📕 Buy this interview preparation book: 120 Coding Interview Essentials questions & answers — PDF + EPUB for $5

All 120 Coding Interview Essentials questions · All topics