La fragmentació (sharding) és una tècnica de partició de dades que permet distribuir les dades d'una col·lecció a través de múltiples màquines. Això és especialment útil per gestionar grans volums de dades i per millorar el rendiment i l'escalabilitat de la base de dades.

Conceptes Clau

  1. Què és la Fragmentació?

La fragmentació és el procés de dividir una col·lecció de dades en fragments més petits, anomenats "shards", que es distribueixen a través de diferents servidors. Cada fragment conté una part de les dades totals de la col·lecció.

  1. Components de la Fragmentació

  • Shards: Cada shard és una instància de MongoDB que conté una part de les dades.
  • Config Servers: Emmagatzemen la informació de configuració de la fragmentació.
  • Query Routers (mongos): Són els responsables de dirigir les operacions de lectura i escriptura als shards corresponents.

  1. Clau de Fragmentació

La clau de fragmentació és un camp o conjunt de camps que es fa servir per determinar com es distribueixen les dades entre els diferents shards.

Avantatges de la Fragmentació

  • Escalabilitat Horitzontal: Permet afegir més servidors per gestionar més dades.
  • Millora del Rendiment: Les operacions es poden distribuir entre múltiples servidors, reduint la càrrega en cada un.
  • Alta Disponibilitat: Si un shard falla, els altres poden continuar operant.

Configuració de la Fragmentació

  1. Configurar els Config Servers

Els config servers emmagatzemen la informació de configuració de la fragmentació. Normalment, es configuren en un conjunt de rèpliques per garantir la seva alta disponibilitat.

mongod --configsvr --replSet configReplSet --dbpath /data/configdb --port 27019

  1. Configurar els Shards

Cada shard és una instància de MongoDB que conté una part de les dades. També es recomana configurar-los com a conjunts de rèpliques.

mongod --shardsvr --replSet shardReplSet1 --dbpath /data/shard1 --port 27018

  1. Configurar el Query Router (mongos)

El query router és l'entrada principal per a les aplicacions que interactuen amb la base de dades fragmentada.

mongos --configdb configReplSet/localhost:27019

  1. Afegir Shards al Clúster

Un cop els shards i els config servers estan en funcionament, es poden afegir els shards al clúster.

sh.addShard("shardReplSet1/localhost:27018")

  1. Habilitar la Fragmentació per a una Col·lecció

Per habilitar la fragmentació per a una col·lecció, primer cal habilitar-la per a la base de dades i després per a la col·lecció específica.

sh.enableSharding("myDatabase")
sh.shardCollection("myDatabase.myCollection", { "shardKey": 1 })

Exemples Pràctics

Exemple 1: Configuració Bàsica de Fragmentació

// Habilitar la fragmentació per a la base de dades
sh.enableSharding("ecommerceDB")

// Habilitar la fragmentació per a la col·lecció de productes
sh.shardCollection("ecommerceDB.products", { "productId": 1 })

Exemple 2: Afegir un Nou Shard

// Afegir un nou shard al clúster
sh.addShard("shardReplSet2/localhost:27020")

Exercicis Pràctics

Exercici 1: Configurar un Clúster Fragmentat

  1. Configura tres config servers.
  2. Configura dos shards, cadascun com un conjunt de rèpliques.
  3. Configura un query router.
  4. Habilita la fragmentació per a una base de dades anomenada testDB.
  5. Habilita la fragmentació per a una col·lecció anomenada users amb la clau de fragmentació userId.

Solució

# Configurar config servers
mongod --configsvr --replSet configReplSet --dbpath /data/configdb1 --port 27019
mongod --configsvr --replSet configReplSet --dbpath /data/configdb2 --port 27020
mongod --configsvr --replSet configReplSet --dbpath /data/configdb3 --port 27021

# Configurar shards
mongod --shardsvr --replSet shardReplSet1 --dbpath /data/shard1 --port 27018
mongod --shardsvr --replSet shardReplSet2 --dbpath /data/shard2 --port 27022

# Configurar query router
mongos --configdb configReplSet/localhost:27019,localhost:27020,localhost:27021

# Afegir shards al clúster
mongo --eval 'sh.addShard("shardReplSet1/localhost:27018")'
mongo --eval 'sh.addShard("shardReplSet2/localhost:27022")'

# Habilitar la fragmentació per a la base de dades
mongo --eval 'sh.enableSharding("testDB")'

# Habilitar la fragmentació per a la col·lecció
mongo --eval 'sh.shardCollection("testDB.users", { "userId": 1 })'

Conclusió

La fragmentació és una tècnica poderosa per gestionar grans volums de dades i millorar el rendiment de la base de dades. En aquest mòdul, hem après els conceptes clau de la fragmentació, com configurar un clúster fragmentat i com habilitar la fragmentació per a col·leccions específiques. Amb aquests coneixements, estàs preparat per gestionar bases de dades de gran escala amb MongoDB.

© Copyright 2024. Tots els drets reservats