QuestionWhat are the implications of using a shared database in microservices?

Understanding Database per Service in Microservices Architecture

  • medium level
  • 60-sec video
  • 5-min read
  • 5-question quiz

The big idea

Database per Service ensures each microservice owns its data, reducing dependencies.

Your path

Log in to save progress

Explain it like I’m 10

Imagine each toy box is a microservice. If one box shares toys with another, changing a toy in one box can mess up the other. If each box has its own toys, they can change freely without problems.

Introduction

In microservices architecture, the Database per Service pattern is crucial for maintaining autonomy and reducing coupling between services. This concept ensures that each microservice owns its data, which is essential for independent development and deployment.

The Shared Database Problem

  • When multiple services (like Order, Payment, and Inventory) share the same database schema, changes in one service can impact others.
  • This leads to schema-level coupling, making it difficult to evolve services independently.

What Is Database per Service?

  • Each microservice should own its domain data, controlling access to its own persistence layer.
  • Examples:
    • Order Service → Owns Order Data
    • Payment Service → Owns Payment Data
    • Inventory Service → Owns Inventory Data
  • Note: Owning data does not necessarily mean a separate physical database server is required. Logical separation (schemas) can also be effective.

How Do Services Share Data?

  • Services should not directly access each other's databases. Instead, they can communicate through:
    • APIs: Requesting data or invoking actions.
    • Events: Publishing events like OrderCreated or PaymentCompleted.
    • Read Models: Creating query-friendly views for data needed from multiple services.

Benefits of Database per Service

  • Clearer Data Ownership: Each service knows its data.
  • Reduced Schema-Level Coupling: Changes in one service do not affect others.
  • Greater Service Autonomy: Services can evolve independently.
  • Independent Evolution of Persistence: Each service can choose its database technology if needed.

Trade-Offs

  • Cross-service queries become complex. Instead of a simple SQL JOIN, you might need API composition or dedicated read models.
  • Business operations that span multiple services may require distributed workflows, leading to complexities in consistency. Patterns like Saga or Transactional Outbox can help manage these complexities.

Conclusion

In system design interviews, it’s important to explain not just the concept of Database per Service, but also the data ownership, access, and inter-service communication strategies. This demonstrates a deeper understanding of microservices architecture.

Where you’ll see this

This concept is applied in companies like Flipkart and Zomato, where different services manage their own data independently.

How exams test this

Exams may ask about the advantages and challenges of Database per Service; a common trap is misunderstanding data ownership.

📖 Words to know

Microservices
An architectural style that structures an application as a collection of loosely coupled services.
Schema-Level Coupling
Dependency between services due to shared database schema.
Saga
A pattern for managing distributed transactions across multiple services.

Got it? Lock it in 🔒

5 quick questions. Students who test themselves remember far more than those who just re-read.

Learn next

Watch first

Course outline · 220 topics
  1. 1What FAANG Interviewers Evaluate in System Design Interviews
  2. 2Understanding High-Level Design (HLD) and Low-Level Design (LLD)
  3. 3Understanding Functional and Non-Functional Requirements
  4. 4Understanding Scalable System Design in FAANG Companies
  5. 5Understanding Latency, Throughput, and Response Time
  6. 6Understanding Availability vs Reliability in System Design
  7. 7Understanding Latency and Throughput in System Design
  8. 8Understanding Vertical and Horizontal Scaling in System Design
  9. 9Stateless vs Stateful Servers: Scaling Made Easy
  10. 10Monolith vs Microservices: Choosing the Right Architecture
  11. 11Understanding Load Balancers in System Design
  12. 12L4 vs L7 Load Balancers: Key Differences Explained
  13. 13Understanding Reverse Proxy in High-Level Design
  14. 14Understanding CDN: How Cache Hits Improve Performance
  15. 15Understanding Cache Hits: Reducing Database Load
  16. 16Understanding the Cache-Aside Pattern in System Design
  17. 17Redis: Why Is It So Fast for High-Scale Systems?
  18. 18SQL vs NoSQL: Choosing the Right Database for Your Needs
  19. 19Understanding Database Replication in High-Level Design
  20. 20Understanding Sharding: How Databases Manage Large Data
  21. 21FAANG HLD 🔥 | Partition Pruning Explained — Scan Less, Query Faster! ⚡
  22. 22B-Tree Index: Efficient Database Navigation
  23. 23Read-After-Write Consistency in Database Systems
  24. 24Understanding Read Replicas in Database Scaling
  25. 25Identifying and Optimizing Database Bottlenecks
  26. 26Understanding CAP Theorem: Trade-offs in Distributed Systems
  27. 27Understanding Consistency Models in Distributed Systems
  28. 28Understanding Quorum Reads in Distributed Systems
  29. 29Leader Election in Distributed Systems: Handling Leader Failures
  30. 30Log Replication and Majority Commit in Distributed Systems
  31. 31Consistent Hashing: Key to Distributed Systems Scalability
  32. 32Distributed Caching: Why Spread It Out?
  33. 33Cache Eviction Policies: LRU, LFU, and FIFO Explained
  34. 34Cache Invalidation: TTL vs Freshness Explained
  35. 35Understanding Cache Stampede in High-Level Design
  36. 36Understanding Cache Penetration in System Design
  37. 37Understanding Cache Breakdown and Request Coalescing
  38. 38Token Bucket Rate Limiting Explained for Interviews
  39. 39Token Bucket vs Leaky Bucket: Key Differences Explained
  40. 40API Gateway: The Front Door of Your System
  41. 41API Gateway vs Proxy vs Load Balancer: Key Differences
  42. 42Service Discovery in Microservices Architecture
  43. 43DNS Service Discovery: Is DNS Enough for Microservices?
  44. 44Understanding DNS Record Types: A, CNAME, MX, and More
  45. 45Understanding DNS Resolution: How URLs Load in Browsers
  46. 46Understanding TCP 3-Way Handshake: SYN, SYN-ACK, ACK
  47. 47Understanding the TLS Handshake in HTTPS Connections
  48. 48HTTP vs HTTPS: Understanding the Key Differences
  49. 49Understanding HTTP Methods and Status Codes
  50. 50REST API Design: Building Scalable APIs for Real-World Use
  51. 51API Pagination: Efficiently Handling Large Datasets
  52. 52Database Indexing: How to Make Queries Fast
  53. 53Composite Indexes: Speed Up Multi-Column Queries in Databases
  54. 54Read vs Write Scaling: How to Scale Databases
  55. 55Database Replication: Scale and Survive Failures
  56. 56Sync vs Async Replication: Choosing the Right Approach
  57. 57Failover and Split-Brain in High-Level Design
  58. 58Understanding Write-Ahead Log (WAL) in Databases
  59. 59Understanding Transactions and ACID Properties in Databases
  60. 60Understanding Database Isolation Levels in Software Engineering
  61. 61Optimistic vs Pessimistic Locking in Database Management
  62. 62Understanding 2-Phase Commit in Distributed Transactions
  63. 63Understanding the Saga Pattern in Distributed Transactions
  64. 64Transactional Outbox Pattern: Never Lose Events!
  65. 65Understanding Idempotency in System Design
  66. 66Understanding Message Queues in Distributed Systems
  67. 67Queue vs Pub/Sub: Key Differences in System Design
  68. 68Understanding Apache Kafka for Scalable Event Streaming
  69. 69Understanding Kafka Partitioning for Scalable Messaging
  70. 70Message Delivery Semantics: At-Most-Once vs At-Least-Once vs Exactly-Once
  71. 71Understanding Kafka Consumer Lag and Its Impact
  72. 72Kafka Retention vs Compaction: History or Latest State?
  73. 73Kafka Exactly-Once Processing: Avoiding Duplicates
  74. 74Kafka Schema Evolution: Changing Schemas Without Breaking Consumers
  75. 75Kafka Producer Reliability: ACKs, Retries & Idempotence
  76. 76Kafka Ordering and Keys: Ensuring Message Order
  77. 77Kafka Consumer Offsets: Auto Commit vs Manual Commit
  78. 78Understanding Kafka Retries and Dead Letter Queue (DLQ)
  79. 79FAANG HLD 🔥 | Kafka Backpressure Explained — What Happens When Consumers Can't Keep Up? 🚨
  80. 80Understanding Kafka Brokers, Controllers, and KRaft Architecture
  81. 81Kafka Replication and ISR: Ensuring Data Availability
  82. 82Kafka Partition Reassignment: Move Replicas Without Data Loss
  83. 83Kafka Consumer Group Rebalancing Explained
  84. 84Kafka Consumer Assignment Strategies: Range vs RoundRobin vs Sticky
  85. 85Kafka Consumer Liveness: Heartbeats, Sessions & Timeouts Explained
  86. 86Kafka Consumer Lag Monitoring: Prevent Production Issues
  87. 87Kafka Lag Recovery Time: How Fast Can Consumers Catch Up?
  88. 88Kafka Consumer Fetch & Batching: Boosting Throughput
  89. 89Kafka Fetch Limits vs Poll Records: Understanding the Difference
  90. 90Kafka Eager vs Cooperative Rebalancing: Key Differences
  91. 91Kafka Static Membership: Reducing Unnecessary Rebalancing
  92. 92Understanding Kafka Rebalance Listeners in High-Level Design
  93. 93Understanding Kafka Offset Reset: Earliest vs Latest
  94. 94Kafka Replay Safely: Reprocess Messages Without Losing Data
  95. 95Kafka Commit Strategies: Auto vs Manual Commit Explained
  96. 96Kafka commitSync vs commitAsync: Choosing the Right Method
  97. 97Kafka Async Commit Ordering: Can Older Offsets Overwrite Newer Ones?
  98. 98Kafka Consumer Concurrency: Understanding Partitions and Threads
  99. 99Kafka Consumer Multithreading: Processing Messages in Parallel
  100. 100Kafka Consumer Parallelism: Partitions, Keys, and Throughput
  101. 101Kafka Consumer Pause & Resume: Managing Backpressure Smartly
  102. 102Kafka Backpressure Strategies: Handling Traffic Spikes
  103. 103Kafka Graceful Shutdown: Stop Without Losing Work
  104. 104Kafka Error Handling and Retry Strategies in HLD
  105. 105Kafka Retry Topics and Delayed Retries Explained
  106. 106Understanding Kafka Dead Letter Topics and Poison Messages
  107. 107Kafka Poison Messages: Risks of Infinite Retries
  108. 108Kafka Consumer Reprocessing: Safe Event Replay Strategies
  109. 109Kafka Replay Without Breaking Production: Safe Architecture
  110. 110Kafka Pause vs Seek: Key Differences Explained
  111. 111FAANG HLD 🔥 | Kafka Seek — Replay Specific Messages Without Replaying Everything! 🎯
  112. 112Kafka subscribe() vs assign(): Who Controls Partition Assignment?
  113. 113Kafka Manual Partition Assignment: Using assign() for Control
  114. 114Kafka Rebalance: Avoiding Work Loss or Duplication
  115. 115Kafka Consumer Crash Recovery: Resuming Processing Explained
  116. 116Kafka Consumer State: Position, Offset, and Business State
  117. 117Kafka Stateful Stream Processing: How Does It Remember?
  118. 118Kafka Streams vs Consumer: Choosing the Right Tool
  119. 119Kafka Streams Local State: Fast Processing and Recovery
  120. 120Kafka Streams Windowing: Tumbling vs Hopping Windows Explained
  121. 121Distributed Locks: Preventing Duplicate Work Across Servers
  122. 122Choosing a Distributed Lock: Redis vs Database vs ZooKeeper
  123. 123Leader Election in Distributed Systems Explained
  124. 124Leader Election Algorithms: Bully vs Raft vs ZooKeeper
  125. 125Understanding Consensus in Distributed Systems
  126. 126Understanding Raft Consensus: Terms, Elections & Log Replication
  127. 127Understanding Raft Log Replication: matchIndex vs commitIndex
  128. 128Raft Leader Failure and Re-election Process Explained
  129. 129FAANG HLD 🔥 | Raft Safety — Why Committed Entries Survive Leader Failure! 🛡️
  130. 130Understanding Quorum and Majority in Distributed Systems
  131. 131Paxos Consensus: Understanding Distributed Agreement
  132. 132FAANG HLD 🔥 | Raft vs Paxos — What's the Difference? Consensus Explained! ⚡
  133. 133ZooKeeper Architecture and ZAB Explained
  134. 134Understanding ZooKeeper Ephemeral and Sequential Nodes
  135. 135ZooKeeper Watches: Avoiding the Thundering Herd Problem
  136. 136HLD: Crash Failures vs Network Failures in Distributed Systems
  137. 137HLD: Fail-Stop vs Fail-Recover Explained
  138. 138Understanding Network Partitions in Distributed Systems
  139. 139Understanding Partial Failure in Distributed Systems
  140. 140HLD: Understanding Server Failure Detection and Timeouts
  141. 141Understanding Distributed Clocks in Systems Design
  142. 142Understanding Physical vs Logical Time in Distributed Systems
  143. 143Understanding Lamport Timestamps in Distributed Systems
  144. 144Understanding Vector Clocks in Distributed Systems
  145. 145Understanding Causality in Distributed Systems
  146. 146Understanding RPC: Remote Procedure Calls in Distributed Systems
  147. 147HLD: Understanding REST, RPC, and gRPC Differences
  148. 148Understanding gRPC Architecture: Behind the Call
  149. 149Protobuf and Schema Evolution: Avoid Breaking Changes
  150. 150Understanding Unary vs Streaming RPC in gRPC
  151. 151HLD: Synchronous vs Asynchronous Communication Explained
  152. 152HLD: Understanding Request-Response vs Events in System Design
  153. 153HLD: 5 Microservices Communication Patterns Explained
  154. 154Connection Pooling Explained: Why a Bigger Pool Can Hurt
  155. 155Keep-Alive in Networking: Efficient HTTP Connections
  156. 156When to Use Microservices in Software Design
  157. 157HLD: Microservices vs Modular Monolith Explained
  158. 158Choosing Service Boundaries in Microservices Architecture
  159. 159Understanding Database per Service in Microservices Architecture
  160. 160HLD: Shared DB vs Database per Service Trade-Offs
  161. 161HLD: Circuit Breaker Explained to Prevent Failures
  162. 162Understanding the Retry Pattern in System Design
  163. 163HLD Timeout Pattern: Understanding Timeouts in Distributed Systems
  164. 164Understanding the Bulkhead Pattern in System Design
  165. 165HLD: Fallbacks Explained for System Design
  166. 166Understanding Retry Storms in Distributed Systems
  167. 167Exponential Backoff: Managing Retry Storms in Systems
  168. 168Understanding Jitter in High-Level Design
  169. 169Understanding Circuit Breaker: CLOSED, OPEN, and HALF-OPEN States
  170. 170Cascading Failures in Distributed Systems Explained
  171. 171Load Shedding in Distributed Systems: Protecting Capacity
  172. 172Graceful Degradation in System Design
  173. 173Distributed Backpressure: Managing Service Overload
  174. 174HLD: Fail Fast vs Fail Safe in System Design
  175. 175HLD: Managing Dependency Failures in Distributed Systems
  176. 176Understanding Logs, Metrics, and Traces in Software Engineering
  177. 177Observability in Distributed Systems: Debugging Production Issues
  178. 178Structured Logging: Debugging Production Issues Faster
  179. 179Understanding Correlation IDs in Microservices Architecture
  180. 180Understanding Distributed Tracing in Microservices Architecture
  181. 181Understanding the RED Method for Microservices Monitoring
  182. 182Understanding the USE Method for Infrastructure Bottlenecks
  183. 183Understanding SLIs, SLOs, and SLAs in Reliability Engineering
  184. 184Understanding Error Budgets in High-Level Design
  185. 185Understanding Alerting in High-Level Design
  186. 186HLD: Search Engine Architecture and Its Components
  187. 187Inverted Index: How Search Engines Find Pages Efficiently
  188. 188HLD: Tokenization and Analyzers in Search Engines
  189. 189HLD: Stemming and Normalization in Search Engines
  190. 190HLD: Full-Text Search vs Database Search with Elasticsearch
  191. 191Elasticsearch Architecture: How Distributed Search Works
  192. 192Elasticsearch Shards vs Replicas: Partitioning vs Duplication
  193. 193Elasticsearch Indexing: Why Can't You Search Your Document Yet?
  194. 194Elasticsearch Query Execution: How Searches Work Across Shards
  195. 195Elasticsearch Refresh: Why Your Document Isn’t Searchable Yet
  196. 196Understanding Elasticsearch Relevance Scoring with BM25
  197. 197Elasticsearch Filters vs Queries: MUST vs FILTER Explained
  198. 198Elasticsearch Aggregations: Metrics vs Buckets Explained
  199. 199Elasticsearch Pagination: From & Size vs Search After
  200. 200Understanding Elasticsearch ILM: Hot, Warm, Cold Phases
  201. 201Elasticsearch Aliases and Rollover: Zero-Downtime Index Switching
  202. 202Understanding Elasticsearch Data Streams in HLD
  203. 203Understanding Elasticsearch Index Templates and Components
  204. 204Elasticsearch Mapping: Dynamic vs Explicit Explained
  205. 205Understanding Elasticsearch Shards and Replicas in HLD
  206. 206Elasticsearch Cluster Sizing: How Many Nodes Do You Need?
  207. 207Understanding Elasticsearch Node Roles for Scaling Clusters
  208. 208Elasticsearch Split Brain: Master Election and Quorum Explained
  209. 209Understanding Elasticsearch Snapshots: Replicas vs Backups
  210. 210Understanding Elasticsearch Cross-Cluster Replication (CCR)
  211. 211Understanding Elasticsearch ILM for Cost Management
  212. 212Elasticsearch Data Streams vs. Time-Based Indices: Which to Choose?
  213. 213Elasticsearch Zero-Downtime Reindexing: The Alias Switch Trick
  214. 214Elasticsearch Reindexing: Understanding the Dual-Write Trap
  215. 215Elasticsearch Query Optimization: Filters and Caching
  216. 216Elasticsearch Pagination: Fixing Slow Page Searches
  217. 217Elasticsearch Aggregations: Buckets, Metrics, and Cardinality
  218. 218Elasticsearch Autocomplete: Completion vs. Edge N-Grams vs. Search-as-You-Type
  219. 219Elasticsearch Fuzzy Search: Handling Typos in Queries
  220. 220Understanding Elasticsearch Synonyms and Analyzers

Connected concepts