Diferència entre revisions de la pàgina «MongoDB: escalant»
(Es crea la pàgina amb «Escalabilitat: capacitat per augmentar el nombre de consultes per segon. Estratègia típica: tenir diverses rèpliques en diferents instàncies de la BBDD on poder repa…».) |
|||
Línia 20: | Línia 20: | ||
== Escalant MongoDB == | == Escalant MongoDB == | ||
+ | Per crear un ''replica set'' caldrà fer: | ||
+ | # Arrencar les diferents instàncies de mongod | ||
+ | # Configurar l'arbitratge (primari, secondaris, etc.) | ||
+ | |||
Amb aquest script podem crear diverses instàncies en diversos ports (normalment caldria crearles en diverses màquines): | Amb aquest script podem crear diverses instàncies en diversos ports (normalment caldria crearles en diverses màquines): | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Línia 27: | Línia 31: | ||
mongod --replSet m101 --logpath "2.log" --dbpath /data/rs2 --port 27018 --smallfiles --fork | mongod --replSet m101 --logpath "2.log" --dbpath /data/rs2 --port 27018 --smallfiles --fork | ||
mongod --replSet m101 --logpath "3.log" --dbpath /data/rs3 --port 27019 --smallfiles --fork | mongod --replSet m101 --logpath "3.log" --dbpath /data/rs3 --port 27019 --smallfiles --fork | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Podem consultar què fa cadascuna de les instàncies mirant els logfiles (.log) | ||
+ | |||
+ | De moment estan arrencades i son accessibles a través dels diferents ports amb: | ||
+ | $ mongo --port 27017 | ||
+ | |||
+ | I ara caldrà configurar el ''set'' perquè s'arbitri correctament. Ens caldrà aquesta configuració: | ||
+ | <syntaxhighlight lang="javascript"> | ||
+ | config = { _id: "m101", members:[ | ||
+ | { _id : 0, host : "localhost:27017"}, | ||
+ | { _id : 1, host : "localhost:27018"}, | ||
+ | { _id : 2, host : "localhost:27019"} ] | ||
+ | }; | ||
+ | rs.initiate(config); | ||
+ | rs.status(); | ||
</syntaxhighlight> | </syntaxhighlight> |
Revisió del 23:30, 8 gen 2014
Escalabilitat: capacitat per augmentar el nombre de consultes per segon.
Estratègia típica: tenir diverses rèpliques en diferents instàncies de la BBDD on poder repartir les consultes (particularment les de lectura).
Per entendre aquest article convé llegir MongoDB i potser Pymongo
Escalabilitat en BBDD
- Si son rèpliques/instàncies de lectura cap problema. Les d'escriptura tenen la problemàtica de la consistència.
- Solució típica: 1 instància primària (escriptura) i 2 (o més) de secundàries (lectura).
- Les secundàries es sincronitzen a la primària regularment.
- La primària sempre serà consistent. Les secundàries poden tenir un retràs en l'actualització de les dades.
- Si cau la primària cal unes eleccions per determinar quina farà de primària.
Dos paràmetres d'escriptura:
- w -> wait (esperem a que s'hagi escrit a memòria)
- j -> journal (efectiva persistència en disc)
Aquests paràmetres son importants a la nostra aplicació ja que ens determinen què fem quan escrivim a la BBDD. Podem esperar a què s'hagi actualitzat a la memòria, o al jornal (disc dur) i tenir en compte si s'ha enregistrat a les altres instàncies.
Escalant MongoDB
Per crear un replica set caldrà fer:
- Arrencar les diferents instàncies de mongod
- Configurar l'arbitratge (primari, secondaris, etc.)
Amb aquest script podem crear diverses instàncies en diversos ports (normalment caldria crearles en diverses màquines):
#!/bin/bash
mkdir -p /data/rs1 /data/rs2 /data/rs3
mongod --replSet m101 --logpath "1.log" --dbpath /data/rs1 --port 27017 --smallfiles --fork
mongod --replSet m101 --logpath "2.log" --dbpath /data/rs2 --port 27018 --smallfiles --fork
mongod --replSet m101 --logpath "3.log" --dbpath /data/rs3 --port 27019 --smallfiles --fork
Podem consultar què fa cadascuna de les instàncies mirant els logfiles (.log)
De moment estan arrencades i son accessibles a través dels diferents ports amb:
$ mongo --port 27017
I ara caldrà configurar el set perquè s'arbitri correctament. Ens caldrà aquesta configuració:
config = { _id: "m101", members:[
{ _id : 0, host : "localhost:27017"},
{ _id : 1, host : "localhost:27018"},
{ _id : 2, host : "localhost:27019"} ]
};
rs.initiate(config);
rs.status();