Skip to main content

Scenario Based Questions

đŸ› ī¸ 16. Scenario-Based Questions (System Design)​

143. Design a chat application database (WhatsApp/Messenger)​

āĻāĻ•āϟāĻŋ āĻšā§āϝāĻžāϟ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϕ⧇ āϰāĻŋāϝāĻŧ⧇āϞ-āϟāĻžāχāĻŽ āϰ⧇āϏāĻĒāĻ¨ā§āϏ (Low Latency) āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ āĻœā§‡āύāĻžāϰ⧇āϟ āĻšāĻ“āϝāĻŧāĻž āĻŦāĻŋāϞāĻŋāϝāĻŧāύ āĻŦāĻŋāϞāĻŋāϝāĻŧāύ āĻŽā§āϝāĻžāϏ⧇āϜ (High Write Throughput) āϏāĻžāĻŽāϞāĻžāϤ⧇ āĻšāϝāĻŧāĨ¤

Database Technology Choices:

  • āχāωāϜāĻžāϰ āĻĒā§āϰ⧋āĻĢāĻžāχāϞ āĻ“ āϰāĻŋāϞ⧇āĻļāύāĻžāϞ āĻĄā§‡āϟāĻž: PostgreSQL āĻŦāĻž MySQLāĨ¤
  • āĻŽā§āϝāĻžāϏ⧇āϜ āĻ¸ā§āĻŸā§‹āϰ: Apache Cassandra (āĻ•āĻžāϰāĻŖ āĻāϰ Write āĻ¸ā§āĻĒāĻŋāĻĄ āĻ…āϏāĻžāϧāĻžāϰāĻŖ āĻāĻŦāĻ‚ āϟāĻžāχāĻŽ-āϏāĻŋāϰāĻŋāϜ āĻĄā§‡āϟāĻž āϰāĻžāĻ–āϤ⧇ āϖ⧁āĻŦ āĻĒāĻžāϰāĻĻāĻ°ā§āĻļā§€) āĻ…āĻĨāĻŦāĻž NoSQL āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āϟ āĻ¸ā§āĻŸā§‹āϰāĨ¤
  • āϏ⧇āĻļāύ āĻ“ āĻ…āύāϞāĻžāχāύ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ: Redis (In-memory key-value store)āĨ¤

How would you handle message history efficiently?​

āĻšā§āϝāĻžāϟ āĻšāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āϰāĻžāĻ–āĻžāϰ āϜāĻ¨ā§āϝ āĻĄāĻžāϟāĻžāĻŦ⧇āϏāϕ⧇ āĻāĻŽāύāĻ­āĻžāĻŦ⧇ āϏāĻžāϜāĻžāϤ⧇ āĻšāϝāĻŧ āϝ⧇āύ āϕ⧁āϝāĻŧ⧇āϰāĻŋ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻļ⧁āϧ⧁ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻšā§āϝāĻžāĻŸā§‡āϰ āĻĄā§‡āϟāĻž āĻĻā§āϰ⧁āϤ āωāϠ⧇ āφāϏ⧇āĨ¤

Cassandra Table Design Example:

CREATE TABLE messages (
conversation_id UUID,
message_id TIMEUUID, -- āĻ…āĻŸā§‹āĻŽā§‡āϟāĻŋāĻ•ā§āϝāĻžāϞāĻŋ āϏāĻŽāϝāĻŧ⧇āϰ āĻ•ā§āϰāĻŽ āϰāĻ•ā§āώāĻž āĻ•āϰ⧇
sender_id UUID,
message_text TEXT,
created_at TIMESTAMP,
PRIMARY KEY (conversation_id, message_id)
) WITH CLUSTERING ORDER BY (message_id DESC);

āĻāĻ–āĻžāύ⧇ conversation_id āĻšāϞ⧋ Partition Key (āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻāĻ•āϟāĻŋ āĻšā§āϝāĻžāĻŸā§‡āϰ āϏāĻŦ āĻŽā§āϝāĻžāϏ⧇āϜ āĻšāĻžāĻ°ā§āĻĄāĻĄāĻŋāĻ¸ā§āϕ⧇āϰ āĻāĻ•āχ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻĨāĻžāĻ•āĻŦ⧇), āφāϰ message_id āĻšāϞ⧋ Clustering Key (āϝāĻž āĻŽā§‡āϏ⧇āϜāϗ⧁āϞ⧋āϕ⧇ āϏāĻŽāϝāĻŧ⧇āϰ āĻ•ā§āϰāĻŽāĻžāύ⧁āϏāĻžāϰ⧇ āϏāĻžāϜāĻžāĻŦ⧇)āĨ¤ āϝāĻ–āύ āχāωāϜāĻžāϰ āĻšā§āϝāĻžāϟāĻŦāĻ•ā§āϏ āĻ–ā§‹āϞ⧇, āϤāĻ–āύ SELECT * FROM messages WHERE conversation_id=X LIMIT 50; āϚāĻžāϞāĻžāϞ⧇ āĻŽā§āĻšā§‚āĻ°ā§āϤ⧇āχ āϞ⧇āĻŸā§‡āĻ¸ā§āϟ ā§Ģā§ĻāϟāĻŋ āĻŽā§āϝāĻžāϏ⧇āϜ āϚāϞ⧇ āφāϏāĻŦ⧇āĨ¤ āχāωāϜāĻžāϰ āĻ“āĻĒāϰ⧇ āϤ⧁āϞāϞ⧇ (Scroll), message_id < Last_Message_ID āϧāϰ⧇ āĻĒ⧇āĻ›āύ⧇āϰ āĻŽā§‡āϏ⧇āϜ āφāύāĻž āĻšāϝāĻŧāĨ¤

How do you implement read receipts?​

āϰāĻŋāĻĄ āϰāĻŋāϏāĻŋāĻĒā§āϟ (Send, Delivered, Seen) āϰāĻŋāϝāĻŧ⧇āϞ-āϟāĻžāχāĻŽā§‡ āĻĒāϰāĻŋāϚāĻžāϞāĻŋāϤ āĻšāϝāĻŧāĨ¤ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āϞ⧇āĻ–āĻžāϰ āφāϗ⧇ āĻāϗ⧁āϞ⧋ āĻŽā§‡āϏ⧇āϜ āĻ•āĻŋāω āĻŦāĻž āĻ•ā§āϝāĻžāĻļ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĻā§āϰ⧁āϤ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāϤ⧇ āĻšāϝāĻŧāĨ¤

  • āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ status (TINYINT: 0=sent, 1=delivered, 2=seen) āĻĢāĻŋāĻ˛ā§āĻĄ āĻĨāĻžāϕ⧇āĨ¤
  • āϝ⧇āĻšā§‡āϤ⧁ āĻāĻ•āχ āĻŽā§‡āϏ⧇āĻœā§‡āϰ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āĻŦāĻžāϰāĻŦāĻžāϰ āφāĻĒāĻĄā§‡āϟ āĻšāϝāĻŧ, āϏāϰāĻžāϏāϰāĻŋ āĻŽā§‡āχāύ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āφāĻĒāĻĄā§‡āϟ āύāĻž āĻ•āϰ⧇ āĻĒā§āϰāĻĨāĻŽā§‡ Redis/Kafka āϤ⧇ āχāϭ⧇āĻ¨ā§āϟ āĻĒāĻžāĻ āĻžāύ⧋ āĻšāϝāĻŧāĨ¤ āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻžāϰ āĻ•āĻŋāϛ⧁ āϏāĻŽāϝāĻŧ āĻĒāϰ āĻĒāϰ āĻŦā§āϝāĻžāϚ (Batch) āĻ•āϰ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏāϕ⧇ āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧇, āϝāĻžāϤ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻ•ā§āĻ°ā§āϝāĻžāĻļ āύāĻž āĻ•āϰ⧇āĨ¤

How to handle group chats vs direct messages?​

  • Direct Messages: āĻĻ⧁āϜāύ āχāωāϜāĻžāϰ⧇āϰ āφāχāĻĄāĻŋāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāĻ•āϟāĻŋ āχāωāύāĻŋāĻ• conversation_id āϤ⧈āϰāĻŋ āĻšāϝāĻŧ (āϝ⧇āĻŽāύ user1_user2)āĨ¤
  • Group Chats: āĻāĻ•āϟāĻŋ āĻŽā§‡āϏ⧇āϜ āϝāĻ–āύ āĻ—ā§āϰ⧁āĻĒ⧇ āφāϏ⧇, āϤāĻ–āύ āϤāĻž āĻ—ā§āϰ⧁āĻĒ⧇āϰ ā§§ā§Ļ āĻšāĻžāϜāĻžāϰ āĻŽā§‡āĻŽā§āĻŦāĻžāϰāϕ⧇ āφāϞāĻžāĻĻāĻž āĻ•āϰ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻĒāĻžāĻ āĻžāύ⧋āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχāĨ¤ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻļ⧁āϧ⧁ āĻāĻ•āĻŦāĻžāϰ āĻŽā§‡āϏ⧇āϜāϟāĻŋ āĻ¸ā§āĻŸā§‹āϰ āĻšāϝāĻŧ (group_id āĻ…āϧ⧀āύ⧇)āĨ¤ āĻāϰāĻĒāϰ āĻāĻ•āϟāĻŋ Pub/Sub (Publish/Subscribe) āĻŦā§āϰ⧋āĻ•āĻžāϰ (āϝ⧇āĻŽāύ Redis Pub/Sub āĻŦāĻž RabbitMQ) āĻ“āχ āĻ—ā§āϰ⧁āĻĒ⧇āϰ āϏāĻ•āϞ āϞāĻžāχāĻ­/āĻ…āύāϞāĻžāχāύ āĻŽā§‡āĻŽā§āĻŦāĻžāϰ⧇āϰ āĻ“āϝāĻŧ⧇āĻŦ-āϏāϕ⧇āϟ (WebSocket) āĻ•āĻžāύ⧇āĻ•āĻļāύ⧇ āĻŽā§‡āϏ⧇āϜāϟāĻŋ āĻŦā§āϰāĻĄāĻ•āĻžāĻ¸ā§āϟ āĻ•āϰ⧇ āĻĻ⧇āϝāĻŧāĨ¤

144. Design a ride-sharing app database (Uber-style)​

āϰāĻžāχāĻĄ āĻļ⧇āϝāĻŧāĻžāϰāĻŋāĻ‚ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇ āϰāĻŋāϝāĻŧ⧇āϞ-āϟāĻžāχāĻŽā§‡ āϚāϞāĻ¨ā§āϤ āĻ—āĻžāĻĄāĻŧāĻŋāϰ āĻŸā§āĻ°ā§āϝāĻžāĻ•āĻŋāĻ‚ āĻāĻŦāĻ‚ āĻĒā§āϝāĻžāϏ⧇āĻžā§āϜāĻžāϰ⧇āϰ āϞ⧋āϕ⧇āĻļāύ āĻŽā§āϝāĻžāϚ āĻ•āϰāĻžāύ⧋ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϜāϟāĻŋāϞ āĻ•āĻžāϜ (Geospatial Data Processing)āĨ¤

Database Technology Choices:

  • āϕ⧋āϰ āĻŸā§āϰāĻžāύāĻœā§‡āĻ•āĻļāύ (āχāωāϜāĻžāϰ, āϰ⧇āϟāĻŋāĻ‚, āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ): PostgreSQL.
  • āϞ⧋āϕ⧇āĻļāύ āĻŸā§āĻ°ā§āϝāĻžāĻ•āĻŋāĻ‚ āĻ“ āĻŽā§āϝāĻžāϚāĻŋāĻ‚: Redis (Geohash) āĻŦāĻž PostgreSQL āĻāϰ PostGIS āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύāĨ¤
  • āĻāύāĻžāϞāĻžāχāϟāĻŋāĻ•ā§āϏ (Historical Data): Hadoop āĻŦāĻž Data WarehouseāĨ¤

How do you handle real-time driver location updates?​

āĻĄā§āϰāĻžāχāĻ­āĻžāϰ āϝāĻ–āύ āϚāϞāϛ⧇, āϤāĻžāϰ āĻ…ā§āϝāĻžāĻĒ āĻĒā§āϰāϤāĻŋ ā§Š-ā§Ē āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡ āϜāĻŋāĻĒāĻŋāĻāϏ āϕ⧋āĻ…āĻ°ā§āĻĄāĻŋāύ⧇āϟ āĻĒāĻžāĻ āĻžāϝāĻŧ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āĨ¤

  • āĻāϟāĻŋ āϏāϰāĻžāϏāϰāĻŋ āĻŽā§‡āχāύ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āϞ⧇āĻ–āĻž āĻāĻ•āĻĻāĻŽ āĻŦā§‹āĻ•āĻžāĻŽāĻŋ, āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āϞāĻ• āĻšāϝāĻŧ⧇ āĻ•ā§āĻ°ā§āϝāĻžāĻļ āĻ•āϰāĻŦ⧇āĨ¤
  • āϤāĻžāχ āϞ⧋āϕ⧇āĻļāύ āφāĻĒāĻĄā§‡āϟāϗ⧁āϞ⧋ Redis Geo āĻĄāĻžāϟāĻž āĻ¸ā§āĻŸā§āϰāĻžāĻ•āϚāĻžāϰ⧇ āϞ⧇āĻ–āĻž āĻšāϝāĻŧāĨ¤ Redis āĻŽā§‡āĻŽāϰāĻŋāϤ⧇ āĻĨāĻžāĻ•āĻžāϝāĻŧ āĻāϟāĻŋ āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡ āϞāĻžāĻ– āϞāĻžāĻ– āφāĻĒāĻĄā§‡āϟ āύāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
# Redis āĻ āĻĄā§āϰāĻžāχāĻ­āĻžāϰ⧇āϰ āϞ⧋āϕ⧇āĻļāύ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻžāϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ
GEOADD drivers 90.4125 23.8103 "driver_101"
  • āĻĻā§€āĻ°ā§āϘāĻ¸ā§āĻĨāĻžāϝāĻŧā§€ āϰāĻžāχāĻĄ āĻšāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϰ āϜāĻ¨ā§āϝ, āĻĒā§āϰāϤāĻŋ ā§Šā§Ļ āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āĻŦāĻž ā§§ āĻŽāĻŋāύāĻŋāϟ āĻĒāϰ āĻĒāϰ āĻāχ āϞ⧋āϕ⧇āĻļāύāϗ⧁āϞ⧋ āĻāĻ•āĻ¤ā§āϰ⧇ āĻŦā§āϝāĻžāϚ āĻ•āϰ⧇ Cassandra āĻŦāĻž PostgreSQL-āĻ āϏ⧇āĻ­ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

How do you implement surge pricing?​

Surge Pricing āĻŽā§‚āϞāϤ āϰāĻŋāϝāĻŧ⧇āϞ-āϟāĻžāχāĻŽ āϏāĻžāĻĒā§āϞāĻžāχ āĻāĻŦāĻ‚ āĻĄāĻŋāĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āĻŽā§āϝāĻžāĻĨāĻŽā§‡āϟāĻŋāĻ•āĻžāϞ āĻ•ā§āϝāĻžāϞāϕ⧁āϞ⧇āĻļāύāĨ¤

  • āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻāϞāĻžāĻ•āĻžāϰ (Geo-fence) āϜāĻ¨ā§āϝ Apache Flink āĻŦāĻž Spark Streaming āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āϟāĻžāχāĻŽ-āωāχāĻ¨ā§āĻĄā§‹āϤ⧇ (āϝ⧇āĻŽāύ āĻļ⧇āώ ā§Ģ āĻŽāĻŋāύāĻŋāĻŸā§‡) āĻ•āϝāĻŧāϜāύ āϰāĻžāχāĻĄ āϖ⧁āρāϜāϛ⧇ āĻāĻŦāĻ‚ āĻ•āϝāĻŧāϟāĻŋ āĻ—āĻžāĻĄāĻŧāĻŋ āĻĢā§āϰāĻŋ āφāϛ⧇ āϤāĻžāϰ āĻšāĻŋāϏāĻžāĻŦ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤
  • āϝāĻĻāĻŋ āĻĄāĻŋāĻŽāĻžāĻ¨ā§āĻĄ āϏāĻžāĻĒā§āϞāĻžāχāϝāĻŧ⧇āϰ āĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āĻšāϝāĻŧ, āϤāĻŦ⧇ āĻŽā§‡āĻļāĻŋāύ āϞāĻžāĻ°ā§āύāĻŋāĻ‚ āĻ…ā§āϝāĻžāϞāĻ—āϰāĻŋāĻĻāĻŽ āĻĒā§āϰāĻžāχāϏ āĻŽāĻžāĻ˛ā§āϟāĻŋāĻĒā§āϞāĻžāϝāĻŧāĻžāϰ (āϝ⧇āĻŽāύ 1.5x, 2x) āϏ⧇āϟ āĻ•āϰ⧇ āĻĻ⧇āϝāĻŧ āĻāĻŦāĻ‚ āϏ⧇āϟāĻŋ āϰ⧇āĻĄāĻŋāϏ⧇ āĻ•ā§āϝāĻžāĻļ āĻ•āϰ⧇ āϰāĻžāϖ⧇ āϝ⧇āύ āχāωāϜāĻžāϰ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āĻ•āϰāĻž āĻŽāĻžāĻ¤ā§āϰāχ āĻĒā§āϰāĻžāχāϏ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

How do you match drivers with riders efficiently?​

āĻŽā§āϝāĻžāϚāĻŋāĻ‚āϝāĻŧ⧇āϰ āϜāĻ¨ā§āϝ āĻĒ⧃āĻĨāĻŋāĻŦā§€āϕ⧇ āϛ⧋āϟ āϛ⧋āϟ āĻ—ā§āϰāĻŋāĻĄ āĻŦāĻž āĻŦāĻžāĻ•ā§āϏ⧇ āĻ­āĻžāĻ— āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻāχ āĻŽā§‡āĻ•āĻžāύāĻŋāϜāĻŽā§‡ Geohash (āϝ⧇āĻŽāύ UBER āĻāϰ H3 āĻ…ā§āϝāĻžāϞāĻ—āϰāĻŋāĻĻāĻŽ) āĻŦāĻž Quadtree āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

  • āϝāĻ–āύ āχāωāϜāĻžāϰ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āĻ•āϰ⧇, āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĻ⧇āϖ⧇ āχāωāϜāĻžāϰ āϕ⧋āύ āĻ—ā§āϰāĻŋāĻĄā§‡ āĻŦāĻž āĻœā§‹āύ-āĻ āφāϛ⧇ (āϝ⧇āĻŽāύ "Gulshan")āĨ¤
  • āĻāϰāĻĒāϰ Redis āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āϕ⧁āϝāĻŧ⧇āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ āĻ“āχ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻāϞāĻžāĻ•āĻžāϰ āĻ—ā§āϰāĻŋāĻĄā§‡ āĻĨāĻžāĻ•āĻž āĻĢā§āϰāĻŋ (Idle) āĻĄā§āϰāĻžāχāĻ­āĻžāϰāĻĻ⧇āϰ āϜāĻ¨ā§āϝāĨ¤
# Redis āĻ ⧍ āĻ•āĻŋāϞ⧋āĻŽāĻŋāϟāĻžāϰ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻĨāĻžāĻ•āĻž āĻĄā§āϰāĻžāχāĻ­āĻžāϰāĻĻ⧇āϰ āĻ–ā§‹āρāϜāĻž
GEORADIUS drivers 90.4125 23.8103 2 km
  • āĻāϰāĻĒāϰ āĻĒāĻžāĻ“āϝāĻŧāĻž āĻĄā§āϰāĻžāχāĻ­āĻžāϰāϗ⧁āϞ⧋āϰ āĻ•āĻžāϰ⧇āĻ¨ā§āϟ āĻ¸ā§āĻĒāĻŋāĻĄ āĻāĻŦāĻ‚ āĻŽā§āϝāĻžāĻĒ āϰāĻžāωāϟāĻŋāĻ‚ (Traffic condition) āĻ•ā§āϝāĻžāϞāϕ⧁āϞ⧇āϟ āĻ•āϰ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĻā§āϰ⧁āϤ āĻĒ⧌āρāĻ›āĻžāϤ⧇ āĻĒāĻžāϰāĻž āĻĄā§āϰāĻžāχāĻ­āĻžāϰāϕ⧇ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āĻĒāĻžāĻ āĻžāύ⧋ āĻšāϝāĻŧāĨ¤

145. Design an e-commerce database (Amazon-style)​

āχ-āĻ•āĻŽāĻžāĻ°ā§āϏ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻļāĻžāϞ āĻŽāύ⧋āϞāĻŋāĻĨ āύāϝāĻŧ; āĻāϟāĻŋ āĻ…āϏāĻ‚āĻ–ā§āϝ āϛ⧋āϟ āϛ⧋āϟ āĻŽāĻžāχāĻ•ā§āϰ⧋āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇āϰ (Microservices) āϏāĻŽāĻ¨ā§āĻŦāϝāĻŧ, āϝ⧇āĻ–āĻžāύ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋāϰ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āϰāĻŋāĻ•āϝāĻŧāĻžāϰāĻŽā§‡āĻ¨ā§āϟ āφāϞāĻžāĻĻāĻž āĻĨāĻžāϕ⧇āĨ¤

Database Technology Choices:

  • āĻĒā§āϰ⧋āĻĄāĻžāĻ•ā§āϟ āĻ•ā§āϝāĻžāϟāĻžāϞāĻ— (Inventory Search): Elasticsearch (āĻŸā§‡āĻ•ā§āϏāϟ āϏāĻžāĻ°ā§āĻšā§‡āϰ āϜāĻ¨ā§āϝ) āĻāĻŦāĻ‚ MongoDB (āĻĒā§āϰ⧋āĻĄāĻžāĻ•ā§āĻŸā§‡āϰ āĻŦāĻŋāϚāĻŋāĻ¤ā§āϰ āĻĄāĻžāχāύāĻžāĻŽāĻŋāĻ• āĻāĻŸā§āϰāĻŋāĻŦāĻŋāωāϟ āϰāĻžāĻ–āĻžāϰ āϜāĻ¨ā§āϝ)āĨ¤
  • āĻ…āĻ°ā§āĻĄāĻžāϰ āĻ“ āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ (Transactions): MySQL āĻŦāĻž PostgreSQL (āϝ⧇āĻ–āĻžāύ⧇ ACID āĻ—ā§āϝāĻžāϰāĻžāĻ¨ā§āϟāĻŋ āĻŽāĻžāĻ¸ā§āϟ)āĨ¤
  • āχāωāϜāĻžāϰ āĻ•āĻžāĻ°ā§āϟ āĻ“ āϏ⧇āĻļāύ: Redis.

How do you handle shopping carts and abandoned carts?​

  • āĻļāĻĒāĻŋāĻ‚ āĻ•āĻžāĻ°ā§āϟ: āĻ•āĻžāĻ°ā§āĻŸā§‡āϰ āĻĄā§‡āϟāĻž āϰāĻŋāϝāĻŧ⧇āϞ-āϟāĻžāχāĻŽā§‡ āχāωāϜāĻžāϰ āĻŽāĻŋāύāĻŋāĻŸā§‡ āĻ•āϝāĻŧ⧇āĻ•āĻŦāĻžāϰ āĻšā§‡āĻžā§āϜ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϤāĻžāχ āĻāϟāĻŋāϕ⧇ āĻĒāĻžāϰāĻŽāĻžāύ⧇āĻ¨ā§āϟ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āύāĻž āϞāĻŋāϖ⧇ Redis Key-Value āĻšāĻŋāϏ⧇āĻŦ⧇ āϰāĻžāĻ–āĻž āĻšāϝāĻŧāĨ¤
// Redis āĻ āϏ⧇āĻ­ āĻĨāĻžāĻ•āĻž āχāωāϜāĻžāϰ⧇āϰ āĻ•āĻžāĻ°ā§āϟ 
"cart:user_405": {
"items": [{"prod_id": 101, "qty": 2}, {"prod_id": 105, "qty": 1}],
"updated_at": 1690002100
}
  • āĻāĻŦāĻžāĻ¨ā§āĻĄāύāĻĄ āĻ•āĻžāĻ°ā§āϟ (Abandoned Cart): Redis āĻĄā§‡āϟāĻžāϝāĻŧ āĻāĻ•āϟāĻŋ TTL (Time-To-Live) āϏ⧇āϟ āĻ•āϰāĻž āĻĨāĻžāϕ⧇ (āϝ⧇āĻŽāύ ⧍ā§Ē āϘāĻŖā§āϟāĻž)āĨ¤ āĻāϰ āφāϗ⧇ āχāωāϜāĻžāϰ āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ āύāĻž āĻ•āϰāϞ⧇ āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āϜāĻŦ (Cron) āĻāχ āĻ•āĻžāĻ°ā§āϟ āĻĄā§‡āϟāĻžāϕ⧇ Redis āĻĨ⧇āϕ⧇ āϏāϰāĻŋāϝāĻŧ⧇ āĻĒāĻžāϰāĻŽāĻžāύ⧇āĻ¨ā§āϟ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āϏ⧇āĻ­ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āχāωāϜāĻžāϰāϕ⧇ āχāĻŽā§‡āχāϞ āϰāĻŋāĻŽāĻžāχāĻ¨ā§āĻĄāĻžāϰ āĻĻ⧇āϝāĻŧāĨ¤

How do you manage inventory across multiple warehouses?​

āχ-āĻ•āĻŽāĻžāĻ°ā§āϏ⧇ āĻāĻ•āχ āĻĒā§āϰ⧋āĻĄāĻžāĻ•ā§āϟ āĻ…āύ⧇āϕ⧇āχ āĻ•āĻŋāύāϤ⧇ āϚāĻžāϝāĻŧāĨ¤ āϰ⧇āϏ āĻ•āĻ¨ā§āĻĄāĻŋāĻļāύ (Race Condition) āĻāĻĄāĻŧāĻžāϤ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ Row-level Lock āĻŦāĻž Pessimistic Locking āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

  • āϝāĻ–āύ āϕ⧇āω āĻšā§‡āĻ•āφāωāϟ āĻ•āϰ⧇, āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻ“āχ āĻĒā§āϰ⧋āĻĄāĻžāĻ•ā§āĻŸā§‡āϰ āϰ⧋ (Row) āϕ⧇ āĻĢāϰ-āφāĻĒāĻĄā§‡āϟ āϞāĻ• āĻ•āϰ⧇:
SELECT quantity FROM inventory WHERE product_id=101 FOR UPDATE;
UPDATE inventory SET quantity = quantity - 1 WHERE product_id=101;
  • āĻāϟāĻŋ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧇ āϝ⧇ āχāύāϭ⧇āĻ¨ā§āϟāϰāĻŋ āϝāĻĻāĻŋ ā§§āϟāĻŋ āĻĨāĻžāĻ•āĻž āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϝāĻŧ ⧍ āϜāύ āĻāĻ•āϏāĻžāĻĨ⧇ āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ āĻ•āϰ⧇, āϤāĻŦ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻāĻ•āϜāύāϕ⧇ āĻāϰāϰ āĻĻ⧇āĻŦ⧇ āĻāĻŦāĻ‚ āĻŽāĻžāχāύāĻžāϏ āϕ⧋āϝāĻŧāĻžāĻ¨ā§āϟāĻŋāϟāĻŋāϤ⧇ āĻĒā§āϰ⧋āĻĄāĻžāĻ•ā§āϟ āĻŦāĻŋāĻ•ā§āϰāĻŋ āĻšāĻŦ⧇ āύāĻžāĨ¤

How do you handle product recommendations?​

āϰ⧇āĻ•āĻŽā§‡āĻ¨ā§āĻĄā§‡āĻļāύ āχāĻžā§āϜāĻŋāύ āϏāĻžāϧāĻžāϰāĻŖāϤ Graph Databases (Neo4j) āĻŦāĻž āĻŦāĻŋāĻ— āĻĄā§‡āϟāĻž āĻāύāĻžāϞāĻžāχāϟāĻŋāĻ•ā§āϏ (Apache Spark) āĻāϰ āĻ“āĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇āĨ¤

  • āύ⧋āĻĄ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻĨāĻžāϕ⧇ "User" āĻāĻŦāĻ‚ "Product", āφāϰ āĻāϜ (Edge) āĻšāϝāĻŧ "Viewed", "Purchased"āĨ¤
  • āĻ—ā§āϰāĻžāĻĢ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āϕ⧁āϝāĻŧ⧇āϰāĻŋ āĻšāϝāĻŧ: "āϰāĻšāĻŋāĻŽā§‡āϰ āĻŽāϤ⧋ āĻ…āĻ¨ā§āϝ āχāωāϜāĻžāϰāϰāĻž āϝāĻžāϰāĻž āĻāχ āϜ⧁āϤ⧋āϟāĻŋ āĻĻ⧇āϖ⧇āϛ⧇, āϤāĻžāϰāĻž āφāϰ āϕ⧋āύ āĻĒā§āϝāĻžāĻ¨ā§āϟ āĻ•āĻŋāύ⧇āϛ⧇?" āϏ⧇āχ āĻĒā§āϝāĻžāĻ¨ā§āϟāϗ⧁āϞ⧋āϕ⧇ āĻšā§‹āĻŽ āĻĒ⧇āĻœā§‡ āϏāĻžāĻœā§‡āĻļāύ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻĒāĻžāĻ āĻžāύ⧋ āĻšāϝāĻŧāĨ¤

146. Design a social media platform database (Facebook/Twitter)​

āϏ⧋āĻļā§āϝāĻžāϞ āĻŽāĻŋāĻĄāĻŋāϝāĻŧāĻž āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻĄā§‡āϟāĻžāϰ āĻŸā§āϰāĻžāĻĢāĻŋāĻ• āϰāĻŋāĻĄ (Read)-āĻšā§‡āĻ­āĻŋ āĻšāϝāĻŧ⧇ āĻĨāĻžāϕ⧇ (ā§§ āϜāύ āĻĒā§‹āĻ¸ā§āϟ āĻ•āϰ⧇, ā§§ āϞāĻžāĻ– āĻŽāĻžāύ⧁āώ āĻĻ⧇āϖ⧇)āĨ¤ āϤāĻžāχ āĻšāĻžāχāϞāĻŋ āĻāϭ⧇āχāĻ˛ā§āϝāĻžāĻŦāϞ āĻāĻŦāĻ‚ āĻāϭ⧇āύāϚ⧁āϝāĻŧāĻžāϞ āĻ•āύāϏāĻŋāĻ¸ā§āĻŸā§‡āĻ¨ā§āϟ (Eventual Consistency) āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

How do you implement follow/unfollow efficiently?​

āĻāĻ–āĻžāύ⧇ āĻ—ā§āϰāĻžāĻĢ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŦāĻž āϏāĻŋāĻŽā§āĻĒāϞ āϰāĻŋāϞāĻžāĻļāύāĻžāϞ āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āϜāϝāĻŧ⧇āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤

  • āĻāĻ•āϟāĻŋ RDBMS āĻ āĻŸā§‡āĻŦāĻŋāϞ āĻĨāĻžāĻ•āĻŦ⧇ users āĻāĻŦāĻ‚ āφāϰ⧇āĻ•āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞ follows (follower_id, followee_id)āĨ¤
  • āϰāĻŋāϝāĻŧ⧇āϞ-āϟāĻžāχāĻŽā§‡ "Mutual Friends" āĻŦāĻž "People you may know" āϏāĻžāĻœā§‡āĻ¸ā§āϟ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ Neo4j āϏ⧇āϰāĻž āĻĒāĻ›āĻ¨ā§āĻĻāĨ¤
// Neo4j Query: āϜāύ āĻāϰ āĻŦāĻ¨ā§āϧ⧁āĻĻ⧇āϰ āĻŦāĻ¨ā§āϧ⧁ āĻŦ⧇āϰ āĻ•āϰāĻžāϰ āĻ•ā§ā§Ÿā§‡āϰāĻŋ 
MATCH (john:User {name: 'John'})-[:FRIEND]->(friend)-[:FRIEND]->(fof)
WHERE NOT (john)-[:FRIEND]->(fof)
RETURN fof

How do you generate news feed?​

āύāĻŋāωāϜ āĻĢāĻŋāĻĄ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰāĻž āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻ•āĻ āĻŋāύ āĻ•āĻžāϜāĨ¤ āĻāϟāĻŋ āĻ•āϰāĻžāϰ āĻĻ⧁āϟāĻŋ āĻ…ā§āϝāĻžāĻĒā§āϰ⧋āϚ āφāϛ⧇:

  1. Pull Model (On-Demand): āϝāĻ–āύ āφāĻĒāύāĻŋ āĻĢāĻŋāĻĄ āϞāĻĄ āĻ•āϰ⧇āύ, āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āφāĻĒāύāĻžāϰ āĻĢāϞ⧋ āĻ•āϰāĻž āĻšāĻžāϜāĻžāϰ āĻŽāĻžāύ⧁āώ⧇āϰ āϞ⧇āĻŸā§‡āĻ¸ā§āϟ āĻĒā§‹āĻ¸ā§āϟāϗ⧁āϞ⧋ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻĨ⧇āϕ⧇ āϕ⧁āϝāĻŧ⧇āϰāĻŋ āĻ•āϰ⧇ āĻāύ⧇ āĻ…āĻ°ā§āĻĄāĻžāϰ (Sort) āĻ•āϰ⧇āĨ¤ āϏāĻžāϧāĻžāϰāĻŖ āχāωāϜāĻžāϰāĻĻ⧇āϰ āϜāĻ¨ā§āϝ āĻāϟāĻŋ āĻ•āĻžāϜ āĻ•āϰāϞ⧇āĻ“ āϏ⧇āϞāĻŋāĻŦā§āϰāĻŋāϟāĻŋāĻĻ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻāχ āϕ⧁āϝāĻŧ⧇āϰāĻŋ āĻĄāĻžāϟāĻžāĻŦ⧇āϏāϕ⧇ āĻĢā§āϰāĻŋāϜ āĻ•āϰ⧇ āĻĻ⧇āϝāĻŧāĨ¤
  2. Push Model (Fan-out on Write): āϕ⧇āω āϝāĻ–āύ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āĻĻ⧇āϝāĻŧ, āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻžāϰ (Celery/Sidekiq) āϏ⧇āχ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏāϟāĻŋāϕ⧇ āϤāĻžāϰ āϏāĻ•āϞ āĻĢāϞ⧋āϝāĻŧāĻžāϰ⧇āϰ āĻĒā§āϰāĻŋ-āĻ•āĻŽā§āĻĒāĻŋāωāĻŸā§‡āĻĄ āύāĻŋāωāϜāĻĢāĻŋāĻĄ (āϝāĻž Redis āϞāĻŋāĻ¸ā§āĻŸā§‡ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ) āĻŸā§‡āĻŦāĻŋāϞ⧇ āĻĒ⧁āĻļ āĻ•āϰ⧇ āĻĻ⧇āϝāĻŧāĨ¤
  • āĻšāĻžāχāĻŦā§āϰāĻŋāĻĄ āϏāϞāĻŋāωāĻļāύ: āϏāĻžāϧāĻžāϰāĻŖ āĻŽāĻžāύ⧁āώ⧇āϰ āϜāĻ¨ā§āϝ Push Model āĻāĻŦāĻ‚ āϏ⧇āϞāĻŋāĻŦā§āϰāĻŋāϟāĻŋāĻĻ⧇āϰ (āϝāĻžāĻĻ⧇āϰ āĻĢāϞ⧋āϝāĻŧāĻžāϰ ā§§ āϞāĻžāϖ⧇āϰ āĻŦ⧇āĻļāĻŋ) āϜāĻ¨ā§āϝ Pull Model āĻāĻ•āϏāĻžāĻĨ⧇ āĻŽāĻŋāĻ•ā§āϏ āĻ•āϰ⧇ āĻšāĻžāχ-āĻ¸ā§āϕ⧇āϞ⧇ āĻ•āĻžāϜ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

āĻŸā§āϰ⧇āĻ¨ā§āĻĄāĻŋāĻ‚ āϟāĻĒāĻŋāĻ•āϏ āĻŦ⧇āϰ āĻ•āϰāĻžāϰ āĻ•āĻžāϜ āĻŽā§‚āϞāϤ Stream Processing āĻāϰ āĻšāĻžāϤ⧇ āĻĨāĻžāϕ⧇āĨ¤

  • āĻšā§āϝāĻžāϏāĻŸā§āϝāĻžāĻ—āϗ⧁āϞ⧋ āĻŽā§‡āϏ⧇āϜ āĻŦā§āϰ⧋āĻ•āĻžāϰ Apache Kafka āϤ⧇ āĻĒāĻžāĻ āĻžāύ⧋ āĻšāϝāĻŧāĨ¤
  • Apache Flink āĻāĻ•āϟāĻŋ āĻĢāĻŋāĻ•ā§āϏāĻĄ āϟāĻžāχāĻŽāĻĢā§āϰ⧇āĻŽā§‡āϰ āĻŽāĻ§ā§āϝ⧇ (āĻ—āϤ ā§Šā§Ļ āĻŽāĻŋāύāĻŋāϟ) āϕ⧋āύ āĻšā§āϝāĻžāϏāĻŸā§āϝāĻžāĻ— āĻ•āϤāĻŦāĻžāϰ āĻāϏ⧇āϛ⧇ āϤāĻž āϗ⧁āύ⧇ (Count-Min Sketch āĻ…ā§āϝāĻžāϞāĻ—āϰāĻŋāĻĻāĻŽ) āĻĢāϞāĻžāĻĢāϞāϟāĻŋāϕ⧇ āϰāĻŋāϝāĻŧ⧇āϞ-āϟāĻžāχāĻŽā§‡ Redis ZSET (Sorted List) āĻ āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧇āĨ¤ āϟāĻĒ ā§§ā§Ļ āϞāĻŋāĻ¸ā§āϟ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āύāĻž āϛ⧁āρāϝāĻŧ⧇ āϏāϰāĻžāϏāϰāĻŋ Redis āĻĨ⧇āϕ⧇āχ āĻĢā§āϰāĻ¨ā§āϟāĻāĻ¨ā§āĻĄā§‡ āĻļā§‹ āĻ•āϰāĻžāύ⧋ āĻšāϝāĻŧāĨ¤

147. Design a banking system database​

āĻŦā§āϝāĻžāĻ‚āĻ•āĻŋāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āφāϰ āϏ⧋āĻļā§āϝāĻžāϞ āĻŽāĻŋāĻĄāĻŋāϝāĻŧāĻž āĻāĻ• āϜāĻŋāύāĻŋāϏ āύāϝāĻŧāĨ¤ āĻāĻ–āĻžāύ⧇ ā§§ āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āĻĄāĻžāϟāĻž āĻ¸ā§āϞ⧋ āφāϏāϞ⧇āĻ“ āϏāĻŽāĻ¸ā§āϝāĻž āύ⧇āχ, āĻ•āĻŋāĻ¨ā§āϤ⧁ ā§§ āϟāĻžāĻ•āĻžāϰ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏ āϭ⧁āϞ āĻšāϞ⧇ āĻĒ⧁āϰ⧋ āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋ āĻ§ā§āĻŦāĻ‚āϏ āĻšāϝāĻŧ⧇ āϝāĻžāĻŦ⧇āĨ¤

Database Choices: PostgreSQL, Oracle, āĻ…āĻĨāĻŦāĻž Spanner āĻāϰ āĻŽāϤ⧋ āĻĢ⧁āĻ˛ā§āϞāĻŋ ACID āĻ•āĻŽāĻĒā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ SQL āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŽāĻžāĻ¸ā§āϟ!

How do you ensure ACID properties for money transfers?​

āĻŽāĻžāύāĻŋ āĻŸā§āϰāĻžāĻ¨ā§āϏāĻĢāĻžāϰ⧇ Atomicity āĻ•āĻ ā§‹āϰāĻ­āĻžāĻŦ⧇ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ, āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻšāϝāĻŧ āϏāĻŦ āĻ•āĻžāϜ āĻšāĻŦ⧇, āύāĻž āĻšāϝāĻŧ āĻ•āĻŋāϛ⧁āχ āĻšāĻŦ⧇ āύāĻžāĨ¤

  • āĻāϰ āϜāĻ¨ā§āϝ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ Double Entry Accounting āĻĢāϞ⧋ āĻ•āϰ⧇āĨ¤ āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞ accounts āĻāĻŦāĻ‚ āφāϰ⧇āĻ•āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞ ledger_entries āϰāĻžāĻ–āĻž āĻšāϝāĻŧāĨ¤
  • āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻĨ⧇āϕ⧇ āϝāĻ–āύāχ āϟāĻžāĻ•āĻž āĻŸā§āϰāĻžāĻ¨ā§āϏāĻĢāĻžāϰ āĻšāĻŦ⧇, āĻāϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŦā§āϞāϕ⧇āϰ āϭ⧇āϤāϰ āĻšāĻŦ⧇:
BEGIN TRANSACTION;
-- āϏ⧇āĻ¨ā§āĻĄāĻžāϰ⧇āϰ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏ āϞāĻ• āĻāĻŦāĻ‚ āĻ•āĻŽāĻžāύ⧋
UPDATE accounts SET balance = balance - 1000 WHERE id = 1 FOR UPDATE;
-- āϰāĻŋāϏāĻŋāĻ­āĻžāϰ⧇āϰ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏ āϞāĻ• āĻāĻŦāĻ‚ āĻŦāĻžā§œāĻžāύ⧋
UPDATE accounts SET balance = balance + 1000 WHERE id = 2 FOR UPDATE;
-- āĻ…āĻĄāĻŋāϟ āĻŸā§‡āĻŦāĻŋāϞ⧇ āϞāĻ— āϰāĻžāĻ–āĻž
INSERT INTO ledger (from_ac, to_ac, amount) VALUES (1, 2, 1000);
COMMIT;
-- āĻĢ⧇āχāϞ āĻ•āϰāϞ⧇ ROLLBACK āĻ•āϰāĻž āĻšāĻŦ⧇

How do you handle transaction history and auditing?​

āĻŦā§āϝāĻžāĻ‚āĻ•āĻŋāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻĄā§‡āϟāĻž āĻ•āĻ–āύ⧋āχ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž (DELETE) āĻŦāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ (UPDATE) āĻ•āϰāĻž āϝāĻžāϝāĻŧ āύāĻžāĨ¤

  • āĻāϰ āϜāĻ¨ā§āϝ Event Sourcing Pattern āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āφāĻĒāύāĻžāϰ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏ āĻŽā§‚āϞāϤ āĻ…āĻ—āĻŖāĻŋāϤ āϜāĻŽāĻž āĻāĻŦāĻ‚ āĻ–āϚāϰ āĻšāĻŋāϏ⧇āĻŦ⧇āϰ (Ledgers) āϝ⧋āĻ—āĻĢāϞāĨ¤
  • āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻŸā§āϰāĻžāύāĻœā§‡āĻ•āĻļāύ⧇ Immutable, Append-only (āĻļ⧁āϧ⧁ āĻŽāĻžāĻ¤ā§āϰ āύāĻŋāĻšā§‡ āϞ⧇āĻ–āĻž āĻšāĻŦ⧇) āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻ¸ā§āĻŸā§āϰāĻžāĻ•āϚāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ, āϝāĻžāϤ⧇ āϕ⧇āω āĻĄā§‡āϟāĻž āĻŸā§‡āĻŽā§āĻĒāĻžāϰ āĻ•āϰāϞ⧇ āϤāĻž āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇ āϧāϰāĻž āĻĒāĻĄāĻŧ⧇āĨ¤

How do you prevent double spending?​

āϝāĻžāϤ⧇ āĻāĻ•āχ āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āĻĻ⧁āĻŦāĻžāϰ āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāϟ āύāĻž āĻšāϝāĻŧ, āϤāĻžāϰ āϜāĻ¨ā§āϝ āϤāĻŋāύāϟāĻŋ āϞ⧇āϝāĻŧāĻžāϰ āϰāĻžāĻ–āĻž āĻšāϝāĻŧ:

  1. Idempotency Key: āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻ…ā§āϝāĻžāĻĒ āĻĨ⧇āϕ⧇ āϝāĻ–āύ āϟāĻžāĻ•āĻž āĻĒāĻžāĻ āĻžāύ⧋āϰ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āφāϏ⧇, āϤāĻ–āύ āĻāĻ•āϟāĻŋ āχāωāύāĻŋāĻ• āĻŸā§‹āϕ⧇āύ āĻŦāĻž āϕ⧀ (Key) āφāϏ⧇āĨ¤ āĻāχ āϕ⧀ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ transactions āĻŸā§‡āĻŦāĻŋāϞ⧇ UNIQUE āĻ•āϞāĻžāĻŽ āĻšāĻŋāϏ⧇āĻŦ⧇ āϏ⧇āϟ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻāĻ•āχ āϕ⧀ āĻĒ⧇āϞ⧇āχ āϰāĻŋāĻœā§‡āĻ•ā§āϟ āĻ•āϰ⧇ āĻĻ⧇āϝāĻŧ (Duplicate Key Error)āĨ¤
  2. Pessimistic Locking: āĻŸā§āϰāĻžāĻ¨ā§āϏāĻĢāĻžāϰ āϚāϞāĻžāĻ•āĻžāϞ⧀āύ āĻ¸ā§āĻĒ⧇āϏāĻŋāĻĢāĻŋāĻ• āϰ⧋-āϕ⧇ FOR UPDATE āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϞāĻ• āĻ•āϰ⧇ āϰāĻžāĻ–āĻž āĻšāϝāĻŧāĨ¤

148. Design a video streaming platform database (Netflix/YouTube)​

āĻ­āĻŋāĻĄāĻŋāĻ“ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽāĻŋāĻ‚āϝāĻŧ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āϖ⧁āĻŦ āϛ⧋āϟ āĻĨāĻžāϕ⧇, āĻ•āĻžāϰāĻŖ āĻ…āϰāĻŋāϜāĻŋāύāĻžāϞ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻĢāĻžāχāϞāϗ⧁āϞ⧋ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻĨāĻžāϕ⧇ āύāĻžāĨ¤

How do you store video metadata vs actual video files?​

  • āĻŽā§‡āϟāĻžāĻĄā§‡āϟāĻž (Metadata): āĻ­āĻŋāĻĄāĻŋāĻ“āϰ āϟāĻžāχāĻŸā§‡āϞ, āĻĄā§‡āϏāĻ•ā§āϰāĻŋāĻĒāĻļāύ, āĻŸā§āϝāĻžāĻ—, āϞāĻžāχāĻ•-āĻĄāĻŋāϏāϞāĻžāχāĻ•, āĻ•āĻŽā§‡āĻ¨ā§āĻŸâ€”āĻāϗ⧁āϞ⧋ PostgreSQL āĻŦāĻž MongoDB āϤ⧇ āϰāĻžāĻ–āĻž āĻšāϝāĻŧ, āĻ•āĻžāϰāĻŖ āĻāϗ⧁āϞ⧋ āĻŸā§‡āĻ•ā§āϏāϟ āĻĄā§‡āϟāĻž āĻāĻŦāĻ‚ āĻĒā§āϰāϚ⧁āϰ āϕ⧁āϝāĻŧ⧇āϰāĻŋ āĻšāϝāĻŧāĨ¤
  • āĻ­āĻŋāĻĄāĻŋāĻ“ āĻĢāĻžāχāϞ (Blob Storage): āĻ­āĻŋāĻĄāĻŋāĻ“ āĻĢāĻžāχāϞāϕ⧇ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āϰ⧇āϜ⧁āϞ⧇āĻļāύ⧇ (ā§§ā§Ļā§Žā§ĻāĻĒāĻŋ, ⧭⧍ā§ĻāĻĒāĻŋ) āĻ•āύāĻ­āĻžāĻ°ā§āϟ āĻ•āϰ⧇ Object Storage (Amazon S3 āĻŦāĻž GCS) āĻ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤
  • āĻŽā§‡āϟāĻžāĻĄā§‡āϟāĻž āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ“āχ āĻĢāĻžāχāϞ⧇āϰ āĻāĻ•āϟāĻŋ CDN āϞāĻŋāĻ‚āĻ• (āϝ⧇āĻŽāύ https://cdn.example.com/video123_720p.mp4) āϰāĻžāĻ–āĻž āĻšāϝāĻŧāĨ¤

How do you handle user viewing history and recommendations?​

āĻ­āĻŋāĻĄāĻŋāĻ“ āĻšāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻāĻ•āϟāĻŋ āĻ•āĻ¨ā§āϟāĻŋāύāĻŋāωāϝāĻŧāĻžāϏ āĻĄā§‡āϟāĻž āĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻŦāĻž āϞāĻ— (Log)āĨ¤

  • āχāωāϜāĻžāϰ āϝāĻ–āύ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻĻ⧇āϖ⧇, āĻŦā§āϰāĻžāωāϜāĻžāϰ āĻĨ⧇āϕ⧇ āĻĒā§āϰāϤāĻŋ ā§§ā§Ļ āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āĻĒāϰ āĻĒāϰ āĻāĻ•āϟāĻŋ "Heartbeat" āϏāĻŋāĻ—āĻ¨ā§āϝāĻžāϞ āφāϏ⧇ ("āχāωāϜāĻžāϰ ⧧⧍ āĻŽāĻŋāύāĻŋāϟ ā§§ā§Ļ āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡ āφāϛ⧇")āĨ¤
  • āĻāχ āĻŦāĻŋāĻĒ⧁āϞ āϏāĻ‚āĻ–ā§āϝāĻ• āĻšāĻžāĻ°ā§āϟāĻŦāĻŋāϟ Cassandra-āϰ āĻŽāϤ⧋ āĻšāĻžāχ-āĻ¸ā§āϕ⧇āϞ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻ…āĻĨāĻŦāĻž HDFS (Hadoop) āĻ āĻĄāĻžāĻŽā§āĻĒ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤
  • āĻāχ āĻĄā§‡āϟāĻžāϏ⧇āĻŸā§‡āϰ āĻ“āĻĒāϰ Machine Learning (Collaborative Filtering) āϚāĻžāϞāĻŋāϝāĻŧ⧇ āĻŽā§‡āĻļāĻŋāύ āĻ āĻŋāĻ• āĻ•āϰ⧇ āĻ“āχ āχāωāϜāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āύ⧇āĻ•ā§āϏāϟ āϰ⧇āĻ•āĻŽā§‡āĻ¨ā§āĻĄā§‡āĻļāύ āϕ⧀ āĻšāĻŦ⧇āĨ¤

How do you implement content delivery and caching?​

āĻĄā§‡āϞāĻŋāĻ­āĻžāϰāĻŋāϰ āϜāĻ¨ā§āϝ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻĻāĻžāϝāĻŧā§€ āύāϝāĻŧ, āĻāϟāĻŋ āĻŽā§‚āϞāϤ āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āφāĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āϚāĻžāϰāĨ¤

  • CDN (Content Delivery Network): Netflix āĻāϰ āĻŽāϤ⧋ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āϤāĻžāĻĻ⧇āϰ āĻ­āĻŋāĻĄāĻŋāĻ“āϰ āĻ•ā§āϝāĻžāĻļ āĻ•āĻĒāĻŋāϗ⧁āϞ⧋ āĻŦāĻŋāĻļā§āĻŦ⧇āϰ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻĻ⧇āĻļ⧇āϰ āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ⧇āϰ (ISP) āϞ⧋āĻ•āĻžāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ (Netflix Open Connect) āĻŦāϏāĻŋāϝāĻŧ⧇ āϰāĻžāϖ⧇āĨ¤
  • āϝāĻ–āύ āϕ⧋āύ⧋ āĻŦāĻžāĻ‚āϞāĻžāĻĻ⧇āĻļāĻŋ āχāωāϜāĻžāϰ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āĻ•āϰ⧇, āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āϤāĻžāϰ āĻŽā§‡āϟāĻžāĻĄā§‡āϟāĻž āĻĄāĻžāϟāĻžāĻŦ⧇āϏ (āφāĻŽā§‡āϰāĻŋāĻ•āĻžāϝāĻŧ āĻĨāĻžāĻ•āĻž) āĻĨ⧇āϕ⧇ āϭ⧇āϰāĻŋāĻĢāĻžāχ āĻ•āϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŦāϞ⧇ āĻĻ⧇āϝāĻŧ—"āφāĻŽāĻŋ āĻĒāĻžāĻ āĻžāĻšā§āĻ›āĻŋ āύāĻž, āϤ⧁āĻŽāĻŋ āĻĸāĻžāĻ•āĻžāϰ āĻ“āχ āĻ•ā§āϝāĻžāĻļ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻĨ⧇āϕ⧇ āĻ­āĻŋāĻĄāĻŋāĻ“āϟāĻŋ āϟāĻžāύ⧋āĨ¤"

149. Design a stock trading system database​

āĻ¸ā§āϟāĻ• āĻŽāĻžāĻ°ā§āϕ⧇āϟ āĻšāĻšā§āϛ⧇ āĻāĻ•āϟāĻŋ āφāĻ˛ā§āĻŸā§āϰāĻž-āϞ⧋-āϞ⧇āĻŸā§‡āĻ¨ā§āϏāĻŋ, āϏ⧁āĻĒāĻžāϰ āĻĢāĻžāĻ¸ā§āϟ āĻŸā§āϰāĻžāύāĻœā§‡āĻ•āĻļāύāĻžāϞ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāĨ¤ āĻāĻ–āĻžāύ⧇ āĻŸā§āϰ⧇āĻĄ āĻŽāĻŋāϞāϤ⧇ āĻšāϝāĻŧ āĻŽāĻžāχāĻ•ā§āϰ⧋-āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡āĨ¤

How do you handle high-frequency trading requirements?​

āϰ⧇āϗ⧁āϞāĻžāϰ āĻĄāĻŋāĻ¸ā§āĻ• āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻĄāĻžāϟāĻžāĻŦ⧇āϏ (SQL) āĻāϰ āϞ⧇āĻŸā§‡āĻ¨ā§āϏāĻŋ āĻŽāĻŋāϞāĻŋ-āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡ āĻšāϝāĻŧ, āϝāĻž āĻŸā§āϰ⧇āĻĄāĻŋāĻ‚āϝāĻŧ⧇āϰ āϜāĻ¨ā§āϝ āĻ…āύ⧇āĻ• āĻ¸ā§āϞ⧋āĨ¤

  • āϤāĻžāχ āĻĒ⧁āϰ⧋ āϕ⧋āϰ āĻŽā§āϝāĻžāϚāĻŋāĻ‚ āχāĻžā§āϜāĻŋāύ In-Memory Database (āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ RAM āĻ āϚāϞ⧇), āϝ⧇āĻŽāύ Redis Enterprise āĻŦāĻž kdb+ āĻ āϚāĻžāϞāĻžāύ⧋ āĻšāϝāĻŧāĨ¤
  • āĻŽā§‡āĻŽāϰāĻŋ āĻ…āĻ¤ā§āϝāĻ¨ā§āϤ āĻĢāĻžāĻ¸ā§āϟ āĻšāĻ“āϝāĻŧāĻžāϝāĻŧ āϞ⧇āĻŸā§‡āĻ¨ā§āϏāĻŋ āĻ¨ā§āϝāĻžāύ⧋-āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡ āύ⧇āĻŽā§‡ āφāϏ⧇āĨ¤ āϤāĻŦ⧇ āĻĻāĻŋāύ āĻļ⧇āώ⧇ (Market close āĻšāϞ⧇) āĻāχ āĻŽā§‡āĻŽāϰāĻŋ āĻĄā§‡āϟāĻžāϗ⧁āϞ⧋ āĻšāĻžāĻ°ā§āĻĄāĻĄāĻŋāĻ¸ā§āĻ• āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻŸā§āĻ°ā§āϝāĻžāĻĄāĻŋāĻļāύāĻžāϞ āĻāĻ¨ā§āϟāĻžāϰāĻĒā§āϰāĻžāχāϜ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ (Oracle/DB2) āĻ¸ā§āĻĨāĻžāϝāĻŧā§€āĻ­āĻžāĻŦ⧇ āĻ¸ā§āĻŸā§‹āϰ (Archive) āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

How do you ensure data consistency for real-time prices?​

āĻ¸ā§āϟāϕ⧇āϰ āϟāĻŋāĻ• (Tick) āĻĒā§āϰāĻžāχāϏ āĻĒā§āϰāϤāĻŋ āĻĢā§āĻ°ā§āϝāĻžāĻ•āĻļāύ āĻ…āĻĢ āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡ āĻšā§‡āĻžā§āϜ āĻšāϝāĻŧāĨ¤

  • āĻāϰ āĻ•āύāϏāĻŋāĻ¸ā§āĻŸā§‡āĻ¨ā§āϏāĻŋ āϰāĻžāĻ–āϤ⧇ āĻĒā§āϰāĻžāχāϏ āϟāĻŋāĻ•āϗ⧁āϞ⧋ Stream Processing (Kafka / Flink) āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤
  • āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ Time-series Database (āϝ⧇āĻŽāύ InfluxDB) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ, āϝāĻžāϤ⧇ āϏāĻŽāϝāĻŧ⧇āϰ āύāĻŋāϖ⧁āρāϤ āĻŸā§āĻ°ā§āϝāĻžāĻ•āĻŋāĻ‚ āĻĨāĻžāϕ⧇ āĻāĻŦāĻ‚ āĻĢā§āϰāĻ¨ā§āϟāĻāĻ¨ā§āĻĄā§‡ āĻ“āϝāĻŧ⧇āĻŦāϏāϕ⧇āĻŸā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒ⧁āĻļ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

How do you handle order matching?​

āĻāϟāĻŋ āĻŽā§‚āϞāϤ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āύāϝāĻŧ, āĻŦāϰāĻ‚ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻĒ⧇āĻļāĻžāϞ āϏāĻĢāϟāĻ“āϝāĻŧā§āϝāĻžāϰ āĻ•āύāϏ⧇āĻĒā§āϟ, āϝāĻžāϕ⧇ Limit Order Book āĻŦāϞāĻž āĻšāϝāĻŧāĨ¤

  • āĻāϟāĻŋ āĻĻ⧁āϟāĻŋ Priority Queues (Max-heap for Bids, Min-heap for Asks) āύāĻŋāϝāĻŧ⧇ āĻ—āĻ āĻŋāϤāĨ¤
  • āϝāĻ–āύ āύāϤ⧁āύ āĻŦāĻžāχ (Buy) āĻŦāĻž āϏ⧇āϞ (Sell) āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āφāϏ⧇, RAM āĻ āĻĨāĻžāĻ•āĻž āĻāχ āĻ…āĻ°ā§āĻĄāĻžāϰ āĻŦ⧁āĻ• āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇ āĻšā§‡āĻ• āĻ•āϰ⧇ (Pro-Rata āĻŦāĻž First-In-First-Out āĻŦ⧇āϏāĻŋāϏ⧇)āĨ¤
  • āĻŽā§āϝāĻžāϚ āĻšāϞ⧇ āĻāĻ•āϟāĻŋ Trade āχāϭ⧇āĻ¨ā§āϟ āĻ‰ā§ŽāĻĒāĻ¨ā§āύ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āϤāĻž Kafka āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāϏāĻŋāĻ™ā§āĻ•ā§āϰ⧋āύāĻžāϏāϞāĻŋ āĻĒāĻžāĻ°ā§āĻŽāĻžāύ⧇āĻ¨ā§āϟ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŦāĻž āϞ⧇āϜāĻžāϰ⧇ āϏ⧇āĻ­ āĻšāϤ⧇ āϚāϞ⧇ āϝāĻžāϝāĻŧāĨ¤

150. Design a hospital management system database​

āĻšāϏāĻĒāĻŋāϟāĻžāϞ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻ¸ā§āĻĒāĻŋāĻĄ āĻŦāĻž āϰāĻŋāϝāĻŧ⧇āϞ-āϟāĻžāχāĻŽā§‡āϰ āĻšā§‡āϝāĻŧ⧇ āĻĄāĻžāϟāĻž āĻĒā§āϰāĻžāχāϭ⧇āϏāĻŋ, āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋ āĻāĻŦāĻ‚ āĻĄā§‡āϟāĻžāϰ āĻ…āĻĨ⧇āĻ¨ā§āϟāĻŋāϏāĻŋāϟāĻŋ āϏāĻŦāĻžāϰ āĻ“āĻĒāϰ⧇ āĻĨāĻžāϕ⧇āĨ¤

How do you handle patient privacy (HIPAA compliance)?​

HIPAA(Health Insurance Portability and Accountability Act) āφāχāύ āĻŽā§‡āύ⧇ āϚāϞāĻžāϰ āϜāĻ¨ā§āϝ āĻĄā§‡āϟāĻžāϰ āϏ⧁āϰāĻ•ā§āώāĻžāϝāĻŧ āϜāĻŋāϰ⧋ āϟāϞāĻžāϰ⧇āĻ¨ā§āϏ āύ⧀āϤāĻŋ āĻŽāĻžāύāϤ⧇ āĻšāϝāĻŧāĨ¤

  • Encryption Always: āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻĄā§‡āϟāĻž (At-rest) āĻāĻŦāĻ‚ āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡ āĻĄā§‡āϟāĻž (In-transit) āϏāĻŦ āϏāĻŽāϝāĻŧ āĻšāĻžāϝāĻŧ⧇āĻ¸ā§āϟ āϞ⧇āϭ⧇āϞ⧇āϰ āĻāύāĻ•ā§āϰāĻŋāĻĒāĻļāύ (āϝ⧇āĻŽāύ AES-256) āĻĨāĻžāĻ•āϤ⧇ āĻšāϝāĻŧāĨ¤
  • Data Masking āĻ“ Column Level Encryption: āϰ⧋āĻ—ā§€āϰ āύāĻžāĻŽ, āĻŦā§āϞāĻžāĻĄ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ, āĻ¸ā§āĻĒ⧇āϏāĻŋāĻĢāĻŋāĻ• āϏ⧇āύāϏāĻŋāϟāĻŋāĻ­ āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋ āĻāĻŽāύāĻ­āĻžāĻŦ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻāύāĻ•ā§āϰāĻŋāĻĒā§āϟ āĻ•āϰāĻž āĻĨāĻžāϕ⧇ āϝ⧇, āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ⧇āĻ¸ā§āĻŸā§āϰ⧇āϟāϰ āύāĻŋāĻœā§‡āĻ“ āϏāϰāĻžāϏāϰāĻŋ āϕ⧁āϝāĻŧ⧇āϰāĻŋ āĻ•āϰ⧇ āϤāĻž āĻĒāĻĄāĻŧāϤ⧇ āĻĒāĻžāϰ⧇ āύāĻžāĨ¤ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ…āĻĨāϰāĻžāχāϜāĻĄ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āĻ•āĻžāϛ⧇ āĻĄāĻŋāĻ•ā§āϰāĻŋāĻĒāĻļāύ-āĻ•āĻŋ (Key) āĻĨāĻžāϕ⧇āĨ¤
  • Audit Logs: āĻĒā§āϰāĻ¤ā§āϝ⧇āĻ•āϟāĻŋ Read/Write āĻāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ…āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧀āϝāĻŧ āϞāĻ— āĻŸā§‡āĻŦāĻŋāϞ āϰāĻžāĻ–āĻž āĻšāϝāĻŧ (āϕ⧇, āĻ•āĻ–āύ, āϕ⧋āύ āφāχāĻĒāĻŋ āĻĨ⧇āϕ⧇ āϰ⧋āĻ—ā§€āϰ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āĻĻ⧇āϖ⧇āϛ⧇ āĻŦāĻž āĻšā§‡āĻžā§āϜ āĻ•āϰ⧇āϛ⧇)āĨ¤

How do you manage appointment scheduling?​

  • āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ doctors, patients, appointments, āĻāĻŦāĻ‚ time_slots āĻŸā§‡āĻŦāĻŋāϞ āĻĨāĻžāϕ⧇āĨ¤
  • āĻāĻ•āϜāύ āĻĄāĻžāĻ•ā§āϤāĻžāϰ āĻāĻ•āχ āϏāĻŽāϝāĻŧ⧇ āĻĻ⧁āϜāύāϕ⧇ āϏāĻŽāϝāĻŧ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇ āύāĻž, āϤāĻžāχ āĻĄāĻžāĻŦāϞ āĻŦ⧁āĻ•āĻŋāĻ‚ āϠ⧇āĻ•āĻžāϤ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āϞ⧇āϭ⧇āϞ⧇ UNIQUE(doctor_id, appointment_date, time_slot_id) āĻ•āύāĻ¸ā§āĻŸā§āϰ⧇āχāĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ, āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āϰāĻŋāϞāĻžāĻļāύāĻžāϞ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āϞāĻ• āĻŽā§‡āĻ•āĻžāύāĻŋāϜāĻŽ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰ⧇ āĻŸā§āϰāĻžāύāĻœā§‡āĻ•āĻļāύāĻžāϞ āχāĻ¨ā§āĻŸā§‡āĻ—ā§āϰāĻŋāϟāĻŋ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

How do you handle medical records and history?​

āϰ⧋āĻ—ā§€āϰ āĻŽā§‡āĻĄāĻŋāϕ⧇āϞ āϰ⧇āĻ•āĻ°ā§āĻĄ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻĻ⧁āϟāĻŋ āĻ…āĻ‚āĻļ⧇ āĻŦāĻŋāĻ­āĻ•ā§āϤ:

  • EHR (Electronic Health Record): āĻĒā§āϰ⧇āϏāĻ•ā§āϰāĻŋāĻĒāĻļāύ, āĻ…āĻŦāϜāĻžāϰāϭ⧇āĻļāύ, āĻĄāĻžāϝāĻŧāĻžāĻ—āύ⧋āϏāĻŋāϏ āĻāϏāĻŦ āĻ¸ā§āĻŸā§āϰāĻžāĻ•āϚāĻžāĻ°ā§āĻĄ āĻĄā§‡āϟāĻž RDBMS āĻ āϰ⧋āĻ—ā§€āϰ āĻĒā§āϰ⧋āĻĢāĻžāχāϞ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤
  • āĻŽāĻŋāĻĄāĻŋāϝāĻŧāĻž āĻĢāĻžāχāϞ (X-Ray, MRI Scans): āĻāϗ⧁āϞ⧋ āĻŦāĻŋāĻļāĻžāϞ āϏāĻžāχāĻœā§‡āϰ āĻĢāĻžāχāϞāĨ¤ āĻāϗ⧁āϞ⧋ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āύāĻž āϰ⧇āϖ⧇ Secure Object Storage āĻŦāĻž PACS (Picture Archiving and Communication System) āĻ āϏ⧇āĻ­ āĻ•āϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻŽā§‚āϞ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻ“āχ āĻĢāĻžāχāϞ⧇āϰ āĻāύāĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āĻĄ āϞ⧋āϕ⧇āĻļāύ āĻ“ āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āĻŸā§‹āϕ⧇āύ āϰāĻžāĻ–āĻž āĻšāϝāĻŧāĨ¤

196. Design a database system that can handle 1 million writes per second​

āϏāĻžāϧāĻžāϰāĻŖ āĻāĻ•āϟāĻŋ RDBMS (āϝ⧇āĻŽāύ MySQL āĻŦāĻž PostgreSQL) āϏāĻ°ā§āĻŦā§‹āĻšā§āϚ ā§Ģ āĻšāĻžāϜāĻžāϰ āĻĨ⧇āϕ⧇ ā§§ā§Ļ āĻšāĻžāϜāĻžāϰ āϰāĻžāχāϟ/āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāϕ⧇ ā§§ āĻŽāĻŋāϞāĻŋāϝāĻŧāύ (ā§§ā§Ļ āϞāĻžāĻ–) āĻ āύāĻŋāϤ⧇ āĻšāϞ⧇ āφāĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āϚāĻžāϰ āĻĒ⧁āϰ⧋āĻĒ⧁āϰāĻŋ āĻšā§‡āĻžā§āϜ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

Architecture choices and trade-offs?​

ā§§ āĻŽāĻŋāϞāĻŋāϝāĻŧāύ āϰāĻžāχāϟ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāϤ⧇ āĻšāϞ⧇ āφāĻŽāĻžāĻĻ⧇āϰ Distributed NoSQL Database āĻāϰ āĻĻāĻŋāϕ⧇ āĻā§āρāĻ•āϤ⧇ āĻšāĻŦ⧇āĨ¤

  • āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āϏāĻŋāϞ⧇āĻ•ā§āϟ: Apache Cassandra āĻŦāĻž ScyllaDB (LSM-Tree āĻĄāĻžāϟāĻž āĻ¸ā§āĻŸā§āϰāĻžāĻ•āϚāĻžāϰ)āĨ¤ āĻāϰāĻž āĻŽā§‡āĻŽāϰāĻŋāϤ⧇ (MemTable) āϰāĻžāχāϟ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻĒāϰ⧇ āĻšāĻžāĻ°ā§āĻĄāĻĄāĻŋāĻ¸ā§āϕ⧇ āϏāĻŋāϕ⧁āϝāĻŧ⧇āĻ¨ā§āϏāĻŋāϝāĻŧāĻžāϞāĻŋ āϞ⧇āϖ⧇ (SSTable), āϝāĻž āĻŦāĻŋāĻļāĻžāϞ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āϰāĻžāχāϟ āύ⧇āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻŦ⧇āĻ¸ā§āϟāĨ¤
  • āĻŽā§‡āϏ⧇āϜ āĻ•āĻŋāω āĻŦāĻžāĻĢāĻžāϰ: āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟāϰāĻž āϏāϰāĻžāϏāϰāĻŋ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻĄā§‡āϟāĻž āύāĻž āĻĒāĻžāĻ āĻŋāϝāĻŧ⧇ Apache Kafka āĻāϰ āĻŽāϤ⧋ āĻšāĻžāχ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ āĻŽā§‡āϏ⧇āϜ āĻŦā§āϰ⧋āĻ•āĻžāϰ⧇ āĻĄā§‡āϟāĻž āĻĒāĻžāĻ āĻžāϝāĻŧāĨ¤ āĻ•āĻžāĻĢāĻ•āĻž āφāϰāĻžāĻŽāϏ⧇ āĻŽāĻŋāϞāĻŋāϝāĻŧāύ āχāϭ⧇āĻ¨ā§āϟ āχāύāĻœā§‡āĻ¸ā§āϟ (Ingest) āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
  • āĻāϰāĻĒāϰ āĻ•āύāϜāĻŋāωāĻŽāĻžāϰāϗ⧁āϞ⧋ āĻ•āĻžāĻĢāĻ•āĻž āĻĨ⧇āϕ⧇ āĻĄā§‡āϟāĻž āύāĻŋāϝāĻŧ⧇ āĻŦā§āϝāĻžāϚ (Batch) āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āĻ•ā§āϝāĻžāϏāĻžāĻ¨ā§āĻĄā§āϰāĻžāϤ⧇ āĻāϏāĻŋāĻ™ā§āĻ•ā§āϰ⧋āύāĻžāϏāϞāĻŋ āϰāĻžāχāϟ āĻ•āϰ⧇āĨ¤
  • Trade-offs: āĻāϤ āĻšāĻžāχ āϰāĻžāχāĻŸā§‡ Strong Consistency āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻž āĻ…āϏāĻŽā§āĻ­āĻŦāĨ¤ āϤāĻžāχ Eventual Consistency (āĻĻ⧇āϰāĻŋāϤ⧇ āĻĄā§‡āϟāĻž āφāĻĒāĻĄā§‡āϟ āĻļā§‹ āĻ•āϰāĻž) āĻŽā§‡āύ⧇ āύāĻŋāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āϜāϝāĻŧ⧇āύ (Join) āĻŦāĻž āĻĢā§āϞ⧇āĻ•ā§āϏāĻŋāĻŦāϞ āϕ⧁āϝāĻŧ⧇āϰāĻŋ āĻāϰ āφāĻļāĻž āϛ⧇āĻĄāĻŧ⧇ āĻĻāĻŋāϝāĻŧ⧇ āĻĄāĻŋāύāĻ°ā§āĻŽāĻžāϞāĻžāχāϜāĻĄ (Denormalized) āĻŽāĻĄā§‡āϞ āĻĢāϞ⧋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

Consistency vs availability decisions?​

CAP Theorem āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻĄāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāĻŦāĻŋāωāĻŸā§‡āĻĄ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻšāϝāĻŧ CP āĻ…āĻĨāĻŦāĻž AP āĻšāĻŦ⧇āĨ¤ ā§§ā§Ļ āϞāĻžāĻ– āϰāĻžāχāĻŸā§‡āϰ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āϝ⧇āύ āĻ•āĻ–āύ⧋ āĻĄāĻžāωāύ āύāĻž āĻšāϝāĻŧ, āϤāĻžāχ āĻāϟāĻŋāϕ⧇ AP (Availability & Partition Tolerance) āĻŦāĻžāύāĻžāύ⧋ āĻšāϝāĻŧāĨ¤ āĻ…āĻ°ā§āĻĨāĻžā§Ž, āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āϕ⧇ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāϞ⧇āĻ“ āĻĄāĻžāϟāĻž āϰāĻŋāϏāĻŋāĻ­ āĻ•āϰāĻž āĻŦāĻ¨ā§āϧ āĻšāĻŦ⧇ āύāĻžāĨ¤

How do you measure and verify performance?​

āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇ āϝāĻžāĻ“āϝāĻŧāĻžāϰ āφāϗ⧇ āĻŦā§āϝāĻžāĻĒāĻ• āĻ¸ā§āĻŸā§āϰ⧇āϏ āĻŸā§‡āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āϰāϤ⧇ āĻšāϝāĻŧāĨ¤

  • Tools: YCSB (Yahoo! Cloud Serving Benchmark) āĻŦāĻž Apache JMeter āĻĻāĻŋāϝāĻŧ⧇ āϞāĻžāĻ– āϞāĻžāĻ– āĻĢ⧇āχāĻ• āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āĻ•ā§āώāĻŽāϤāĻž āĻŽāĻžāĻĒāĻž āĻšāϝāĻŧāĨ¤
  • Metrics:
    1. Throughput (Writes per second).
    2. P99 Latency (⧝⧝% āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āĻ•āϤ āĻŽāĻŋāϞāĻŋ-āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡ āϏāϞāĻ­ āĻšāϞ⧋)āĨ¤
    3. CPU, RAM, Disk I/O (āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āϕ⧋āĻĨāĻžāϝāĻŧ āĻŦāϟāϞāύ⧇āĻ• āĻšāĻšā§āϛ⧇ āϤāĻž āĻĻ⧇āĻ–āĻž)āĨ¤

197. Database design for a global app (Users across continents)​

āϝāĻ–āύ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻĒ āφāĻŽā§‡āϰāĻŋāĻ•āĻžāϝāĻŧ āĻšā§‹āĻ¸ā§āϟ āĻ•āϰāĻž āĻĨāĻžāϕ⧇ āĻāĻŦāĻ‚ āĻŦāĻžāĻ‚āϞāĻžāĻĻ⧇āĻļ⧇āϰ āχāωāϜāĻžāϰ āϏ⧇āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āϤāĻ–āύ āĻĄā§‡āϟāĻž āĻŸā§āϰāĻžāϭ⧇āϞ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻžāϝāĻŧ ⧍ā§Ģā§Ļ āĻŽāĻŋāϞāĻŋ-āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āϞ⧇āĻŸā§‡āĻ¨ā§āϏāĻŋ āĻšāϝāĻŧ, āϝāĻž āχāωāϜāĻžāϰ āĻāĻ•ā§āϏāĻĒ⧇āϰāĻŋāϝāĻŧ⧇āĻ¨ā§āϏ āϚāϰāĻŽāĻ­āĻžāĻŦ⧇ āύāĻˇā§āϟ āĻ•āϰ⧇āĨ¤

Multi-region deployment strategies?​

āĻāϰ āϏāĻŽāĻžāϧāĻžāύ āĻšāϞ⧋ āĻ—ā§āϞ⧋āĻŦāĻžāϞāĻŋ āĻĄāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāĻŦāĻŋāωāĻŸā§‡āĻĄ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāĨ¤

  • āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āĻ•āĻĒāĻŋ (Replicas) āĻĒ⧃āĻĨāĻŋāĻŦā§€āϰ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻĒā§āϰāĻžāĻ¨ā§āϤ⧇ (āϝ⧇āĻŽāύ: āφāĻŽā§‡āϰāĻŋāĻ•āĻž, āχāωāϰ⧋āĻĒ, āĻāĻļāĻŋāϝāĻŧāĻž) āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻžāĨ¤
  • Google Cloud Spanner, CockroachDB āĻŦāĻž Amazon DynamoDB (Global Tables) āĻāϰ āĻŽāϤ⧋ āĻ—ā§āϞ⧋āĻŦāĻžāϞ āĻ•ā§āϞāĻžāωāĻĄ-āύ⧇āϟāĻŋāĻ­ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ, āϝāĻžāϰāĻž āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āĻĄā§‡āϟāĻžāϕ⧇ āϰāĻŋāϝāĻŧ⧇āϞ āϟāĻžāχāĻŽā§‡ āĻāĻ•āĻžāϧāĻŋāĻ• āϰāĻŋāϜāĻŋāĻ“āύ⧇ āϏāĻŋāĻ™ā§āĻ• (Replicate) āĻ•āϰ⧇ āϰāĻžāϖ⧇āĨ¤ āĻāĻļāĻŋāϝāĻŧāĻžāϰ āχāωāϜāĻžāϰ āϝāĻ–āύ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āĻ•āϰ⧇, āϤāĻ–āύ āϤāĻž āφāĻŽā§‡āϰāĻŋāĻ•āĻžāϰ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āϝāĻžāϝāĻŧ āύāĻž, āĻŦāϰāĻ‚ āϏāĻŋāĻ™ā§āĻ—āĻžāĻĒ⧁āϰ āĻŦāĻž āĻŽā§āĻŽā§āĻŦāĻžāχāϝāĻŧ⧇āϰ āϞ⧋āĻ•āĻžāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻ—āĻŋāϝāĻŧ⧇ āĻĒāĻĄāĻŧ⧇, āĻĢāϞ⧇ āĻŽāĻŋāϞāĻŋ-āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āφāϏ⧇āĨ¤

Data residency and compliance requirements?​

āĻ•āĻŋāϛ⧁ āĻ•āĻŋāϛ⧁ āĻĻ⧇āĻļ⧇āϰ (āϝ⧇āĻŽāύ āχāωāϰ⧋āĻĒāĻŋāϝāĻŧāĻžāύ āχāωāύāĻŋāϝāĻŧāύ⧇āϰ) āφāχāύ āφāϛ⧇ āϝ⧇, āϤāĻžāĻĻ⧇āϰ āύāĻžāĻ—āϰāĻŋāĻ•āĻĻ⧇āϰ āĻĄā§‡āϟāĻž āϤāĻžāĻĻ⧇āϰ āϭ⧌āĻ—ā§‹āϞāĻŋāĻ• āϏ⧀āĻŽāĻžāύāĻžāϰ āĻŦāĻžāχāϰ⧇ āϏ⧇āĻ­ āĻ•āϰāĻž āϝāĻžāĻŦ⧇ āύāĻžāĨ¤

  • āĻāϰ āϜāĻ¨ā§āϝ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ Geo-partitioning (āĻŦāĻž Row-level pinning) āĻ¸ā§āĻŸā§āĻ°ā§āϝāĻžāĻŸā§‡āϜāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤
  • āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āϕ⧋āϰ āϞ⧇āϭ⧇āϞ⧇āχ āĻāĻŽāύāĻ­āĻžāĻŦ⧇ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ āϝ⧇, āϝāĻĻāĻŋ āχāωāϜāĻžāϰ⧇āϰ country_code = "āϜāĻžāĻ°ā§āĻŽāĻžāύāĻŋ" āĻšāϝāĻŧ, āϤāĻŦ⧇ āϤāĻžāϰ āĻĄā§‡āϟāĻž āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āχāωāϰ⧋āĻĒ⧇āϰ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻ•ā§āϞāĻžāĻ¸ā§āϟāĻžāϰ⧇āχ āϏ⧇āĻ­ āĻšāĻŦ⧇, āĻ…āĻ¨ā§āϝ āϕ⧋āύ⧋ āĻ•ā§āϞāĻžāĻ¸ā§āϟāĻžāϰ⧇ āϤāĻžāϰ āϰ⧇āĻĒā§āϞāĻŋāĻ•āĻž āĻŦāĻž āĻ•āĻĒāĻŋ āϝāĻžāĻŦ⧇ āύāĻžāĨ¤

Conflict resolution in distributed writes?​

āφāĻŽā§‡āϰāĻŋāĻ•āĻžāϰ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻāĻ• āχāωāϜāĻžāϰ āĻāĻ•āϟāĻŋ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡ āϞāĻŋāĻ–āϞ⧋ "A", āĻ āĻŋāĻ• āĻāĻ•āχ āĻŽāĻŋāϞāĻŋ-āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡ āĻāĻļāĻŋāϝāĻŧāĻžāϰ āχāωāϜāĻžāϰ āĻāĻ•āχ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡ āϞāĻŋāĻ–āϞ⧋ "B"āĨ¤ āĻāĻ–āύ āĻ—ā§āϞ⧋āĻŦāĻžāϞ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻ•āĻžāϰ āϰāĻžāχāϟāϟāĻž āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāĻž āĻšāĻŦ⧇?

  • āϏāĻŽāĻžāϧāĻžāύ ā§§ (TrueTime): Google Spanner āĻāϰ āĻŽāϤ⧋ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĢāĻŋāϜāĻŋāĻ•ā§āϝāĻžāϞ āĻ…ā§āϝāĻžāϟāĻŽāĻŋāĻ• āϘāĻĄāĻŧāĻŋ āĻ“ āϜāĻŋāĻĒāĻŋāĻāϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ—ā§āϞ⧋āĻŦāĻžāϞ āϟāĻžāχāĻŽ āύāĻŋāϖ⧁āρāϤ āϰāĻžāϖ⧇ (TrueTime API), āϝāĻžāϰ āĻĢāϞ⧇ āĻāĻ•āĻĻāĻŽ āĻŽāĻŋāϞāĻŋ-āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡āϰ āĻšāĻŋāϏāĻžāĻŦ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āϏāĻŋāϰāĻŋāϝāĻŧāĻžāϞāĻžāχāϜ āĻ•āϰāĻž āϝāĻžāϝāĻŧ (Strict Consistency)āĨ¤
  • āϏāĻŽāĻžāϧāĻžāύ ⧍ (LWW / Vector Clocks): Cassandra āĻŦāĻž āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ Last-Writer-Wins āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ āĻŦāĻž Vector Clocks āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ•āύāĻĢā§āϞāĻŋāĻ•ā§āϟ āϏāϞāĻ­ āĻ•āϰ⧇, āĻ…āĻĨāĻŦāĻž āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϞ⧇āϭ⧇āϞ⧇ āĻĻ⧁āĻŸā§‹ āĻĄā§‡āϟāĻžāχ āĻĒāĻžāĻ āĻŋāϝāĻŧ⧇ āĻĻāĻŋāϝāĻŧ⧇ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāϕ⧇ āĻĄāĻŋāϏāĻŋāĻļāύ āύāĻŋāϤ⧇ āĻŦāϞ⧇āĨ¤

198. How do you implement GDPR compliance in database design?​

GDPR (General Data Protection Regulation) āχāωāϰ⧋āĻĒ⧇āϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻ•āĻ ā§‹āϰ āύāĻŋāϝāĻŧāĻŽāĨ¤ āĻāϟāĻŋ āϭ⧇āϙ⧇ āĻĢ⧇āϞāϞ⧇ āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋāϰ āφāϝāĻŧ⧇āϰ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻļāĻžāϞ āĻ…āĻ‚āĻļ āϜāϰāĻŋāĻŽāĻžāύāĻž āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āϞ⧇āϭ⧇āϞ āĻĨ⧇āϕ⧇āχ "Privacy by Design" āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻ•āϰāϤ⧇ āĻšāϝāĻŧāĨ¤

Right to be forgotten (Right to erasure) implementation?​

āϜāĻŋāĻĄāĻŋāĻĒāĻŋāφāϰ āĻāϰ āϧāĻžāϰāĻž āĻ…āύ⧁āϝāĻžāϝāĻŧā§€, āχāωāϜāĻžāϰ āϚāĻžāχāϞ⧇ āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋāϕ⧇ āϤāĻžāϰ āϝāĻžāĻŦāϤ⧀āϝāĻŧ āĻĄā§‡āϟāĻž āϚāĻŋāϰāϤāϰ⧇ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻžāϰ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

  • Soft Delete āϚāϞāĻŦ⧇ āύāĻž: āφāĻŽāϰāĻž āĻ…āύ⧇āĻ• āϏāĻŽāϝāĻŧ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻĄāĻŋāϜāĻžāχāύ⧇ deleted_at āĻĢāĻŋāĻ˛ā§āĻĄ āĻĻāĻŋāϝāĻŧ⧇ āĻĄā§‡āϟāĻž āĻšāĻžāχāĻĄ āĻ•āϰ⧇ āϰāĻžāĻ–āĻŋ (Soft Delete), āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĄā§‡āϟāĻž āĻšāĻžāĻ°ā§āĻĄāĻĄāĻŋāĻ¸ā§āϕ⧇āχ āĻĨ⧇āϕ⧇ āϝāĻžāϝāĻŧāĨ¤ āϜāĻŋāĻĄāĻŋāĻĒāĻŋāφāϰ-āĻ āĻāϟāĻŋ āĻ…āĻŦ⧈āϧāĨ¤
  • Hard Delete Mechanism: āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āφāϏāϞ⧇ āχāωāϜāĻžāϰ⧇āϰ PII (Personally Identifiable Information āϝ⧇āĻŽāύ āύāĻžāĻŽ, āχāĻŽā§‡āχāϞ, āĻ āĻŋāĻ•āĻžāύāĻž) āĻĒā§āϰāĻžāχāĻŽāĻžāϰāĻŋ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ, āĻĨāĻžāĻ°ā§āĻĄ-āĻĒāĻžāĻ°ā§āϟāĻŋ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ, āĻāĻŦāĻ‚ āĻ•ā§āϝāĻžāĻļ āĻĨ⧇āϕ⧇ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻĄāĻŋāϞāĻŋāϟ āĻŦāĻž āĻ¸ā§āĻ•ā§āϰāĻžāĻŦ (Scrubbed) āĻ•āϰāϤ⧇ āĻšāϝāĻŧāĨ¤
  • āĻŦāĻŋāĻĻ⧇āĻļāĻŋ āϞāĻŋāĻ—ā§āϝāĻžāϞ āχāĻ¸ā§āϝ⧁: āϝāĻĻāĻŋ āχāωāϜāĻžāϰ⧇āϰ āφāχāĻĄāĻŋāϰ āϏāĻžāĻĨ⧇ āĻĢāĻžāχāύāĻžāĻ¨ā§āϏāĻŋāϝāĻŧāĻžāϞ āĻšāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ (āϝāĻž āφāĻŦāĻžāϰ āĻŦā§āϝāĻžāĻ‚āĻ•āĻŋāĻ‚ āφāχāύ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻŦāĻžāĻ§ā§āϝāϤāĻžāĻŽā§‚āϞāĻ•) āϜāĻĄāĻŧāĻŋāϝāĻŧ⧇ āĻĨāĻžāϕ⧇, āϤāĻŦ⧇ āχāωāϜāĻžāϰ⧇āϰ āύāĻžāĻŽ/āχāĻŽā§‡āχāϞ āĻŽā§āϛ⧇ āĻĢ⧇āϞ⧇ āϤāĻžāϕ⧇ Anonymize (āĻ…āĻœā§āĻžāĻžāϤāύāĻžāĻŽāĻž āφāχāĻĄāĻŋāϤ⧇ āĻ•āύāĻ­āĻžāĻ°ā§āϟ) āĻŦāĻž Hash āĻ•āϰ⧇ āĻĻ⧇āϝāĻŧāĻž āĻšāϝāĻŧ, āϝāĻžāϤ⧇ āĻŦā§‹āĻāĻž āύāĻž āϝāĻžāϝāĻŧ āĻĄā§‡āϟāĻžāϟāĻŋ āĻ•āĻžāϰāĨ¤

Data portability requirements?​

āχāωāϜāĻžāϰ āϤāĻžāϰ āϏāĻŦ āĻĄā§‡āϟāĻž āĻĻ⧇āĻ–āϤ⧇ āĻŦāĻž āĻ…āĻ¨ā§āϝ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽā§‡ āύ⧇āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§‹āĻ°ā§āĻŸā§‡āĻŦāϞ (JSON/XML) āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰāĻžāϰ āĻ•ā§āώāĻŽāϤāĻž āϰāĻžāϖ⧇āĨ¤

  • āϏāĻŽāĻžāϧāĻžāύ: āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄā§‡ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϞāĻŋāĻ–āϤ⧇ āĻšāϝāĻŧ, āϝāĻž āχāωāϜāĻžāϰ⧇āϰ āφāχāĻĄāĻŋ āϧāϰ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ, āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āϏāĻŦāĻ–āĻžāύ⧇ āϕ⧁āϝāĻŧ⧇āϰāĻŋ āĻ•āϰ⧇ āϤāĻžāϰ āĻĄā§‡āϟāĻžāϰ āĻāĻ•āϟāĻŋ āĻ•āĻŽāĻĒā§āϞāĻŋāϟ āϜāĻŋāĻĒ (Zip) āĻŦāĻž JSON āĻĢāĻžāχāϞ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧇ āϤāĻžāϕ⧇ āĻĄāĻžāωāύāϞ⧋āĻĄā§‡āϰ āĻŦā§āϝāĻŦāĻ¸ā§āĻĨāĻž āĻ•āϰ⧇ āĻĻ⧇āϝāĻŧāĨ¤

āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻĒā§āϰāĻŽāĻžāĻŖ āϰāĻžāĻ–āϤ⧇ āĻšāĻŦ⧇ āϝ⧇ āχāωāϜāĻžāϰ āĻ•āĻŦ⧇, āϕ⧋āύ āĻĄā§‡āϟāĻž āĻĒā§āϰāϏ⧇āϏ āĻ•āϰāĻžāϰ āϏāĻŽā§āĻŽāϤāĻŋ āĻĻāĻŋāϝāĻŧ⧇āϛ⧇āĨ¤

  • āĻāĻ•āϟāĻŋ user_consents āĻŸā§‡āĻŦāĻŋāϞ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤ āĻŸā§‡āĻŦāĻŋāϞāϟāĻŋāϤ⧇ āĻļ⧁āϧ⧁ āĻšā§āϝāĻžāρ/āύāĻž āύāϝāĻŧ, āĻŦāϰāĻ‚ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ āĻāĻŦāĻ‚ āϏāĻŽā§āĻŽāϤāĻŋāϰ āĻ­āĻžāĻ°ā§āĻļāύ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤ 뜠āϜāĻžāϰ āϝāĻĻāĻŋ āĻĒāϰāĻŦāĻ°ā§āϤ⧀āϤ⧇ āϤāĻžāϰ āϏāĻŽā§āĻŽāϤāĻŋ āϰāĻŋāĻŽā§āĻ­ āĻŦāĻž āωāχāĻĨāĻĄā§āϰ (Withdraw consent) āĻ•āϰ⧇, āϏ⧇āϟāĻŋ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āĻ…āĻĄāĻŋāϟ āϞāϗ⧇ āϏ⧇āĻ­ āϰāĻžāĻ–āϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻĄāĻžāϟāĻž āĻĒā§āϰāϏ⧇āϏ āĻ•āϰāĻžāϰ āϕ⧁āϝāĻŧ⧇āϰāĻŋ āϚāĻžāϞāĻžāύ⧋āϰ āφāϗ⧇ āϏāĻŦāϏāĻŽāϝāĻŧ āĻāχ āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āĻ­āĻŋāω āĻĨ⧇āϕ⧇ āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āĻšā§‡āĻ• āĻ•āϰāϤ⧇ āĻšāϝāĻŧāĨ¤

199. Design a database disaster recovery solution with 99.99% availability​

99.99% Availability (āϝāĻžāϕ⧇ āĻŦāϞāĻž āĻšāϝāĻŧ "Four Nines") āĻŽāĻžāύ⧇ āĻšāϞ⧋ āφāĻĒāύāĻžāϰ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϟāĻŋ āĻŦāĻ›āϰ⧇ āĻŽā§āϝāĻžāĻ•ā§āϏāĻŋāĻŽāĻžāĻŽ ā§Ģ⧍ āĻŽāĻŋāύāĻŋāϟ āĻĄāĻžāωāύ āĻĨāĻžāĻ•āĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĒāĻžāĻŦ⧇āĨ¤ āĻāϰ āĻŦ⧇āĻļāĻŋ āĻĄāĻžāωāύ āĻšāϞ⧇ āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋāϰ āĻŦāĻŋāĻļāĻžāϞ āϞāϏ āĻšāĻŦ⧇āĨ¤

RPO and RTO requirements?​

āĻĄāĻŋāϜāĻžāĻ¸ā§āϟāĻžāϰ āϰāĻŋāĻ•āĻ­āĻžāϰāĻŋāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĢ⧇āχāϞ āĻ•āϰāϞ⧇ āĻĻ⧁āχāϟāĻž āϜāĻŋāύāĻŋāϏ āύāĻŋāϝāĻŧ⧇ āĻ­āĻžāĻŦāϤ⧇ āĻšāϝāĻŧ:

  • RTO (Recovery Time Objective): āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ•ā§āĻ°ā§āϝāĻžāĻļ āĻ•āϰāĻžāϰ āĻĒāϰ āĻ•āϤ āĻĻā§āϰ⧁āϤ āφāĻŦāĻžāϰ āϰāĻŋāĻ•āĻ­āĻžāϰ āĻšāϝāĻŧ⧇ āϞāĻžāχāĻ­ āĻšāĻŦ⧇? (āĻĢā§‹āϰ āύāĻžāχāύāϏ āĻāϚāĻŋāĻ­ āĻ•āϰāϤ⧇ āĻāχ āϟāĻžāχāĻŽ āĻ•āϝāĻŧ⧇āĻ• āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āĻĨ⧇āϕ⧇ āĻŽā§āϝāĻžāĻ•ā§āϏāĻŋāĻŽāĻžāĻŽ ā§Ģ āĻŽāĻŋāύāĻŋāϟ āĻšāϤ⧇ āĻĒāĻžāϰāĻŦ⧇)āĨ¤
  • RPO (Recovery Point Objective): āĻ•ā§āĻ°ā§āϝāĻžāĻļ āĻ•āϰāĻžāϰ āĻ•āĻžāϰāϪ⧇ āĻ•āϤāĻ•ā§āώāϪ⧇āϰ āĻĄā§‡āϟāĻž āϞāϏ āĻšāϝāĻŧ⧇āϛ⧇? (āφāĻĻāĻ°ā§āĻļ āĻĄāĻŋāϜāĻžāχāύ⧇ āĻāϟāĻŋ "Zero Data Loss" āĻšāĻŦ⧇)āĨ¤

Multi-cloud/Multi-region disaster recovery?​

āĻāĻ•āϟāĻŋ āĻĒ⧁āϰ⧋ āĻĄā§‡āϟāĻž āϏ⧇āĻ¨ā§āϟāĻžāϰ āĻŦāĻž āĻ•ā§āϞāĻžāωāĻĄ āϰāĻŋāϜāĻŋāĻ“āύ (āϝ⧇āĻŽāύ: AWS us-east-1 āĻ āĻœā§‡āύāĻžāϰ⧇āϟāϰ āĻĢ⧇āχāϞ āĻ•āϰ⧇ āφāϗ⧁āύ āϞāĻžāĻ—āϞ⧇) āĻĄāĻžāωāύ āĻšāϝāĻŧ⧇ āϗ⧇āϞ⧇ āĻŦāĻžāρāϚāĻžāϰ āωāĻĒāĻžāϝāĻŧ āϕ⧀?

  • Active-Active Multi-Region Setup: āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āĻĒā§āϰāĻžāχāĻŽāĻžāϰāĻŋ āĻāĻŦāĻ‚ āϏ⧇āϕ⧇āĻ¨ā§āĻĄāĻžāϰāĻŋ āĻ•ā§āϞāĻžāĻ¸ā§āϟāĻžāϰ āφāϞāĻžāĻĻāĻž āφāϞāĻžāĻĻāĻž āϰāĻŋāϜāĻŋāĻ“āύ⧇ (āϝ⧇āĻŽāύ āĻāĻ•āϟāĻŋ āφāĻŽā§‡āϰāĻŋāĻ•āĻžāϝāĻŧ, āφāϰ⧇āĻ•āϟāĻŋ āĻāĻļāĻŋāϝāĻŧāĻžāϝāĻŧ) āĻŦāĻž āφāϞāĻžāĻĻāĻž āĻ•ā§āϞāĻžāωāĻĄ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ⧇ (āĻāĻ•āϟāĻŋ AWS āĻ, āφāϰ⧇āĻ•āϟāĻŋ Azure āĻ) āϰāĻžāĻ–āϤ⧇ āĻšāĻŦ⧇āĨ¤
  • āĻŽā§‡āχāύ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻĨ⧇āϕ⧇ āϰāĻŋāϝāĻŧ⧇āϞ āϟāĻžāχāĻŽā§‡ (Synchronous āĻŦāĻž āĻĢāĻžāĻ¸ā§āϟ Asynchronous) āϰ⧇āĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϚāϞāϤ⧇ āĻĨāĻžāĻ•āĻŦ⧇ āĻ…āĻ¨ā§āϝ āĻ•ā§āϞāĻžāωāĻĄā§‡āϰ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āĨ¤
  • āĻŽā§‡āχāύ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻĄāĻžāωāύ āĻšāϞ⧇ DNS Failover Route (āϝ⧇āĻŽāύ Route53) āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āχāωāϜāĻžāϰ⧇āϰ āϏāĻŦ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟāϕ⧇ āϏ⧇āϕ⧇āĻ¨ā§āĻĄāĻžāϰāĻŋ āĻ•ā§āϞāĻžāωāĻĄ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻĄāĻžāχāϰ⧇āĻ•ā§āϟ āĻ•āϰ⧇ āĻĻ⧇āĻŦ⧇āĨ¤ āĻĢāϞ⧇ āχāωāϜāĻžāϰ āĻĢ⧇āχāϞ āĻšāĻ“āϝāĻŧāĻžāϰ āĻŸā§‡āϰāχ āĻĒāĻžāĻŦ⧇ āύāĻžāĨ¤

Cost vs availability trade-offs?​

  • 99.99% āĻāϭ⧇āχāĻ˛ā§āϝāĻžāĻŦāĻŋāϞāĻŋāϟāĻŋ āĻ…āĻ°ā§āϜāύ āĻ•āϰāϤ⧇ āϗ⧇āϞ⧇ āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹ (Infrastructure) āĻŦā§āϝāϝāĻŧ āϤāĻŋāύ āĻĨ⧇āϕ⧇ āϚāĻžāϰ āϗ⧁āĻŖ āĻŦ⧇āĻĄāĻŧ⧇ āϝāĻžāϝāĻŧ (āωāĻšā§āϚ āĻ—āϤāĻŋāϰ āĻĒā§āϰāĻžāχāϭ⧇āϟ āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻŋāĻ‚, āĻāĻ•āĻžāϧāĻŋāĻ• āĻ•ā§āϞāĻžāωāĻĄ āĻĄā§‡āϟāĻž āϏ⧇āĻ¨ā§āϟāĻžāϰ, āĻāĻ•ā§āϏāĻŸā§āϰāĻž āĻĄāĻŋāĻ¸ā§āĻ• āĻ¸ā§āĻĒ⧇āϏ)āĨ¤
  • āϤāĻžāχ āĻĄāĻŋāϜāĻžāχāύāĻžāϰāϕ⧇ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϤ⧇ āĻšāϝāĻŧ—āĻŦāĻŋāϜāύ⧇āϏ⧇ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ ā§§ā§Ļ āĻŽāĻŋāύāĻŋāϟ āĻĄāĻžāωāύ āĻĨāĻžāĻ•āϞ⧇ āϝ⧇ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āĻ•ā§āώāϤāĻŋ āĻšāĻŦ⧇, āϤāĻžāϰ āĻšā§‡āϝāĻŧ⧇ āĻ•āĻŋ āĻāχ āĻāĻ•ā§āϏāĻŸā§āϰāĻž āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻŽā§‡āχāύāĻŸā§‡āύ⧇āĻ¨ā§āϏ āĻ–āϰāϚ āĻŦ⧇āĻļāĻŋ āύāĻžāĻ•āĻŋ āĻ•āĻŽ? āϝāĻĻāĻŋ āĻĄāĻžāωāύāϟāĻžāχāĻŽā§‡āϰ āĻ•ā§āώāϤāĻŋāχ āĻŦ⧇āĻļāĻŋ āĻšāϝāĻŧ, āϤāĻŦ⧇āχ āĻāχ āφāĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āϚāĻžāϰ āϏāĻžāĻ°ā§āĻĨāĻ•āĨ¤

200. How do you future-proof your database architecture?​

"Future-proofing" āĻŽāĻžāύ⧇ āĻšāϞ⧋ āĻāĻŽāύāĻ­āĻžāĻŦ⧇ āĻĒā§āϰāĻĨāĻŽ āĻĻāĻŋāύ⧇āχ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āφāĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āϚāĻžāϰ āϏāĻžāϜāĻžāύ⧋, āϝ⧇āύ ā§Ģ-ā§§ā§Ļ āĻŦāĻ›āϰ āĻĒāϰ āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋāϰ āĻĄā§‡āϟāĻž ā§§ā§Ļā§Ļ āϗ⧁āĻŖ āĻŦ⧇āĻĄāĻŧ⧇ āϗ⧇āϞ⧇āĻ“ āĻŦāĻž āύāϤ⧁āύ āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋ āφāϏāϞ⧇āĻ“ āĻĒ⧁āϰ⧋ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āϰāĻŋāĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰāϤ⧇ āύāĻž āĻšāϝāĻŧāĨ¤

Technology evolution planning?​

āĻŸā§‡āĻ•āύ⧋āϞāϜāĻŋāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ…āĻŦāĻļā§āϝāĻŽā§āĻ­āĻžāĻŦā§€āĨ¤ āĻĄāĻžāϟāĻžāĻŦ⧇āϏāϕ⧇ āĻāϰ āĻĨ⧇āϕ⧇ āĻŦāĻžāρāϚāĻžāϤ⧇ Microservices architecture āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

  • āĻāĻ•āϟāĻŋ āĻŽāύ⧋āϞāĻŋāĻĨāĻŋāĻ• āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϕ⧇ āϛ⧋āϟ āϛ⧋āϟ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇ āĻ­āĻžāĻ— āĻ•āϰāĻžāĨ¤ āϝ⧇āĻŽāύ āĻŦāĻŋāϞāĻŋāĻ‚ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ, āχāωāϜāĻžāϰ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ, āĻĒā§āϰ⧋āĻĄāĻžāĻ•ā§āϟ āϏāĻžāĻ°ā§āĻ­āĻŋāϏāĨ¤
  • āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻŽāĻžāχāĻ•ā§āϰ⧋āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇āϰ āύāĻŋāϜāĻ¸ā§āĻŦ āφāϞāĻžāĻĻāĻž āĻĄāĻžāϟāĻžāĻŦ⧇āϏ (Database per service) āϰāĻžāĻ–āĻžāĨ¤ āĻāϤ⧇ āĻ­āĻŦāĻŋāĻˇā§āϝāϤ⧇ āĻĒā§āϰ⧋āĻĄāĻžāĻ•ā§āϟ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇āϰ āϏāĻžāĻ°ā§āϚ āωāĻ¨ā§āύāϤ āĻ•āϰāϤ⧇ āϚāĻžāχāϞ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ“āχ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇ Elasticsearch āĻŦāϏāĻžāϞ⧇āχ āϚāϞāĻŦ⧇, āĻĒ⧁āϰ⧋ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϕ⧇ āϛ⧁āϤ⧇ āĻšāĻŦ⧇ āύāĻžāĨ¤

Vendor lock-in mitigation strategies?​

āϝāĻĻāĻŋ āϏāĻŦ āĻ•āĻžāϜ āĻ•ā§āϞāĻžāωāĻĄ āĻ¸ā§āĻĒ⧇āϏāĻŋāĻĢāĻŋāĻ• āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇āϰ (āϝ⧇āĻŽāύ DynamoDB āĻŦāĻž AWS Aurora āĻāϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻĢāĻŋāϚāĻžāϰ) āĻ“āĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇ āĻ•āϰ⧇āύ, āϤāĻŦ⧇ āĻ•āĻžāϞ āϝāĻĻāĻŋ āϤāĻžāϰāĻž āĻĻāĻžāĻŽ ā§Š āϗ⧁āĻŖ āĻŦāĻžāĻĄāĻŧāĻŋāϝāĻŧ⧇ āĻĻ⧇āϝāĻŧ, āφāĻĒāύāĻžāϰ āĻ…āĻ¨ā§āϝ āϕ⧋āĻĨāĻžāĻ“ āϚāϞ⧇ āϝāĻžāĻ“āϝāĻŧāĻžāϰ āĻ¸ā§āĻŦāĻžāϧ⧀āύāϤāĻž āĻĨāĻžāĻ•āĻŦ⧇ āύāĻžāĨ¤ āĻāχ āĻĢāĻžāρāĻĻāϕ⧇ Vendor lock-in āĻŦāϞ⧇āĨ¤

  • Data Access Layer / Repository Pattern: āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āϕ⧋āϰ āϞāϜāĻŋāϕ⧇āϰ āϭ⧇āϤāϰ⧇ āϏāϰāĻžāϏāϰāĻŋ SQL āϕ⧋āϝāĻŧāĻžāϰāĻŋ āύāĻž āϞāĻŋāϖ⧇, āĻāĻ•āϟāĻŋ āϞ⧇āϝāĻŧāĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ (Interface / Abstract Layer)āĨ¤ āϕ⧋āĻĄ āĻļ⧁āϧ⧁ āϏ⧇āχ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āĻĨāĻž āĻŦāϞ⧇āĨ¤
  • āφāϜ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏāϟāĻŋ āĻšāϝāĻŧāϤ⧋ MySQL āĻāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāύ⧇āĻ•ā§āĻŸā§‡āĻĄ, āĻ­āĻŦāĻŋāĻˇā§āϝāϤ⧇ āϝāĻĻāĻŋ PostgreSQL āĻŦāĻž NoSQL āĻ āĻļāĻŋāĻĢāϟ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ, āϤāĻŦ⧇ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āĻŽā§‡āχāύ āϕ⧋āĻĄ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻžāϰ āĻĻāϰāĻ•āĻžāϰ āύ⧇āχ, āĻļ⧁āϧ⧁ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ⧇āϰ āĻ•āĻžāύ⧇āĻ•āĻļāύ āϞāϜāĻŋāĻ•āϟ⧁āϕ⧁ āĻĒāĻžāĻ˛ā§āϟāϞ⧇āχ āĻ•āĻžāϜ āĻšāϝāĻŧ⧇ āϝāĻžāĻŦ⧇āĨ¤

How do you balance innovation with stability?​

  • Core vs Edge Strategy: āφāĻĒāύāĻžāϰ āϕ⧋āϰ āĻŦāĻŋāϜāύ⧇āϏ⧇āϰ āĻĄā§‡āϟāĻž (āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ, āχāωāϜāĻžāϰ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏ, āĻ•ā§āϰāĻŋāϟāĻŋāĻ•ā§āϝāĻžāϞ āϞāϜāĻŋāĻ•) āϏāĻŦāϏāĻŽāϝāĻŧ āĻĒā§āϰāĻŽāĻžāĻŖāĻŋāϤ, āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ, āĻŦā§‹āϰāĻŋāĻ‚ āĻ•āĻŋāĻ¨ā§āϤ⧁ ā§§ā§Ļā§Ļ% āϰāĻŋāϞāĻžāϝāĻŧ⧇āĻŦāϞ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ (āϝ⧇āĻŽāύ PostgreSQL) āϰāĻžāĻ–āĻŦ⧇āύāĨ¤
  • āĻ…āĻ¨ā§āϝāĻĻāĻŋāϕ⧇ āχāύ⧋āϭ⧇āĻļāύ, āϰ⧇āĻ•āĻŽā§‡āĻ¨ā§āĻĄā§‡āĻļāύ āĻŦāĻž āϏāĻžāĻ°ā§āϚ āĻĢāĻŋāϚāĻžāϰ⧇āϰ (Edge services) āϜāĻ¨ā§āϝ āύāϤ⧁āύ āĻĒā§āϰāϜāĻ¨ā§āĻŽā§‡āϰ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ (Vector Databases, AI Search) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ, āĻ•āĻžāϰāĻŖ āĻāϗ⧁āϞ⧋ āĻ•ā§āĻ°ā§āϝāĻžāĻļ āĻ•āϰāϞ⧇āĻ“ āχāωāϜāĻžāϰ⧇āϰ āϖ⧁āĻŦ āĻŦ⧇āĻļāĻŋ āĻ•ā§āώāϤāĻŋ āĻšāĻŦ⧇ āύāĻžāĨ¤ āĻāϤ⧇ āĻ¸ā§āĻŸā§āϝāĻžāĻŦāĻŋāϞāĻŋāϟāĻŋāϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻŽāĻĄāĻžāĻ°ā§āύ āĻŸā§‡āĻ•āύ⧋āϞāϜāĻŋāĻ“ āωāĻĒāĻ­ā§‹āĻ— āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤