Model NoSQL
Model NoSQL
El principal problema d'un model relacional és la distribució d'una BBDD en diferents servidors per raó de mida i rendiment (clústers), i que pugui ser accedida com una sola.
El funcionament en clústers utilitza dues idees:
- La replicació: repliquem les dades en master-slave o peer-to-peer.
- El sharding: situem diferents parts de les dades en diferents servidors.
Les BBDD relacionals no estan dissenyades per a funcionar eficientment en clústers, aquesta és la raó principal per a migrar a NoSQL. La segona és que es veu com una una forma de millorar la productivitat en el desenvolupament d'aplicacions, ja que la interacció amb les dades és més còmoda.
Un model agregat és una col·lecció de dades amb les quals interactuem com a una unitat. Els models agregats permeten treballar més fàcilment amb clústers, agafant l'agregació com a unitat de replicació i sharding. A més, l'agregació també facilita la feina dels desenvolupadors, perquè la manipulació de dades es produeix molt sovint a nivell de agregat.
Els tipus principals de BBDD NoSQL són els models agregats (key-value, document i column) i els de graf.
Key-Value
És la forma d'agregació. Contenen col·leccions de parelles clau-valor, com els diccionaris o les taules hash. La clau és l'identificador i les dades poden ser un objecte JSON, un blob binari o un altre tipus.
Key | Value |
---|---|
"user:1" | { "name": "Alice", "age": 25 } |
"user:2" | { "name": "Bob", "age": 30 } |
S'utilitzen per a fer caching, gestió de sessions o mètriques senzilles. Són molt fàcils d'implementar, eficients i escalables. Però no permeten fer queries gaire complexes.
Exemples populars: Redis, Amazon DynamoDB (mode key-value).
Document
Les dades s'organitzen el documents de format JSON, BSON o XML. Tenen una estructura jeràrquica, que els atorga flexibilitat. Un document és una unitat atòmica que pot ser consultada, modificada o esborrada. És una entitat que freqüentment té les dades relacionades al mateix document.
Per exemple, aquest seria un usuari amb les ordres associades. No cal predefinir les seves columnes, ni fer queries per trobar les ordres de l'usuari:
{
"_id": "user:1",
"name": "Alice",
"age": 25,
"orders": [
{ "orderId": "A100", "amount": 50.5 },
{ "orderId": "A101", "amount": 25.0 }
]
}
Les queries permeten fer filtratge, agregació o indexació. Per exemple:
- Trobar usuaris més grans de 20:
{ "age": { "$gt": 20 } }
- Obtenir una certa ordre:
{ "orders.orderId": "A100" }
Aquest tipus de model permet esquemes flexibles, dades jeràrquiques i també camps indexables per a fer queries més ràpides. Són molt flexibles per no tenir esquema, però l'organització pot portar duplicacions o la impossibilitat de fer relacions (les foreign keys relacionals).
Es poden utilitzar a gestors de continguts, llocs d'e-commerce o per fer event logging.
Exemples populars: MongoDB, Couchbase, Amazon DocumentDB.
Column
Aquest model organitza les dades en columnes i files, però al contrari que el model relacional, les columnes s'agrupen en famílies. Cada familia conté columnes, el que permet optimitzar els patrons d'accés. I cada fila té una clau única.
Exemple:
Row Key | PersonalInfo | OrderInfo |
---|---|---|
1 | {name: "Alice", age: 25} | {order1: 50.5} |
2 | {name: "Bob", age: 30} | {order1: 75.0, order2: 25.0} |
S'utilitzen per a emmagatzemar esdeveniments amb timestamps o datasets molt grans amb dades disperses. Permeten operacions d'escriptura intensives, però el modelatge i les queries són difícils d'implementar.
Exemples populars: Apache Cassandra, HBase.
Comparativa
Funcionalitat | Model Key-Value | Model Document | Model Column-Family |
---|---|---|---|
Estructura | Parelles Key-Value | Documents JSON/BSON/XML | Files agrupades en families |
Consultes | Només per clau | Per camp, consultes niades | Per clau de fila, rang de columna |
Casos d'ús | Caching, cerques ràpides | Esquemes flexibles, dades jeràrquiques | Anàlisi de dades, series temporals |
Flexibilitat d'esquema | Senzilla | Alta | Moderada |