Search Knowledge

© 2026 LIBREUNI PROJECT

Modern JavaScript & Ecosystem / Server-Side Development

Databases and Data Persistence

The Persistence Layer

Most JavaScript applications require a way to store data permanently. The choice of database depends on the data’s structure, the required consistency guarantees, and the scale of the application. In the Node.js ecosystem, we primarily deal with two paradigms: Relational (SQL) and Non-Relational (NoSQL).

Relational Databases (SQL)

SQL databases like PostgreSQL or MySQL store data in predefined tables with fixed columns. They are excellent for complex queries and ensuring data integrity through ACID (Atomicity, Consistency, Isolation, Durability) transactions.

When to use SQL:

  • Relationships between data are complex (many-to-many).
  • Data structure is stable and requires strict enforcement.
  • Financial or transactional data integrity is paramount.

Non-Relational Databases (NoSQL)

NoSQL databases like MongoDB store data as flexible, JSON-like documents. They are designed for horizontal scalability and high-velocity data.

When to use NoSQL:

  • Rapidly evolving data structures.
  • Big data and real-time logging.
  • High volume of simple read/write operations.
Code
skinparam componentStyle rectangle

package "Data Paradigms" {
[Document (NoSQL)] - [Key/Value]
[Relational (SQL)] - [Graph]
}

note right of [Document (NoSQL)]
Flexible, nested structures.
Example: MongoDB
end note

note right of [Relational (SQL)]
Tables, Rows, Columns.
Example: PostgreSQL
end note
Data ParadigmsDocument (NoSQL)Key/ValueRelational (SQL)GraphFlexible, nested structures.Example: MongoDBTables, Rows, Columns.Example: PostgreSQL

Object-Relational Mapping (ORM)

Working with raw SQL strings in JavaScript can be error-prone and insecure. An ORM (like Prisma or TypeORM) provides a programmable interface to the database. It maps database rows to JavaScript objects and handles schema migrations.

Benefits of Prisma (Modern ORM)

  • Type Safety: Automatically generates TypeScript types based on your database schema.
  • Migrations: Tracks changes to your database structure in version-controlled files.
  • Declarative Schema: You define your data model in a single schema.prisma file.
// Example Prisma Schema
model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  posts Post[]
}

model Post {
  id        Int     @id @default(autoincrement())
  title     String
  author    User    @relation(fields: [authorId], references: [id])
  authorId  Int
}

Caching with Redis

To improve performance for frequently accessed data, we use an in-memory database like Redis. Redis stores data as key-value pairs in RAM, making it orders of magnitude faster than a traditional disk-based database. It is commonly used for session storage, rate limiting, and result caching.

What is the primary advantage of using an ORM over writing raw SQL queries?

ACID vs. BASE

  • SQL databases prioritize ACID: ensuring that every transaction is a complete, reliable unit.
  • NoSQL databases often follow the BASE model (Basically Available, Soft state, Eventual consistency), prioritizing availability over immediate consistency in distributed systems.