Teiesugused lugejad aitavad MUO-d toetada. Kui teete ostu meie saidil olevate linkide abil, võime teenida sidusettevõtte komisjonitasu.
Tootmisvalmidusega veebirakenduse loomiseks peate tagama, et see on ohutu ja skaleeritav.
Üks olulisemaid asju, mida andmebaaside kohta teada saada, on ACID põhimõte, mis tähistab aatomilisust, järjepidevust, isoleeritust ja vastupidavust. Relatsiooniandmebaasid, nagu MySQL, toetavad ACID-tehinguid natiivselt. Kuid MongoDB on NoSQL-i andmebaas ja ei toeta vaikimisi ACID-tehinguid.
Programmeerijana peaksite teadma, kuidas ACID-i atribuute oma MongoDB andmebaasidesse tutvustada.
Mis on andmebaasitehingud?
Andmebaasi tehing on andmebaasipäringute või toimingute jada, mida kõik koos ühe üksusena ühe ülesande täitmiseks käivitavad.
Andmebaasitehingud järgivad ACID-i omaduste kontseptsioone. See aitab tagada, et muudatusi ei toimu, kui kõik toimingud pole edukad. Samuti tagab see andmebaasi järjepidevuse.
ACID-i omaduste selgitus
ACID põhimõtted moodustavad neli omadust:
- Aatomilisus on omadus, mis kontseptualiseerib tehinguid programmi väikeste üksustena. See tähendab, et kõik päringud töötavad koos edukalt või ebaõnnestuvad.
- Järjepidevus sätestab, et andmebaasikirjed peavad jääma järjepidevaks enne ja pärast iga tehingut.
- Isolatsioon tagab, et kui mitu tehingut käitatakse samaaegselt, ei mõjuta üks neist teist.
- Vastupidavus keskendub süsteemi tõrgetele või tõrgetele. See tagab, et sooritatud tehing ei lähe süsteemitõrke korral kaotsi. See võib hõlmata tehnikaid, mis on vajalikud andmete automaatseks taastamiseks varukoopiast, kui süsteem taaskäivitub.
Kuidas rakendada MongoDB andmebaasi tehinguid rakenduses Node.js, kasutades Mongoose'i
MongoDB on aastate jooksul muutunud laialdaselt kasutatavaks andmebaasitehnoloogiaks tänu selle NoSQL-i olemus ja paindlik dokumendipõhine mudel. See pakub teile ka võimalust oma andmeid paremini korraldada ja paindlikumalt kui SQL-i või relatsiooniandmebaasides.
Andmebaasi tehingute rakendamiseks MongoDB-s võite kaaluda näidisstsenaariumit tööloendirakenduses, kus kasutaja saab töö postitada, värskendada või kustutada. Siin on selle rakenduse jaoks lihtne andmebaasi skeem:
Selle jätkamiseks on vaja põhiteadmisi Node.js-i programmeerimisest ja MongoDB-st.
Eraldiseisvate MongoDB installide puhul tehinguid ei toetata. Peate kasutama a MongoDB koopiakomplekt või MongoDB killustatud klaster et tehingud toimiksid. Seetõttu on tehingute kasutamise lihtsaim viis looge pilve hostitud MongoDB eksemplar (MongoDB atlas). Vaikimisi on iga Atlase andmebaasi eksemplar koopiakomplekt või killustatud klaster.
Kui olete seadistanud töötava Node.js ja MongoDB projekti, saate luua ühenduse Mongo andmebaasiga Node.js-is. Kui te pole seda varem teinud, installige Mongoose käivitades npm install mongoose oma terminalis.
importida mangust alates "mongoose"
las MONGO_URL = process.env. MONGO_URL || 'teie-mongo-andmebaasi-url';
lase ühendus;
konst connectDb = asünkr () => {
proovi {
ootama mongoose.connect (MONGO_URL, {
useNewUrlParser: tõsi,
UseUnifiedTopology: tõsi,
});
console.log("ANDMEBAASIGA ÜHENDATUD");
ühendus = mongoose.ühendus;
} püüda (err) {
console.error("ANDMEBAASI ÜHENDAMINE EBAÕNNES!");
konsool.error(eks.sõnum);
protsessi.väljuda(1); // sulgege rakendus, kui andmebaasiühendus ebaõnnestub
}
};
Peaksite ühenduse salvestama muutujas, et saaksite seda hiljem programmis tehingu algatamiseks kasutada.
Saate rakendada kasutajate ja tööde kogusid järgmiselt:
konst userSchema = uus mangust. Skeem({
nimi: String,
email: String,
töökohad: [mongoose. Skeem. Tüübid. ObjectId]
});konst tööskeem = uus mangust. Skeem({
pealkiri: String,
asukoht: String,
palk: String,
plakat: mangust.Skeem.Tüübid.ObjectId
});
const userCollection = mongoose.model('kasutaja', userSchema);
const jobCollection = mongoose.model('töö', tööskeem);
Kasutaja andmebaasi lisamiseks saate kirjutada funktsiooni järgmiselt:
konst createUser = asünkr (kasutaja) => {
konst uuskasutaja = ootama userCollection.create (kasutaja);
konsool.log("Kasutaja lisati andmebaasi");
konsool.log (uuskasutaja);
}
Allolev kood demonstreerib funktsiooni töö loomiseks ja selle lisamiseks oma plakati tööde loendisse, kasutades andmebaasitehingut.
konst looTöö = asünkr (töö) => {
konst { userEmail, tiitel, asukoht, palk } = töökoht;// hankige kasutaja andmebaasist
konst kasutaja = ootama userCollection.findOne({ email: userEmail });// alusta tehinguseanssi
konst seanss = ootama ühendus.startSession();// käivitage kõik andmebaasipäringud try-catch plokis
proovi {
ootama session.startTransaction();// loo töökoht
konst uusTöö = ootama jobCollection.create(
[
{
pealkiri,
asukoht,
palk,
postitaja: user._id,
},
],
{ seanss }
);
konsool.log("Loodud uus edukalt tööd!");
konsool.log (newTöö[0]);// lisage töö postitatud tööde kasutajate loendisse
konst uusTööId = uusTöö[0]._id;
konst lisatudKasutajale = ootama userCollection.findByIdAndUpdate(
kasutaja ID,
{ $addToSet: { töökohad: newJobId } },
{ seanss }
);konsool.log("Töö edukalt lisatud kasutaja tööde nimekirja");
konsool.log (kasutajale lisatud);ootama session.commitTransaction();
konsool.log("DB tehing edukalt teostatud");
} püüda (e) {
konsool.error (e);
konsool.log("Andmebaasi toimingute lõpuleviimine nurjus");
ootama session.abortTransaction();
} lõpuks {
ootama session.endSession();
konsool.log("Lõpetatud tehinguseanss");
}
};
A luua tehingus töötav päring võtab tavaliselt sisse ja tagastab massiivi. Seda näete ülalolevas koodis, kus see luuakse uusTöö ja salvestab selle _id kinnisvarauusTööId muutuv.
Siin on ülaltoodud funktsioonide toimimise demonstratsioon.
konst mockUser = {
nimi: "Timmy Omolana",
email: "[email protected]",
};konst mockJob = {
pealkiri: "Müügijuht",
asukoht: "Lagos, Nigeeria",
palk: "$40,000",
kasutajaE-post: "[email protected]", // loodud kasutaja e-post
};konst startServer = asünkr () => {
ootama connectDb();
ootama createUser (mockUser);
ootama looJob (mockJob);
};
startServer()
.hen()
.catch((err) => konsool.log (err));
Kui salvestate selle koodi ja käivitate selle kasutades npm start või sõlm käsk, peaks see andma sellise väljundi:
Teine viis ACID-tehingute rakendamiseks MongoDB-s Mongoose'i abil on kasutada with Transaction() funktsiooni. See lähenemisviis pakub vähe paindlikkust, kuna see käivitab kõik päringud tagasihelistamisfunktsioonis, mille edastate funktsioonile argumendina.
Saate ülaltoodud andmebaasitehingu kasutamiseks ümber kujundada with Transaction() nagu nii:
konst looTöö = asünkr (töö) => {
konst { userEmail, tiitel, asukoht, palk } = töökoht;// hankige kasutaja andmebaasist
konst kasutaja = ootama userCollection.findOne({ email: userEmail });// alusta tehinguseanssi
konst seanss = ootama ühendus.startSession();// käivitage kõik andmebaasipäringud try-catch plokis
proovi {
konst tehing Edu = ootama session.withTransaction(asünkr () => {
konst uusTöö = ootama jobCollection.create(
[
{
pealkiri,
asukoht,
palk,
postitaja: user._id,
},
],
{ seanss }
);konsool.log("Loodud uus edukalt tööd!");
konsool.log (newTöö[0]);// lisage töö postitatud tööde kasutajate loendisse
konst uusTööId = uusTöö[0]._id;
konst lisatudKasutajale = ootama userCollection.findByIdAndUpdate(
kasutaja ID,
{ $addToSet: { töökohad: newJobId } },
{ seanss }
);konsool.log("Töö edukalt lisatud kasutaja tööde nimekirja");
konsool.log (kasutajale lisatud);
});
kui (tehing õnnestus) {
konsool.log("DB tehing edukalt teostatud");
} muidu {
konsool.log("Tehing nurjus");
}
} püüda (e) {
konsool.error (e);
konsool.log("Andmebaasi toimingute lõpuleviimine nurjus");
} lõpuks {
ootama session.endSession();
konsool.log("Lõpetatud tehinguseanss");
}
};
See annaks sama väljundi kui eelmine rakendus. Saate vabalt valida, millist stiili kasutada andmebaasi tehingute rakendamisel MongoDB-s.
See rakendus ei kasuta commitTransaction() ja abortTransaction() funktsioonid. Seda seetõttu, et with Transaction() funktsioon sooritab automaatselt edukad tehingud ja katkestab ebaõnnestunud tehingud. Ainus funktsioon, mida peaksite igal juhul kutsuma, on session.endSession() funktsiooni.
ACID-andmebaasi tehingute rakendamine MongoDB-s
Andmebaasi tehinguid on lihtne kasutada, kui need on õigesti tehtud. Nüüd peaksite mõistma, kuidas andmebaasi tehingud MongoDB-s töötavad ja kuidas saate neid Node.js-i rakendustes rakendada.
ACID-tehingute idee ja nende toimimise MongoDB-s edasiseks uurimiseks kaaluge fintechi rahakoti või ajaveebirakenduse loomist.