Architecture and Design Decisions
đī¸ 18. Architecture & Design Decisionsâ
159. When would you choose NoSQL over SQL database?â
NoSQL āĻāĻŦāĻ SQL āĻāϰ āĻŽāϧā§āϝ⧠āύāĻŋāϰā§āĻŦāĻžāĻāύ āĻāϰāĻž āϏāĻŋāϏā§āĻā§āĻŽ āĻĄāĻŋāĻāĻžāĻāύā§āϰ āĻ āύā§āϝāϤāĻŽ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āϏāĻŋāĻĻā§āϧāĻžāύā§āϤāĨ¤ āĻāĻĒāύāĻŋ āϤāĻāύ NoSQL āĻŦā§āĻā§ āύā§āĻŦā§āύ āϝāĻāύ āĻāĻĒāύāĻžāϰ āϏāĻŋāϏā§āĻā§āĻŽā§ āĻĒā§āϰāĻĨāĻžāĻāϤ āϰāĻŋāϞā§āĻļāύāĻžāϞ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ (SQL) āϏā§āĻŽāĻžāϰā§āĻāĻž āĻĒāĻžāϰ āĻšāϝāĻŧā§ āϝāĻžāĻāϝāĻŧāĻžāϰ āĻāĻĒāĻā§āϰāĻŽ āĻšāϝāĻŧāĨ¤
Specific use cases for each type:
- SQL (RDBMS): āĻŦā§āϝāĻžāĻāĻāĻŋāĻ, āĻ-āĻāĻŽāĻžāϰā§āϏ āĻĒā§āĻŽā§āύā§āĻ, āĻāύāĻā§āύā§āĻāϰāĻŋ, āĻāĻāĻžāĻāύā§āĻāĻŋāĻâāϝā§āĻāĻžāύ⧠ACID (Atomicity, Consistency, Isolation, Durability) āĻāĻŦāĻ āϰāĻŋāϞā§āĻļāύāĻžāϞ āĻĄā§āĻāĻž (āϞāĻ āĻ āĻāϝāĻŧā§āύ) āĻŽāĻžāϏā§āĻāĨ¤
- NoSQL (Document/Key-Value/Graph):
- High Write Velocity: āĻāĻāĻāĻāĻŋ (IoT), āϏā§āύā§āϏāϰ āĻĄā§āĻāĻž āĻŦāĻž āϰāĻŋāϝāĻŧā§āϞ-āĻāĻžāĻāĻŽ āϞāĻāϏ (Cassandra āĻŦāĻž Time-Series Database)āĨ¤
- Flexible Schema: āĻāύā§āĻā§āύā§āĻ āĻŽā§āϝāĻžāύā§āĻāĻŽā§āύā§āĻ āϏāĻŋāϏā§āĻā§āĻŽ (CMS), āĻā§āϝāĻžāĻāĻžāϞāĻ, āϝā§āĻāĻžāύ⧠āĻĒā§āϰāϤāĻŋ āĻāĻāĻā§āĻŽā§āϰ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āĻāϞāĻžāĻĻāĻž (MongoDB)āĨ¤
- Graph Relationships: āϏā§āĻļā§āϝāĻžāϞ āĻŽāĻŋāĻĄāĻŋāϝāĻŧāĻž āĻĢā§āϰā§āύā§āĻĄāϏ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ, āĻĢā§āϰāĻĄ āĻĄāĻŋāĻā§āĻāĻļāύ (Neo4j)āĨ¤
- High Read/Cache: āϏā§āĻļāύ āĻā§āĻā§āύ, āϞāĻŋāĻĄāĻžāϰāĻŦā§āϰā§āĻĄ (Redis, Memcached)āĨ¤
Can you give examples of wrong choices?â
- āĻā§āϞ āĻĒāĻāύā§āĻĻ ā§§: āĻāĻāĻāĻŋ āϏā§āĻļā§āϝāĻžāϞ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻā§āϰ
users,posts,comments, āĻāĻŦāĻlikesāĻā§āϰā§āϝāĻžāĻāĻŋāĻ āĻāϰāĻžāϰ āĻāύā§āϝ MySQL āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻāĻŦāĻ āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ ā§Ģ-ā§ŦāĻāĻŋ āĻā§āĻŦāĻŋāϞ⧠āĻāĻŽāĻĒā§āϞā§āĻā§āϏ JOIN āĻāϰāĻžāĨ¤ āĻāϤ⧠āϏāĻŋāϏā§āĻā§āĻŽ āĻā§āĻŦ āĻĻā§āϰā§āϤ āĻā§āϰā§āϝāĻžāĻļ āĻāϰāĻŦā§āĨ¤ - āĻā§āϞ āĻĒāĻāύā§āĻĻ ā§¨: āĻāĻāĻāĻŋ āĻŦā§āϝāĻžāĻāĻāĻŋāĻ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύā§āϰ āĻāĻžāĻāĻž āĻā§āϰāĻžāύā§āϏāĻĢāĻžāϰā§āϰ āĻā§āϰ āϞāĻāĻŋāĻ MongoDB āϤ⧠āϰāĻžāĻāĻžāĨ¤ MongoDB āĻāĻā§āύāĻā§āϝāĻŧāĻžāϞ āĻāύāϏāĻŋāϏ ā§āĻā§āύā§āϏāĻŋ āĻ āĻĄā§āύāϰā§āĻŽāĻžāϞāĻžāĻāĻā§āĻļāύā§āϰ āĻāĻĒāϰ āĻŦā§āĻļāĻŋ āĻĢā§āĻāĻžāϏāĻĄ, āϤāĻžāĻ āĻšāĻ āĻžā§ āĻĢā§āĻāϞāĻāĻāĻžāϰā§āϰ āĻāĻžāϰāĻŖā§ āĻā§āϰāĻžāύāĻā§āĻāĻļāύ⧠āĻāĻĄāĻŧāĻŽāĻŋāϞ (Double Spending) āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
How do you handle transactions in NoSQL?â
āϝāĻĻāĻŋāĻ NoSQL āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāϝāĻŧā§āύ āĻŦāĻž āĻŽāĻžāϞā§āĻāĻŋ-āĻā§āĻŦāĻŋāϞ āĻā§āϰāĻžāύāĻā§āĻāĻļāύ āϏāĻžāĻĒā§āϰā§āĻ āĻāϰ⧠āύāĻž, āϤāĻžāϰāĻĒāϰāĻ āĻā§āϰāĻžāύāĻā§āĻāĻļāύ āĻšā§āϝāĻžāύā§āĻĄā§āϞ āĻāϰāĻžāϰ āĻāĻŋāĻā§ āĻāĻĒāĻžāϝāĻŧ āĻāĻā§:
- Single-Document Atomicity: MongoDB-āϤ⧠āĻāĻāĻāĻŋ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻĄāĻā§āĻŽā§āύā§āĻā§āϰ āĻāĻĒāϰ āϰāĻžāĻāĻ āĻ āĻĒāĻžāϰā§āĻļāύ āĻ ā§āϝāĻžāĻāĻŽāĻŋāĻāĨ¤ āϤāĻžāĻ āϰāĻŋāϞā§āĻā§āĻĄ āϏāĻŦ āĻĄā§āĻāĻž (āϝā§āĻŽāύ: āĻ āϰā§āĻĄāĻžāϰ āĻāĻŦāĻ āĻ āϰā§āĻĄāĻžāϰā§āϰ āĻāĻāĻā§āĻŽāĻā§āϞā§) āĻāĻāĻāĻŋ āϏāĻŋāĻā§āĻā§āϞ JSON āĻĄāĻā§āĻŽā§āύā§āĻā§āϰ āĻā§āϤāϰ⧠Embed āĻāϰ⧠āϰāĻžāĻāϞ⧠āϤāĻž 100% āĻ ā§āϝāĻžāĻāĻŽāĻŋāĻ āĻšāϝāĻŧāĨ¤
- Two-Phase Commit (2PC) / Saga Pattern: āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϞā§āĻā§āϞ⧠āĻā§āĻĄ āϞāĻŋāĻā§ āĻāĻāĻžāϧāĻŋāĻ āĻĄāĻā§āĻŽā§āύā§āĻā§ āĻāĻĒāĻĄā§āĻ āĻāĻžāϞāĻžāύ⧠āĻāĻŦāĻ āĻā§āύ⧠āĻāĻāĻāĻŋ āĻĢā§āĻāϞ āĻāϰāϞ⧠āĻāĻŽā§āĻĒā§āύāϏā§āĻāĻŋāĻ (Compensating) āĻā§āĻĄ āϞāĻŋāĻā§ āĻāĻā§āϰāĻā§āϞ⧠āϰā§āϞāĻŦā§āϝāĻžāĻ āĻāϰāĻž (Two-phase commit)āĨ¤
160. Microservices: shared database vs database per service?â
āĻŽāĻžāĻāĻā§āϰā§āϏāĻžāϰā§āĻāĻŋāϏā§āϰ āĻĻā§āύāĻŋāϝāĻŧāĻžāϝāĻŧ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĄāĻŋāĻāĻžāĻāύ āĻāĻāĻāĻŋ āĻā§āϞāĻžāϏāĻŋāĻ āĻĄāĻŋāϞā§āĻŽāĻžāĨ¤
Trade-offs of each approach?â
ā§§. Shared Database (āϏāĻŦ āϏāĻžāϰā§āĻāĻŋāϏā§āϰ āĻāύā§āϝ ā§§āĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ):
- āϏā§āĻŦāĻŋāϧāĻž: āĻĄā§āĻā§āϞāĻĒ āĻāϰāĻž āĻā§āĻŦ āϏāĻšāĻāĨ¤ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻŽāϧā§āϝ⧠āϏāĻžāϧāĻžāϰāĻŖ JOIN āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϏāĻšāĻā§āĻ āϏāĻŦ āĻĄā§āĻāĻž āĻāύāĻž āϝāĻžāϝāĻŧāĨ¤ āĻā§āϰāĻžāύāĻā§āĻāĻļāύ (ACID) āĻŽā§āĻāύāĻā§āĻāύ āĻāϰāĻž āϏāĻšāĻāĨ¤
- āĻ āϏā§āĻŦāĻŋāϧāĻž: āĻāĻāĻŋ āĻŽāĻžāĻāĻā§āϰā§āϏāĻžāϰā§āĻāĻŋāϏā§āϰ āĻŽā§āϞ āύā§āϤāĻŋ (Coupling)-āĻāϰ āĻĒāϰāĻŋāĻĒāύā§āĻĨā§āĨ¤ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āϰā§āϝāĻžāĻļ āĻāϰāϞ⧠āĻĒā§āϰ⧠āĻā§āĻŽā§āĻĒāĻžāύāĻŋ āĻĄāĻžāĻāύ āĻšāϝāĻŧā§ āϝāĻžāĻŦā§ (Single Point of Failure)āĨ¤ āĻāĻāĻāĻŋ āĻāĻŋāĻŽā§āϰ āϏā§āĻāĻŋāĻŽāĻž āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻ āύā§āϝ āĻāĻŋāĻŽāĻā§ āĻāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤
⧍. Database-per-service (āĻĒā§āϰāϤāĻŋāĻāĻŋ āϏāĻžāϰā§āĻāĻŋāϏā§āϰ āĻāϞāĻžāĻĻāĻž āĻĄāĻžāĻāĻžāĻŦā§āϏ):
- āϏā§āĻŦāĻŋāϧāĻž: āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻĄāĻŋāĻāĻžāĻĒāϞāĻĄ (Decoupled)āĨ¤
User ServiceāĻāĻžāĻāϞ⧠MySQL āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§, āĻāϰSearch ServiceāĻāĻžāĻāϞ⧠Elasticsearch āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠(Right tool for the right job)āĨ¤ āĻāĻ āϏāĻžāϰā§āĻāĻŋāϏ⧠āϏāĻŽāϏā§āϝāĻž āĻšāϞ⧠āĻ āύā§āϝ āϏāĻžāϰā§āĻāĻŋāϏ āĻāϞāϤ⧠āĻĨāĻžāĻā§āĨ¤ - āĻ āϏā§āĻŦāĻŋāϧāĻž: āĻĻā§āĻāĻŋ āĻāĻŋāύā§āύ āϏāĻžāϰā§āĻāĻŋāϏā§āϰ āĻĄā§āĻāĻž (āϝā§āĻŽāύ: Order History āĻāĻŦāĻ User details) āĻāĻāϏāĻžāĻĨā§ āĻĻā§āĻāĻžāϰ āĻāύā§āϝ JOIN āĻāϰāĻž āϝāĻžāϝāĻŧ āύāĻžāĨ¤ API āĻŦāĻž āĻāĻā§āύā§āĻā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻĄā§āĻāĻž āϝā§āĻāĻžāĻĄāĻŧ āĻāϰāϤ⧠āĻšāϝāĻŧ, āϝāĻž āĻŦā§āĻļ āĻāĻāĻŋāϞ āĻ āϏā§āϞā§āĨ¤
How do you handle cross-service transactions?â
āϧāϰāĻž āϝāĻžāĻ, āĻ-āĻāĻŽāĻžāϰā§āϏ⧠Order Service āĻ āĻ
āϰā§āĻĄāĻžāϰ āĻšāϞā§, āĻāϰāĻĒāϰ Inventory Service āĻĨā§āĻā§ āĻĒā§āϰā§āĻĄāĻžāĻā§āĻ āĻŽāĻžāĻāύāĻžāϏ āĻšāϤ⧠āĻšāĻŦā§āĨ¤ āϝā§āĻšā§āϤ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻŋāύā§āύ, āϤāĻžāĻ āϏāĻžāϧāĻžāϰāĻŖ āĻā§āϰāĻžāύāĻā§āĻāĻļāύ (SQL COMMIT) āĻāĻāĻžāύ⧠āĻāĻžāĻ āĻāϰāĻŦā§ āύāĻžāĨ¤
- āϏāĻŽāĻžāϧāĻžāύ - Saga Pattern:
Order ServiceāĻ āϰā§āĻĄāĻžāϰ āϤā§āϰāĻŋ āĻāϰā§PendingāϏā§āĻā§āϝāĻžāĻāĻžāϏ āĻĻāĻŋāϝāĻŧā§ Kafka āϤ⧠āĻāĻā§āύā§āĻ āĻĒāĻžāĻ āĻžāϝāĻŧāĨ¤Inventory ServiceāϤāĻž āĻļā§āύ⧠āĻāύāĻā§āύā§āĻāϰāĻŋ āĻāĻŽāĻžāϝāĻŧ āĻāĻŦāĻSuccessāĻāĻā§āύā§āĻ āĻĒāĻžāĻ āĻžāϝāĻŧāĨ¤Order Serviceāϰā§āϏāĻĒāύā§āϏ āĻĒā§āϝāĻŧā§ āĻ āϰā§āĻĄāĻžāϰConfirmedāĻāϰā§āĨ¤
- āϝāĻĻāĻŋ āĻāύāĻā§āύā§āĻāϰāĻŋ āύāĻž āĻĨāĻžāĻā§, āϏā§
FailedāĻāĻā§āύā§āĻ āĻĒāĻžāĻ āĻžāϝāĻŧ āĻāĻŦāĻOrder ServiceāϤāĻāύ āĻ āϰā§āĻĄāĻžāϰāĻāĻŋāĻā§ āĻāĻŽā§āĻĒā§āύāϏā§āĻ āĻāϰā§CancelledāĻāϰ⧠āĻĻā§āϝāĻŧ (āϝāĻžāĻā§ Compensating Transaction āĻŦāϞā§)āĨ¤
161. How do you handle soft deletes vs hard deletes?â
Soft Delete āĻŽāĻžāύ⧠āĻšāϞ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĨā§āĻā§ āĻĄā§āĻāĻž āĻŽā§āĻā§ āύāĻž āĻĢā§āϞ⧠āĻāĻāĻāĻŋ āĻĢā§āϞā§āϝāĻžāĻ (is_deleted=true āĻŦāĻž deleted_at=timestamp) āϏā§āĻ āĻāϰ⧠āĻĄā§āĻāĻž āĻšāĻžāĻāĻĄ āĻāϰ⧠āϰāĻžāĻāĻžāĨ¤ āĻāϰ Hard Delete āĻŽāĻžāύ⧠āĻšāϞ⧠DELETE FROM āĻāĻŽāĻžāύā§āĻĄ āĻāĻžāϞāĻŋāϝāĻŧā§ āĻšāĻžāϰā§āĻĄāĻĄāĻŋāϏā§āĻ āĻĨā§āĻā§ āĻāĻŋāϰāϤāϰ⧠āĻĄā§āĻāĻž āĻŽā§āĻā§ āĻĢā§āϞāĻžāĨ¤
Which is better for auditing requirements?â
- āĻ āĻĄāĻŋāĻāĻŋāĻ āĻāĻŦāĻ āĻšāĻŋāϏā§āĻā§āϰāĻŋ āĻā§āϰā§āϝāĻžāĻāĻŋāĻāϝāĻŧā§āϰ āĻāύā§āϝ Soft Delete āĻ āĻŦā§āϏā§āĻāĨ¤ āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻŦā§āĻāĻž āϝāĻžāϝāĻŧ āĻāĻāύ āĻĄ ā§āĻāĻžāĻāĻŋ āĻĄāĻŋāϞāĻŋāĻ āĻāϰāĻž āĻšāϝāĻŧā§āĻāĻŋāϞ āĻāĻŦāĻ āĻĒā§āϰāϝāĻŧā§āĻāύ⧠"Undo / Recover" āĻāϰāĻž āϏāĻŽā§āĻāĻŦ āĻšāϝāĻŧāĨ¤
- āĻŦā§āϝāĻžāĻāĻāĻŋāĻ āĻĄā§āĻāĻž, āĻāύāĻāϝāĻŧā§āϏ, āĻŦāĻž āĻā§āϰāĻžāύāĻā§āĻāĻļāύ⧠āĻāĻāύā§āĻ Hard Delete āĻāϰāĻž āĻāĻāĻŋāϤ āύāϝāĻŧāĨ¤
Performance implications of soft deletes?â
- āĻāύāĻĄā§āĻā§āϏāĻŋāĻ āĻāĻŦāĻ āĻā§āϝāĻŧā§āϰāĻŋ āϏā§āϞ⧠āĻšāϝāĻŧ: āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻĄā§āĻāĻž āĻāĻŽāϤ⧠āĻāĻŽāϤ⧠āĻŦāĻŋāĻļāĻžāϞ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧāĨ¤ āĻāϰ āĻĢāϞ⧠āϏāĻāϞ āĻā§āϝāĻŧā§āϰāĻŋāϤā§
WHERE is_deleted = falseāϞāĻžāĻāĻžāϤ⧠āĻšāϝāĻŧ, āϝāĻž āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ⧠āĻŦāĻŋāϰā§āĻĒ āĻĒā§āϰāĻāĻžāĻŦ āĻĢā§āϞā§āĨ¤ - āĻāĻāύāĻŋāĻ āĻāύāϏā§āĻā§āϰā§āĻāύā§āĻ āϏāĻŽāϏā§āϝāĻž: āϝāĻĻāĻŋ āĻāĻŽā§āĻāϞ āĻāϞāĻžāĻŽ UNIQUE āĻĨāĻžāĻā§ āĻāĻŦāĻ āĻāĻāĻāĻžāϰ
test@mail.comāϏāĻĢāĻ āĻĄāĻŋāϞāĻŋāĻ āĻāϰ⧠āύāϤā§āύ āĻāϰ⧠āĻāĻŦāĻžāϰ āĻāĻ āĻāĻŽā§āĻāϞ āĻĻāĻŋāϝāĻŧā§ āĻāĻāĻžāĻāύā§āĻ āĻā§āϞāϤ⧠āĻāĻžāϝāĻŧ, āϤāĻāύ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϤāĻžāĻā§ āĻā§āϞāϤ⧠āĻĻā§āĻŦā§ āύāĻž (Duplicate key error)āĨ¤
How do you clean up old soft-deleted records?â
āϏāĻĢāĻ āĻĄāĻŋāϞāĻŋāĻ āĻāϰāĻž āĻĄā§āĻāĻž āĻāĻŋāϰāĻāĻžāϞ āĻŽā§āϞ āĻā§āĻŦāĻŋāϞ⧠āĻāĻŽāĻŋāϝāĻŧā§ āϰāĻžāĻāϞ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏā§āϞ⧠āĻšāϝāĻŧā§ āϝāĻžāĻŦā§āĨ¤ āĻ āĻĨā§āĻā§ āĻŦāĻžāĻāĻāϤā§:
- Background Scrubbing Job: āĻāĻāĻāĻŋ āĻ
āĻā§āĻŽā§āĻā§āĻĄ āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻŦāĻž Cron Job āĻĨāĻžāĻā§, āϝāĻž āĻĒā§āϰāϤāĻŋ āϰāĻžāϤ⧠āϰāĻžāύ āĻāϰ⧠āĻāĻŦāĻ āĻĻā§āĻā§ āϝā§āϏāĻŦ āĻĄā§āĻāĻž
deleted_atāĻšāĻāϝāĻŧāĻžāϰ āĻĒāϰ ā§Šā§Ļ āĻŦāĻž ⧝ā§Ļ āĻĻāĻŋāύ āĻĒāĻžāϰ āĻšāϝāĻŧā§ āĻā§āĻā§, āϏā§āĻā§āϞā§āĻā§ āĻĒāĻžāϰā§āĻŽāĻžāύā§āύā§āĻāϞāĻŋ āĻšāĻžāϰā§āĻĄ āĻĄāĻŋāϞāĻŋāĻ āĻāϰ⧠āĻĻā§āϝāĻŧ, āĻ āĻĨāĻŦāĻž āĻŽā§āϞ āĻā§āĻŦāĻŋāϞ āĻĨā§āĻā§ āϏāϰāĻŋāϝāĻŧā§ āϏāϏā§āϤāĻž Archive/Cold Storage āĻā§āĻŦāĻŋāϞ⧠āϏā§āĻ āĻāϰ⧠āϰāĻžāĻā§āĨ¤
162. How do you design for multi-tenancy?â
Multi-tenancy āĻšāϞ⧠āĻāĻŽāύ āĻāĻāĻāĻŋ āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰ āϝā§āĻāĻžāύ⧠āĻāĻāĻāĻŋāĻŽāĻžāϤā§āϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāύāϏā§āĻā§āϝāĻžāύā§āϏ āĻāĻāĻ āϏāĻžāĻĨā§ āĻāĻāĻžāϧāĻŋāĻ āĻāĻžāϏā§āĻāĻŽāĻžāϰ (Tenant) āĻā§ āϏāĻžāϰā§āĻāĻŋāϏ āĻĻā§āϝāĻŧ (āϝā§āĻŽāύ: Shopify, Slack, Salesforce)āĨ¤
Shared database vs separate database per tenant?â
āĻŽāĻžāϞā§āĻāĻŋ-āĻā§āύā§āϝāĻžāύā§āĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻĄāĻŋāĻāĻžāĻāύā§āϰ ā§ŠāĻāĻŋ āĻŽā§āϞ āϏā§āĻā§āϰā§āϝāĻžāĻā§āĻāĻŋ āĻāĻā§:
- Database per tenant (āĻāĻāϏā§āϞā§āĻā§āĻĄ): āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāĻžāϏā§āĻāĻŽāĻžāϰā§āϰ āĻāύā§āϝ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻāϞāĻžāĻĻāĻž āĻāϏā§āϤ āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏāĨ¤
- āϏā§āĻŦāĻŋāϧāĻž: āϏāϰā§āĻŦā§āĻā§āĻ āϏāĻŋāĻāĻŋāĻāϰāĻŋāĻāĻŋ āĻāĻŦāĻ āĻĄā§āĻāĻž āĻĒā§āϰāĻžāĻāĻā§āϏāĻŋāĨ¤ āĻāĻ āĻāĻžāϏā§āĻāĻŽāĻžāϰā§āϰ āĻĄā§āĻāĻž āĻā§āϰā§āϝāĻžāĻļ āĻāϰāϞ⧠āĻ āύā§āϝā§āϰ āĻā§āύ⧠āϏāĻŽāϏā§āϝāĻž āύā§āĻāĨ¤
- āĻ āϏā§āĻŦāĻŋāϧāĻž: āϝāĻĻāĻŋ ā§§ā§Ļ āĻšāĻžāĻāĻžāϰ āĻāĻžāϏā§āĻāĻŽāĻžāϰ āĻĨāĻžāĻā§, āϤāĻŦā§ ā§§ā§Ļ āĻšāĻžāĻāĻžāϰ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŽā§āĻāύāĻā§āĻāύ āĻāϰāĻž āĻāĻŦāĻ āϏā§āĻāĻŋāĻŽāĻž āĻāĻĒāĻĄā§āĻ āĻāϰāĻž āĻĒā§āϰāĻžāϝāĻŧ āĻ āϏāĻŽā§āĻāĻŦ (High cost and ops payload)āĨ¤
- Schema per tenant: āϏāĻŦāĻžāϰ āĻĄāĻžāĻāĻžāĻŦā§āϏ ā§§āĻāĻŋāĻ āĻĨāĻžāĻā§, āĻāĻŋāύā§āϤ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻā§āϤāϰ⧠āĻĒā§āϰāϤā§āϝā§āĻā§āϰ āĻāϞāĻžāĻĻāĻž āϏā§āĻāĻŋāĻŽāĻž āĻŦāĻž āύā§āĻŽāϏā§āĻĒā§āϏ āĻĨāĻžāĻā§āĨ¤
- āϏā§āĻŦāĻŋāϧāĻž: āĻŽā§āĻāύāĻā§āĻāύ āĻāϰāĻž āĻāĻāĻŋ, āĻāĻŦāĻžāϰ āĻĄā§āĻāĻžāĻ āϞāĻāĻŋāĻā§āϝāĻžāϞāĻŋ āĻāĻāϏā§āϞā§āĻā§āĻĄ āĻĨāĻžāĻā§āĨ¤
- Shared Database, Shared Schema (Row-Level Security): āϏāĻŦ āĻāĻžāϏā§āĻāĻŽāĻžāϰā§āϰ āĻĄā§āĻāĻž āĻāĻāĻ āĻā§āĻŦāĻŋāϞ⧠āĻĨāĻžāĻā§āĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻŋ āϰ⧠(Row) āϤ⧠āĻāĻāĻāĻŋ āĻāĻā§āϏāĻā§āϰāĻž āĻāϞāĻžāĻŽ āĻĨāĻžāĻā§
tenant_idāĨ¤- āϏā§āĻŦāĻŋāϧāĻž: āĻāϰāĻ āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻŽ, āϏā§āĻā§āϞāĻŋāĻ āĻāϰāĻž āĻā§āĻŦ āϏāĻšāĻāĨ¤
- āĻ
āϏā§āĻŦāĻŋāϧāĻž: āĻā§āϝāĻŧā§āϰāĻŋāϤ⧠āĻā§āϞ āĻāϰā§
tenant_idāĻĢāĻŋāϞā§āĻāĻžāϰ āĻĻāĻŋāϤ⧠āĻā§āϞ⧠āĻā§āϞ⧠āĻāĻ āĻāĻžāϏā§āĻāĻŽāĻžāϰ āĻ āύā§āϝ āĻāĻžāϏā§āĻāĻŽāĻžāϰā§āϰ āĻĄā§āĻāĻž āĻĻā§āĻā§ āĻĢā§āϞāĻŦā§ (Massive Data Leak)āĨ¤
Row-level security implementation?â
āĻāĻ āϞāĻŋāĻā§āĻ āĻĨā§āĻā§ āĻŦāĻžāĻāĻāϤ⧠āĻāϧā§āύāĻŋāĻ RDBMS (āϝā§āĻŽāύ PostgreSQL) āĻ Row-Level Security (RLS) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
- RLS āĻ
āύ āĻāϰāϞ⧠āĻāĻĒāύāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϞā§āĻā§āϞā§āĻ āϰā§āϞ āĻŦāĻž āĻĒāϞāĻŋāϏāĻŋ āϏā§āĻ āĻāϰ⧠āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āύ āϝā§, āϝ⧠āĻāĻāĻāĻžāϰ āϞāĻāĻāύ āĻāϰā§āĻā§, āϤāĻžāϰ āĻāĻāĻĄāĻŋāϰ āϏāĻžāĻĨā§
tenant_idāĻŽā§āϝāĻžāĻ āύāĻž āĻāϰāϞ⧠āϏ⧠āĻā§āύā§āĻāĻžāĻŦā§āĻ āĻāĻ āϰ⧠āĻĻā§āĻāϤ⧠āĻŦāĻž āĻāĻĄāĻŋāĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§ āύāĻžāĨ¤ āĻāϤ⧠āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϞā§āĻā§āϞ⧠āĻā§āĻĄā§āϰ āĻā§āϞ āĻšāϞā§āĻ āϞāĻŋāĻā§āĻ āĻšāϝāĻŧ āύāĻžāĨ¤
163. How do you handle large file storage (images, videos)?â
āĻāĻāĻāĻžāϰ āĻĒā§āϰā§āĻĢāĻžāĻāϞ āĻĒāĻŋāĻāĻāĻžāϰ, āĻĒāĻŋāĻĄāĻŋāĻāĻĢ āĻŦāĻž āĻāĻŋāĻĄāĻŋāĻāϰ āĻŽāϤ⧠āĻĢāĻžāĻāϞāĻā§āϞā§āĻā§ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϏā§āĻ āĻāϰāĻž āĻāĻāĻŋāϤ āĻāĻŋ āύāĻžâāĻāĻāĻŋ āĻ āĻāĻāĻŋ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āĻĄāĻŋāϏāĻŋāĻļāύāĨ¤
Database BLOB vs file system vs object storage?â
- Database BLOB (Binary Large Object):
- āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§: āĻāĻŽā§āĻāĻāĻŋāĻā§ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻĢāĻžāĻāϞ⧠āĻāύāĻāĻžāϰā§āĻ āĻāϰ⧠āϏāϰāĻžāϏāϰāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āĻŦāĻŋāϞā§āϰ āĻāĻāĻāĻŋ āĻāϞāĻžāĻŽā§ āϏā§āĻ āϰāĻžāĻāĻžāĨ¤
- āĻā§āύ āĻāĻāĻž āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻžāϰāĻžāĻĒ āĻāϝāĻŧā§āϏ? āĻĢāĻžāĻāϞ āϏāĻžāĻāĻā§ āĻŦāĻĄāĻŧ āĻšāϝāĻŧ, āϝāĻž āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ RAM, Cache āĻāĻŦāĻ Backup-āĻā§ āĻŽāĻžāϰāĻžāϤā§āĻŽāĻ āϏā§āϞ⧠āĻāϰ⧠āĻĻā§āϝāĻŧāĨ¤ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŽā§āϞāϤ āĻā§āĻ āĻāĻŦāĻ āϰāĻŋāϞā§āĻļāύāĻžāϞ āĻĄā§āĻāĻžāϰ āĻāύā§āϝ āĻ āĻĒāĻāĻŋāĻŽāĻžāĻāĻāĻĄ, āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻĢāĻžāĻāϞā§āϰ āĻāύā§āϝ āύāϝāĻŧāĨ¤
- File System (āϞā§āĻāĻžāϞ āĻĄāĻŋāϏā§āĻ):
- āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§: āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻšāĻžāϰā§āĻĄāĻĄāĻŋāϏā§āĻā§ (āϝā§āĻŽāύ
/var/www/uploads/) āϏā§āĻ āĻāϰ⧠āϰāĻžāĻāĻž āĻāĻŦāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻĢāĻžāĻāϞā§āϰ āĻĒāĻžāĻĨ āĻŦāĻž āύāĻžāĻŽ āϏā§āĻ āĻāϰāĻžāĨ¤ - āϏāĻŽāϏā§āϝāĻž: āϏāĻžāϰā§āĻāĻžāϰ āϏā§āĻā§āϞ-āĻāĻāĻ āĻāϰāϞ⧠(āĻāĻāĻžāϧāĻŋāĻ āϏāĻžāϰā§āĻāĻžāϰ āĻŦāϏāĻžāϞā§) āĻāĻ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻāĻĒāϞā§āĻĄ āĻāϰāĻž āĻĢāĻžāĻāϞ āĻ āύā§āϝ āϏāĻžāϰā§āĻāĻžāϰ āĻĨā§āĻā§ āĻĒāĻžāĻāϝāĻŧāĻž āϝāĻžāϝāĻŧ āύāĻžāĨ¤ āĻŦā§āϝāĻžāĻāĻāĻĒ āύā§āϝāĻŧāĻžāĻ āĻāώā§āĻāĻāϰāĨ¤
- āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§: āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻšāĻžāϰā§āĻĄāĻĄāĻŋāϏā§āĻā§ (āϝā§āĻŽāύ
- Object Storage (Amazon S3, Google Cloud Storage):
- āĻā§āύ āĻāĻāĻŋ āĻŦā§āϏā§āĻ āϏāϞāĻŋāĻāĻļāύ? āĻ āĻŦāĻā§āĻā§āĻ āϏā§āĻā§āϰā§āĻ āĻ āϏā§āĻŽ (Infinite) āϏā§āĻā§āϞāĻŋāĻ āϏāĻžāĻĒā§āϰā§āĻ āĻāϰā§āĨ¤ āĻĢāĻžāĻāϞ āĻāĻĒāϞā§āĻĄ āĻāϰāĻž āĻŽāĻžāϤā§āϰāĻ āĻāĻāĻāĻŋ āĻĢāĻŋāĻā§āϏāĻĄ URL āĻĒāĻžāĻāϝāĻŧāĻž āϝāĻžāϝāĻŧ āϝāĻž āϏāϰāĻžāϏāϰāĻŋ CDN āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻĢāĻžāϏā§āĻ āĻĄā§āϞāĻŋāĻāĻžāϰāĻŋ āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤
How do you ensure consistency between database and file storage?â
āϝāĻĻāĻŋ AWS S3 āϤ⧠āĻāĻŽā§āĻ āĻāĻĒāϞā§āĻĄ āϏāĻžāĻāϏā§āϏāĻĢā§āϞ āĻšāϝāĻŧ āĻāĻŋāύā§āϤ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϏā§āĻ āϞāĻŋāĻāĻ āϏā§āĻ āĻšāĻāϝāĻŧāĻžāϰ āĻāĻā§āĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻĢā§āĻāϞ āĻāϰā§âāϤāĻžāĻšāϞ⧠S3 āϤ⧠āĻāĻāĻāĻŋ āĻ āύāĻžāĻĨ (Orphan) āĻĢāĻžāĻāϞ āĻĒāĻĄāĻŧā§ āĻĨāĻžāĻāĻŦā§āĨ¤
- āϏāĻŽāĻžāϧāĻžāύ:
- āĻĒā§āϰāĻĨāĻŽā§ āĻĄāĻžāĻāĻžāĻŦā§āϏā§
file_status = 'pending'āϞāĻŋāĻā§ āĻĄā§āĻāĻž āĻāύā§āĻā§āϰāĻŋ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ - āĻāϰāĻĒāϰ S3 āϤ⧠āĻāĻĒāϞā§āĻĄ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
- āϏāĻĢāϞ āĻšāϞ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϏā§āĻā§āϝāĻžāĻāĻžāϏ āĻāĻĒāĻĄā§āĻ āĻāϰā§
status = 'uploaded'āĻāϰāĻž āĻšāϝāĻŧāĨ¤ - āĻāĻāĻāĻŋ āĻāĻāĻāϞāĻŋ āϏā§āĻā§āϰāĻŋāĻĒā§āĻ (Cron) āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏā§āĻā§āϝāĻžāύ āĻāϰ⧠āĻĒā§āύā§āĻĄāĻŋāĻ āĻĨāĻžāĻāĻž āĻ āύāĻžāĻĨ āĻĢāĻžāĻāϞāĻā§āϞā§āĻ ā§ S3 āĻĨā§āĻā§ āĻĄāĻŋāϞāĻŋāĻ āĻāϰ⧠āĻĻā§āϝāĻŧāĨ¤
- āĻĒā§āϰāĻĨāĻŽā§ āĻĄāĻžāĻāĻžāĻŦā§āϏā§
164. How do you implement audit trails in database?â
āϏāĻŋāϏā§āĻā§āĻŽā§ āĻā§, āĻāĻāύ, āĻā§āύ āĻĄā§āĻāĻž āĻā§āĻā§āĻ āĻāϰā§āĻā§ āϤāĻž āĻā§āϰā§āϝāĻžāĻ āĻāϰāĻžāϰ āĻāύā§āϝ Audit Trail āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧ (āĻŦāĻŋāĻļā§āώ āĻāϰ⧠āĻĢāĻžāĻāύā§āϝāĻžāύā§āϏ āĻ āĻšā§āϞāĻĨāĻā§āϝāĻŧāĻžāϰā§)āĨ¤
Trigger-based vs application-level auditing?â
ā§§. Trigger-based Auditing (Database Level):
- āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§: āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻā§āĻŦāĻŋāϞ⧠AFTER INSERT, UPDATE, DELETE āĻā§āϰāĻŋāĻāĻžāϰ āϞā§āĻāĻž āĻĨāĻžāĻā§āĨ¤ āĻā§āĻ āĻā§āĻŦāĻŋāϞ⧠āĻšāĻžāϤ āĻĻāĻŋāϞā§āĻ āĻā§āϰāĻŋāĻāĻžāϰ āύāĻŋāĻā§ āĻĨā§āĻā§ āĻāĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύā§āϰ āĻāĻā§āϰ āĻ āĻĒāϰā§āϰ āĻĄā§āĻāĻžāĻā§ āĻāĻāĻāĻŋ
audit_logsāĻā§āĻŦāĻŋāϞ⧠āĻāĻĒāĻŋ āĻāϰ⧠āϰāĻžāĻā§āĨ¤ - āϏā§āĻŦāĻŋāϧāĻž: āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻā§āĻĄ āĻĒāĻžāϞā§āĻāĻžāϤ⧠āĻšāϝāĻŧ āύāĻžāĨ¤ āĻā§āĻ āϏāϰāĻžāϏāϰāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻĸā§āĻā§ āĻŽā§āϝāĻžāύā§āϝāĻŧāĻžāϞāĻŋ āĻĄā§āĻāĻž āĻā§āĻā§āĻ āĻāϰāϞā§āĻ āϤāĻž āĻā§āϰā§āϝāĻžāĻ āĻšāϝāĻŧā§ āϝāĻž āϝāĻŧāĨ¤
- āĻ āϏā§āĻŦāĻŋāϧāĻž: āĻĒā§āϰāĻā§āϰ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āĻāĻāĻžāϰāĻšā§āĻĄ āϤā§āϰāĻŋ āĻšāϝāĻŧ, āĻāĻžāϰāĻŖ āĻĒā§āϰāϤāĻŋāĻāĻŋ āϰāĻžāĻāĻā§āϰ āĻāύā§āϝ āĻĄāĻžāĻŦāϞ āϰāĻžāĻāĻ āĻāϰāϤ⧠āĻšāϝāĻŧāĨ¤
⧍. Application-level Auditing:
- āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§: āĻŦā§āϝāĻžāĻāĻāύā§āĻĄ āĻā§āĻĄ (āϝā§āĻŽāύ ORM) āĻĄā§āĻāĻž āϏā§āĻ āĻāϰāĻžāϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻ āĻĄāĻŋāĻ āĻāĻā§āύā§āĻ āϤā§āϰāĻŋ āĻāϰ⧠āĻāĻŦāĻ āϤāĻž āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŦāĻž āĻāĻā§āϏāĻāĻžāϰā§āύāĻžāϞ āϞāĻā§ (āϝā§āĻŽāύ Elasticsearch) āϏā§āĻ āĻāϰā§āĨ¤
- āϏā§āĻŦāĻŋāϧāĻž: āĻ āύā§āĻ āĻŦā§āĻļāĻŋ āĻāύā§āĻā§āϰā§āϞ āĻĒāĻžāĻāϝāĻŧāĻž āϝāĻžāϝāĻŧ (āϝā§āĻŽāύ: āĻā§āύ āĻāĻāĻĒāĻŋ āĻāĻĄā§āϰā§āϏ, āĻā§āύ āϞāĻāĻāύ āϏā§āĻļāύ āĻĨā§āĻā§ āĻā§āĻā§āĻ āĻšāϝāĻŧā§āĻā§ āϤāĻž āϞāĻ āĻāϰāĻž āϏāĻšāĻ)āĨ¤
- āĻŦā§āϏā§āĻ āĻĒā§āϰā§āϝāĻžāĻāĻāĻŋāϏ: āĻĄāĻžāĻāĻžāĻŦā§āϏ āϞā§āĻā§āϞ⧠āϰāĻžāĻāĻ āϞā§āĻĄ āĻāĻŽāĻžāϤ⧠āĻ āĻĄāĻŋāĻ āĻĄā§āĻāĻž āĻŽā§āϏā§āĻ āĻŦā§āϰā§āĻāĻžāϰā§āϰ (Kafka) āĻŽāĻžāϧā§āϝāĻŽā§ āĻāϏāĻŋāĻā§āĻā§āϰā§āύāĻžāϏāĻāĻžāĻŦā§ āĻ āύā§āϝ āĻā§āύ⧠āϏāĻŋāϏā§āĻā§āĻŽ āĻŦāĻž Data Warehouse-āĻ āĻĒāĻžāĻ āĻžāύā§āĨ¤
165. How do you handle time zones in global applications?â
āĻāĻĒāύāĻžāϰ āϏāĻžāϰā§āĻāĻžāϰ āĻāĻŽā§āϰāĻŋāĻāĻžāϝāĻŧ, āĻāĻāĻāĻžāϰ āĻŦāĻžāĻāϞāĻžāĻĻā§āĻļā§, āĻāĻĒāύāĻžāϰ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏāĻŋāĻā§āĻāĻžāĻĒā§āϰā§âāĻāĻ āĻ āĻŦāϏā§āĻĨāĻžāϝāĻŧ āϏāĻŽāϝāĻŧā§āϰ (Date & Time) āĻšāĻŋāϏāĻžāĻŦ āϰāĻžāĻāĻž āĻāĻāĻāĻŋ āĻāϝāĻŧāĻāĻāϰ āĻ āĻāĻŋāĻā§āĻāϤāĻž āĻšāϤ⧠āĻĒāĻžāϰ⧠āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āϏāĻ āĻŋāĻ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ āĻĢāϞ⧠āύāĻž āĻāϰā§āύāĨ¤
Store UTC vs local time?â
Golden Rule of Timezones: āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϏāĻŽāϝāĻŧ āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āϏāĻŦāϏāĻŽāϝāĻŧ āĻāĻŦāĻ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ UTC (Coordinated Universal Time) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āĻāĻāύā§āĻ āĻāĻāĻāĻžāϰā§āϰ āϞā§āĻāĻžāϞ āĻāĻžāĻāĻŽ āĻŦāĻž āϏāĻžāϰā§āĻāĻžāϰā§āϰ āϞā§āĻāĻžāϞ āĻāĻžāĻāĻŽ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϏā§āĻ āĻāϰāĻž āĻāĻāĻŋāϤ āύāϝāĻŧāĨ¤
- āĻā§āύ? āĻāĻžāϰāĻŖ āĻāĻŽā§āϰāĻŋāĻāĻž āĻŦāĻž āĻ āύā§āϝāĻžāύā§āϝ āĻĻā§āĻļā§ āĻĄā§-āϞāĻžāĻāĻ āϏā§āĻāĻŋāĻ āĻāĻžāĻāĻŽ (DST) āĻĨāĻžāĻā§āĨ¤ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϞā§āĻāĻžāϞ āĻāĻžāĻāĻŽ āϰāĻžāĻāϞā§, āĻā§āύ āϏāĻŽāϝāĻŧ āĻāĻĄāĻŧāĻŋāϰ āĻāĻžāĻāĻāĻž āĻāĻā§āϞ āĻŦāĻž āĻĒā§āĻāĻžāϞ āϤāĻž āĻā§āϰā§āϝāĻžāĻāĻŋāĻ āĻāϰāĻž āĻ āϏāĻŽā§āĻāĻŦ āĻšāϝāĻŧā§ āϝāĻžāĻŦā§ āĻāĻŦāĻ āĻā§āϝāĻŧā§āϰāĻŋ āĻā§āϞ āϰā§āĻāĻžāϞā§āĻ āĻĻā§āĻŦā§ (āϝā§āĻŽāύ ⧍ā§Ē āĻāĻŖā§āĻāĻžāϰ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϰāĻŋāĻĒā§āϰā§āĻ⧠⧍ā§Ģ āĻāĻŖā§āĻāĻž āĻāϞ⧠āĻāϏāĻŦā§)āĨ¤
How do you handle timezone conversion?â
- Frontend (App/Browser): āĻĄāĻžāĻāĻžāĻŦā§āϏ API āĻĻāĻŋāϝāĻŧā§ UTC āĻāĻžāĻāĻŽ āϏā§āĻā§āϰāĻŋāĻ āĻĒāĻžāĻ āĻžāĻŦā§ (āϝā§āĻŽāύ:
2024-05-10T14:30:00Z)āĨ¤ āĻāĻāĻāĻžāϰā§āϰ āĻŦā§āϰāĻžāĻāĻāĻžāϰ āĻŦāĻž āĻŽā§āĻŦāĻžāĻāϞ āĻĢā§āύ āϏā§āĻ āĻĄā§āĻāĻž āϰāĻŋāϏāĻŋāĻ āĻāϰ⧠āĻāĻāĻāĻžāϰā§āϰ āĻŦāϰā§āϤāĻŽāĻžāύ āĻāĻžāĻāĻŽ āĻā§āύ āĻ āύā§āϝāĻžāϝāĻŧā§ āϰā§āĻĒāĻžāύā§āϤāϰ āĻāϰ⧠āĻĻā§āĻāĻžāĻŦā§āĨ¤ - Database Queries: āϝāĻĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻā§āϤāϰ āĻā§āύ⧠āĻŽāĻžāύā§āĻĨāϞāĻŋ āϰāĻŋāĻĒā§āϰā§āĻ āĻā§āύāĻžāϰā§āĻ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻžāĻāĻŽāĻā§āύ āϰā§āĻĒāĻžāύā§āϤāϰ āĻāϰāϤ⧠āĻšāϝāĻŧ, āϤāĻŦā§ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āύāĻŋāĻāϏā§āĻŦ āĻĢāĻžāĻāĻļāύ (āϝā§āĻŽāύ PostgreSQL āĻ
AT TIME ZONE) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻā§āϝāĻŧā§āϰāĻŋāϰ āĻāύā§āϝ āĻāĻžāĻāĻŽāĻā§āύ āĻāĻžāϏā§āĻ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
166. How do you implement database versioning for SaaS applications?â
SaaS (Software as a Service) āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ⧠ā§Ģ āĻŽāĻŋāύāĻŋāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĄāĻžāĻāύ āĻāϰāĻžāĻ āĻ āύā§āĻ āϏāĻŽāϝāĻŧ āĻā§āώāϤāĻŋāĻāϰ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϤāĻžāĻ Zero-downtime āϏā§āĻāĻŋāĻŽāĻž āĻŽāĻžāĻāĻā§āϰā§āĻļāύ āĻā§āĻŦāĻ āĻāϰā§āϰāĻŋāĨ¤
How do you handle schema migrations with zero downtime?â
āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻāϞāĻžāĻŽ āϝā§āĻ āĻāϰāĻž āĻŦāĻž āϰāĻŋāĻŽā§āĻ āĻāϰāĻžāϰ āĻāύā§āϝ "Expand and Contract Pattern" āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
āϧāϰāĻž āϝāĻžāĻ, āĻāĻĒāύāĻŋ first_name āĻāĻŦāĻ last_name āĻāϞāĻžāĻŽ āĻĻā§āĻāĻŋ āĻŦāĻžāĻĻ āĻĻāĻŋāϝāĻŧā§ full_name āύāĻžāĻŽā§ ā§§āĻāĻŋ āĻāϞāĻžāĻŽ āϰāĻžāĻāϤ⧠āĻāĻžāύāĨ¤
- āϧāĻžāĻĒ ā§§ (Expand): āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻĒā§āϰā§āύ⧠āĻāϞāĻžāĻŽ āύāĻž āĻĄāĻŋāϞāĻŋāĻ āĻāϰā§āĻ āύāϤā§āύ
full_nameāĻāϞāĻžāĻŽ āϝā§āĻ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ - āϧāĻžāĻĒ ā§¨ (Application Update): āĻŦā§āϝāĻžāĻāĻāύā§āĻĄ āĻā§āĻĄ āĻāĻĒāĻĄā§āĻ āĻāϰ⧠āĻāĻŽāύ āĻāϰāĻž āĻšāϝāĻŧ āϝ⧠āϏ⧠āĻĒā§āϰā§āύ⧠āĻāϞāĻžāĻŽāĻā§āϞā§āϤā§āĻ āϞāĻŋāĻāĻŦā§, āĻāĻŦāĻžāϰ āύāϤā§āύ āĻāϞāĻžāĻŽāĻāĻŋāϤā§āĻ āĻĄā§āĻāĻž āϞāĻŋāĻāĻŦā§ (Dual writes)āĨ¤
- āϧāĻžāĻĒ ā§Š (Backfill): āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄā§ āĻāĻāĻāĻŋ āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻāĻžāϞāĻŋāϝāĻŧā§ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϏāĻŦ āĻĒā§āϰā§āύ⧠āĻāĻāĻāĻžāϰāĻĻā§āϰ
first_nameāĻlast_nameāĻā§āĻĄāĻŧāĻž āϞāĻžāĻāĻŋāϝāĻŧā§full_nameāĻāϰ⧠āĻŦāϏāĻžāύ⧠āĻšāϝāĻŧāĨ¤ - āϧāĻžāĻĒ ā§Ē (Contract): āĻāĻŦāĻžāϰ āĻā§āĻĄ āĻā§āĻā§āĻ āĻāϰ⧠āĻ
ā§āϝāĻžāĻĒāĻā§ āĻŦāϞāĻž āĻšāϝāĻŧ āĻļā§āϧā§
full_nameāĻĨā§āĻā§ āĻĒāĻĄāĻŧāϤā§āĨ¤ āĻāϰāĻĒāϰ āĻāϝāĻŧā§āĻāĻĻāĻŋāύ āϏāĻŋāϏā§āĻā§āĻŽ āĻ āĻŋāĻāĻāĻžāĻŦā§ āĻāϞāĻžāϰ āĻĒāϰ āĻĒā§āϰā§āύ⧠āĻāϞāĻžāĻŽ āĻĻā§āĻā§ āĻĄāĻŋāϞāĻŋāĻ āĻāϰ⧠āĻĻā§āĻāϝāĻŧāĻž āĻšāϝāĻŧāĨ¤ āĻāϤ⧠āĻāĻāĻāĻžāϰ ā§§ āϏā§āĻā§āύā§āĻĄā§āϰ āĻāύā§āϝāĻ āĻā§āϰāĻ āĻĒāĻžāϝāĻŧ āύāĻž āϝ⧠āϏāĻŋāϏā§āĻā§āĻŽ āĻĒāĻžāϞā§āĻā§āĻā§āĨ¤
Rollback strategies for database changes?â
āϏā§āĻāĻŋāĻŽāĻž āĻā§āĻā§āĻ āĻāϰāĻžāϰ āĻāύā§āϝ Flyway āĻŦāĻž Liquibase āĻāϰ āĻŽāϤ⧠āĻāĻžāϰā§āϏāύ āĻāύā§āĻā§āϰā§āϞ āĻā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻŋ SQL āĻŽāĻžāĻāĻā§āϰā§āĻļāύ āϏā§āĻā§āϰāĻŋāĻĒā§āĻā§āϰ āϏāĻžāĻĨā§ āĻāĻāĻāĻŋ Up.sql (āύāϤā§āύ āĻā§āĻā§āĻ) āĻāĻŦāĻ āĻāĻāĻāĻŋ Down.sql (āϰā§āϞāĻŦā§āϝāĻžāĻ āĻŦāĻž āĻāĻā§āϰ āĻ
āĻŦāϏā§āĻĨāĻžāϝāĻŧ āĻĢā§āϰāĻžāϰ āĻā§āĻā§āĻ) āĻĨāĻžāĻā§āĨ¤ āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύ⧠āĻŦā§āϰā§āĻ āĻāϰāϞ⧠āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻāĻžāϞāĻŋāϝāĻŧā§ āĻŽā§āĻšā§āϰā§āϤā§āĻ āĻāĻā§āϰ āĻĄā§āĻāĻžāĻŦā§āϏ āϏā§āĻāĻŋāĻŽāĻžāϝāĻŧ āĻĢāĻŋāϰ⧠āϝāĻžāĻāϝāĻŧāĻž āϝāĻžāϝāĻŧāĨ¤
167. How do you design databases for high write throughput?â
āϝāĻāύ āĻāĻĒāύāĻžāϰ āϏāĻŋāϏā§āĻā§āĻŽā§ āĻĒā§āϰāϤāĻŋ āϏā§āĻā§āύā§āĻĄā§ āϞāĻžāĻ āϞāĻžāĻ Write Operation āĻāϏāĻŦā§, āϤāĻāύ āĻā§āϰā§āĻĄāĻŋāĻļāύāĻžāϞ āĻĄāĻžāĻāĻžāĻŦā§āϏ (B-Tree structure) āĻāĻžāĻ āĻāϰāĻŦā§ āύāĻž, āĻāĻžāϰāĻŖ āĻĄāĻŋāϏā§āĻā§ āϰā§āύā§āĻĄāĻŽāĻāĻžāĻŦā§ āϞā§āĻāĻž āĻā§āĻŦ āϏā§āϞ⧠(Random I/O)āĨ¤
Write-optimized storage engines?â
āĻšāĻžāĻ-āϰāĻžāĻāĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻĄāĻŋāĻāĻžāĻāύā§āϰ āĻā§āϰ āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰ āĻšāϞ⧠LSM-Trees (Log-Structured Merge-Tree)āĨ¤
- Apache Cassandra, RocksDB, LevelDB āĻāĻā§āϞ⧠LSM-Tree āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤
- āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§? āĻĄā§āĻāĻž āĻĄāĻŋāϏā§āĻā§ āϏāϰāĻžāϏāϰāĻŋ āύāĻž āϞāĻŋāĻā§ āĻĒā§āϰāĻĨāĻŽā§ RAM āĻ (MemTable) āĻŦāĻžāĻĢāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ RAM āϝāĻāύ āĻāϰ⧠āϝāĻžāϝāĻŧ, āϤāĻāύ āĻāĻāĻŋ āĻšāĻžāϰā§āĻĄāĻĄāĻŋāϏā§āĻā§ āϏāĻŋāĻā§āϝāĻŧā§āύāĻļāĻŋāϝāĻŧāĻžāϞāĻŋ āĻĢā§āϞā§āϝāĻžāĻļ āĻŦāĻž āĻĄāĻžāĻŽā§āĻĒ (SSTable) āĻāϰ⧠āĻĻā§āϝāĻŧāĨ¤ āĻšāĻžāϰā§āĻĄāĻĄāĻŋāϏā§āĻā§ āϏāĻŋāĻā§āϝāĻŧā§āύāĻļāĻŋāϝāĻŧāĻžāϞāĻŋ āϞā§āĻāĻž (Sequential I/O) āϰā§āύā§āĻĄāĻŽ āϰāĻžāĻāĻā§āϰ āϤā§āϞāύāĻžāϝāĻŧ āĻšāĻžāĻāĻžāϰ āĻā§āĻŖ āĻĢāĻžāϏā§āĻāĨ¤
Partitioning strategies for writes?â
āĻļā§āϧ⧠āĻāĻā§āĻāĻŋāύ āĻāĻžāϞ⧠āĻšāϞā§āĻ āĻšāĻŦā§ āύāĻž, āϞā§āĻĄ āĻŦā§āϝāĻžāϞāĻžāύā§āϏ āĻāϰāĻžāϰ āĻāύā§āϝ āĻĄāĻžāĻāĻžāĻŦā§āϏāĻā§ āĻāĻžāĻ āĻŦāĻž Sharding āĻāϰāϤ⧠āĻšāϝāĻŧāĨ¤
- Consistent Hashing: āĻĄā§āĻāĻžāϰ āĻā§-āĻā§āϞā§āĻā§ āĻāĻŽāύāĻāĻžāĻŦā§ āĻšā§āϝāĻžāĻļ āĻāϰ⧠āĻŦāĻŋāĻāĻŋāύā§āύ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻ āĻāϰāĻž āĻšāϝāĻŧ, āϝāĻžāϤ⧠āϏāĻŦ āϏāĻžāϰā§āĻāĻžāϰ (Node) āϏāĻŽāĻžāύāĻāĻžāĻŦā§ āĻā§āϰāĻžāĻĢāĻŋāĻ āĻĒāĻžāϝāĻŧ āĻāĻŦāĻ āĻā§āύ⧠āĻāĻāĻāĻŋ āϏāĻžāϰā§āĻāĻžāϰ āĻāĻāĻžāϰāϞā§āĻĄ āĻšāϝāĻŧā§ āĻā§āϰā§āϝāĻžāĻļ āύāĻž āĻāϰā§āĨ¤
When to consider write-through vs write-back caching?â
- Write-through cache: āĻĄā§āĻāĻž āĻāĻā§ āĻā§āϝāĻžāĻļā§ (Redis) āϞā§āĻā§, āĻāĻāĻ āϏāĻžāĻĨā§ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϞā§āĻā§, āϤāĻžāϰāĻĒāϰ āĻāĻāĻāĻžāϰāĻā§ āϏāĻžāĻā§āϏā§āϏ āĻĻā§āĻāĻžāϝāĻŧāĨ¤ āĻāĻāĻŋ āĻĄā§āĻāĻž āĻā§āϝāĻžāϰāĻžāύā§āĻāĻŋ āĻĻā§āϝāĻŧ āĻāĻŋāύā§āϤ⧠āĻŦā§āĻļ āϏā§āϞā§, āϤāĻžāĻ āĻšāĻžāĻ-āϰāĻžāĻāĻā§ āĻāĻāĻŋ āĻāĻžāϞ⧠āύāϝāĻŧāĨ¤
- Write-back cache (Asynchronous): āĻĄā§āĻāĻž āϏāϰāĻžāϏāϰāĻŋ āĻŽā§āĻŽāϰāĻŋ āĻā§āϝāĻžāĻļā§ (Redis) āϞāĻŋāĻā§ āϏāĻžāĻĨā§ āϏāĻžāĻĨā§ āĻāĻāĻāĻžāϰāĻā§ āϏāĻžāĻā§āϏā§āϏ āĻĻā§āĻāĻŋāϝāĻŧā§ āĻĻā§āϝāĻŧāĨ¤ āĻāϰ āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄā§ āĻā§āύ⧠āĻāϝāĻŧāĻžāϰā§āĻāĻžāϰ āϧā§āϰā§āϏā§āϏā§āĻĨā§ āĻšāĻžāϰā§āĻĄāĻĄāĻŋāϏā§āĻā§ (āĻĄāĻžāĻāĻžāĻŦā§āϏā§) āϏā§āĻāĻž āϏāĻŋāĻā§āĻ āĻāϰāϤ⧠āĻĨāĻžāĻā§āĨ¤ āĻāĻāĻŋ āĻāĻā§āϏāĻā§āϰāĻŋāĻŽ āϞā§āĻā§āϞā§āϰ āϰāĻžāĻāĻ āĻĨā§āϰā§āĻĒā§āĻ āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§, āϤāĻŦā§ āϏāĻžāϰā§āĻāĻžāϰ āĻšāĻ āĻžā§ āĻā§āϰā§āϝāĻžāĻļ āĻāϰāϞ⧠āĻŽā§āĻŽāϰāĻŋāϰ āĻāĻŋāĻā§ āϞā§āĻā§āϏā§āĻ āĻĄā§āĻāĻž āĻšāĻžāϰāĻŋ āϝāĻŧā§ āϝāĻžāĻāϝāĻŧāĻžāϰ āϰāĻŋāϏā§āĻ āĻĨāĻžāĻā§āĨ¤
175. How do you migrate from one database to another (e.g., Oracle to PostgreSQL)?â
āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŽāĻžāĻāĻā§āϰā§āĻļāύ (Migration) āĻšāϞ⧠āĻŦāĻŋāĻļā§āĻŦā§āϰ āϏāĻŦāĻā§āϝāĻŧā§ āĻāϝāĻŧāĻžāĻŦāĻš āĻāĻŦāĻ āĻšāĻžāĻ-āϰāĻŋāϏā§āĻ āĻāĻā§āĻāĻŋāύāĻŋāϝāĻŧāĻžāϰāĻŋāĻ āĻāĻžāĻāĻā§āϞā§āϰ āĻāĻāĻāĻŋāĨ¤
What are the main challenges?â
- āĻĄā§āĻāĻž āϞāϏ āĻāĻŦāĻ āϞāĻŋāĻā§āĻ: āĻŽā§āĻ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āϞāĻžāĻā§ āĻĄā§āĻāĻžāϰ āĻŽāϧā§āϝ⧠⧧āĻāĻŋ āϰ⧠āĻŽāĻŋāϏ āĻšāϞā§āĻ āĻŦāĻĄāĻŧ āĻĄā§āϝāĻžāĻŽā§āĻ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧāĨ¤
- āĻĄā§āĻāĻž āĻāĻžāĻāĻĒ āĻĒāĻžāϰā§āĻĨāĻā§āϝ: Oracle āĻāϰ āϏā§āĻĒā§āϏāĻŋāĻĢāĻŋāĻ āĻ āύā§āĻ āĻĄā§āĻāĻž āĻāĻžāĻāĻĒ āĻŦāĻž āĻĢāĻŋāĻāĻžāϰ PostgreSQL āĻ āύā§āĻ, āĻ āĻĨāĻŦāĻž āĻ āύā§āϝāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§āĨ¤
- āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ: āĻā§āϰāĻžāĻŦāĻžāĻāĻ āϏāĻžāĻāĻā§āϰ āĻĄā§āĻāĻž āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĨā§āĻā§ āĻĄāĻžāĻŽā§āĻĒ āĻāϰ⧠āĻ āύā§āϝ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϰāĻŋāϏā§āĻā§āϰ āĻāϰāϤ⧠āĻāϝāĻŧā§āĻ āĻāĻŖā§āĻāĻž āĻĨā§āĻā§ āĻĻāĻŋāύ āĻĒāϰā§āϝāύā§āϤ āϏāĻŽāϝāĻŧ āϞāĻžāĻ āϤ⧠āĻĒāĻžāϰā§, āϝāĻž āĻĒā§āϰāĻĄāĻžāĻāĻļāύ āϏāĻŋāϏā§āĻā§āĻŽā§ āĻ āϏāĻŽā§āĻāĻŦāĨ¤
How do you handle it with zero downtime?â
āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύ āϏāĻŋāϏā§āĻā§āĻŽā§ āĻāĻŋāϰā§-āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŽāĻžāĻāĻā§āϰā§āĻļāύ āϏāĻžāϧāĻžāϰāĻŖāϤ CDC (Change Data Capture) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāϰāĻž āĻšāϝāĻŧāĨ¤
- Initial Snapshot & Sync: āĻĒā§āϰāĻĨāĻŽā§ Oracle āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻāĻāĻāĻŋ āϏā§āύā§āϝāĻžāĻĒāĻļāĻ āύāĻŋāϝāĻŧā§ āϏā§āĻāĻŋ āϧā§āϰ⧠āϧā§āϰ⧠PostgreSQL āĻ āϰāĻŋāϏā§āĻā§āϰ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
- Replication (CDC - Debezium): āĻāϰāĻĒāϰ Debezium āĻŦāĻž AWS DMS āĻāϰ āĻŽāϤ⧠āĻā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠Oracle āĻāϰ āĻā§āϰāĻžāύāĻā§āĻāĻļāύāĻžāϞ āϞāĻ (Redo Logs) āϰāĻŋāĻĄ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āϏā§āύā§āϝāĻžāĻĒāĻļāĻ āύā§āϝāĻŧāĻžāϰ āĻĒāϰ āĻĨā§āĻā§ Oracle āĻ āϝāϤ āύāϤā§āύ Read/Write āĻšāĻā§āĻā§ āϰāĻŋāϝāĻŧā§āϞ-āĻāĻžāĻāĻŽā§ āϤāĻž PostgreSQL āĻ āϏāĻŋāĻā§āĻ āĻšāϤ⧠āĻĨāĻžāĻā§āĨ¤
- Dual Writes: āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϞā§āĻā§āϞ⧠āĻā§āĻĄ āĻā§āĻā§āĻ āĻāϰ⧠āĻāĻāĻ āϏāĻžāĻĨā§ Oracle āĻāĻŦāĻ PostgreSQL āĻāĻāϝāĻŧ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āĻ āύāϤā§āύ āĻĄā§āĻāĻž āϞā§āĻāĻž āĻļā§āϰ⧠āĻšāϝāĻŧ (Dual Writes)āĨ¤
- Verification: āĻāϰāĻĒāϰ āĻāĻ āĻĨā§āĻā§ āĻĻā§āĻ āϏāĻĒā§āϤāĻžāĻš āĻĻā§āĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϰā§āĻāĻžāϞā§āĻ āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄā§ āĻŽā§āϝāĻžāĻ āĻŦāĻž āϤā§āϞ āύāĻž (Shadow read) āĻāϰāĻž āĻšāϝāĻŧ āĻĻā§āĻāϤ⧠āϝ⧠āύāϤā§āύ āĻĄāĻžāĻāĻžāĻŦā§āϏ āύāĻŋāϰā§āĻā§āϞ āϰā§āĻāĻžāϞā§āĻ āĻĻāĻŋāĻā§āĻā§ āĻāĻŋ āύāĻžāĨ¤
- Cut-over: āϝāĻāύ āĻāύāĻĢāĻŋāĻĄā§āύā§āϏ ā§§ā§Ļā§Ļ% āĻāϏā§, āϤāĻāύ āϰā§āĻāĻŋāύ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰ⧠āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύā§āϰ āϏāĻŦ āϰāĻŋāĻĄ/āϰāĻžāĻāĻ āĻĒā§āϰā§āĻĒā§āϰāĻŋ PostgreSQL āĻ āϰāĻžāĻāĻ āĻāϰ⧠āĻĻā§āϝāĻŧāĻž āĻšāϝāĻŧ āĻāĻŦāĻ āĻĒā§āϰā§āύ⧠Oracle āϞāĻŋāĻā§āϝāĻžāϏāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏāĻāĻŋāĻā§ āĻāĻžāϰā§āĻŽāĻŋāύā§āĻ āĻāϰ⧠āĻĻā§āϝāĻŧāĻž āĻšāϝāĻŧāĨ¤