Lesson 2: Databases#

SQL vs. NoSQL#

SQL (Relational Databases)#

  • Structure: Structured data with predefined schemas (Tables, Rows, Columns).
  • Query Language: SQL (Structured Query Language).
  • ACID Compliance: Strong guarantees for Atomicity, Consistency, Isolation, Durability.
  • Examples: MySQL, PostgreSQL, Oracle.
  • Best for: Complex queries, financial transactions.

NoSQL (Non-Relational Databases)#

  • Structure: Flexible schemas (Key-Value, Document, Graph, Column-Family).
  • Scalability: Designed for horizontal scaling.
  • Examples: MongoDB (Document), Redis (Key-Value), Cassandra (Column).
  • Best for: Rapidly changing data, massive scale, unstructured data.

Scaling Databases#

Replication#

Copying data to multiple servers.

  • Master-Slave: Writes go to Master, Reads go to Slaves. Good for read-heavy systems.
  • Master-Master: Writes can go to any node. Complex conflict resolution needed.

Sharding#

Partitioning data across multiple servers (e.g., Users A-M on Server 1, N-Z on Server 2).

  • Pros: Handles massive data volumes.
  • Cons: Complex joins, rebalancing data is hard.

🛠️ Sruja Perspective: Modeling Databases#

Sruja allows you to define the type of database and its role in the system.

architecture "User Management" {
    container UserDB "User Database" {
        technology "PostgreSQL"
        tags "relational", "primary"
        description "Stores user profiles and authentication data."
    }

    container SessionStore "Session Cache" {
        technology "Redis"
        tags "key-value", "cache"
        description "Stores active user sessions for fast access."
    }
}