Tādi lasītāji kā jūs palīdz atbalstīt MUO. Veicot pirkumu, izmantojot saites mūsu vietnē, mēs varam nopelnīt filiāles komisiju.

Lai izveidotu ražošanai gatavu tīmekļa lietojumprogrammu, ir jānodrošina, lai tā būtu droša un mērogojama.

Viena no vissvarīgākajām lietām, kas jāzina par datu bāzēm, ir ACID princips, kas apzīmē atomitāti, konsekvenci, izolāciju un izturību. Relāciju datu bāzes, piemēram, MySQL, sākotnēji atbalsta ACID darījumus. Bet MongoDB ir NoSQL datu bāze un pēc noklusējuma neatbalsta ACID darījumus.

Kā programmētājam jums vajadzētu zināt, kā savās MongoDB datu bāzēs ieviest ACID rekvizītus.

Kas ir datu bāzes darījumi?

Datu bāzes transakcija ir datu bāzes vaicājumu vai darbību secība, kuras visas tiek izpildītas kā viena vienība, lai pabeigtu vienu uzdevumu.

Datu bāzes darījumi atbilst ACID raksturlielumu jēdzieniem. Tas palīdz nodrošināt, ka nekādas izmaiņas nenotiek, ja visas darbības nav veiksmīgas. Tas arī nodrošina datu bāzes konsekvenci.

Paskaidrotās ACID īpašības

Četras īpašības, kas veido ACID principus, ir:

instagram viewer
  • Atomiskums ir īpašums, kas konceptualizē darījumus kā nelielas programmas vienības. Tas nozīmē, ka visi vaicājumi darbojas veiksmīgi vai neizdodas kopā.
  • Konsekvence nosaka, ka datubāzes ierakstiem ir jāsaglabā konsekventi pirms un pēc katra darījuma.
  • Izolācija nodrošina, ka, veicot vairākus darījumus vienlaikus, viens neietekmē otru.
  • Izturība koncentrējas uz sistēmas kļūmēm vai kļūmēm. Tas nodrošina, ka veiktais darījums netiek zaudēts sistēmas kļūmes gadījumā. Tas var ietvert metodes, kas nepieciešamas, lai automātiski atjaunotu datus no dublējuma, tiklīdz sistēma atkal parādās.

Kā ieviest MongoDB datu bāzes darījumus pakalpojumā Node.js, izmantojot Mongoose

MongoDB gadu gaitā ir kļuvusi par plaši izmantotu datu bāzes tehnoloģiju, jo tā NoSQL būtība un elastīgs uz dokumentiem balstīts modelis. Tas arī piedāvā iespēju labāk organizēt savus datus un elastīgāk nekā SQL vai relāciju datu bāzēs.

Lai ieviestu datu bāzes transakcijas MongoDB, varat apsvērt scenārija paraugu darbu saraksta lietojumprogrammā, kurā lietotājs var publicēt, atjaunināt vai dzēst darbu. Šeit ir vienkāršs datu bāzes shēmas dizains šai lietojumprogrammai:

Lai turpinātu, šajā sadaļā ir nepieciešamas pamatzināšanas par Node.js programmēšanu un MongoDB.

Darījumi netiek atbalstīti atsevišķās MongoDB instalācijās. Jums būs jāizmanto a MongoDB reprodukcijas komplekts vai MongoDB šķelto klasteris lai darījumi darbotos. Tāpēc vienkāršākais veids, kā izmantot darījumus, ir izveidot mākonī mitinātu MongoDB gadījumu (MongoDB atlants). Pēc noklusējuma katrs Atlas datu bāzes gadījums ir kopiju kopa vai dalīts klasteris.

Pēc darba Node.js un MongoDB projekta iestatīšanas varat iestatīt savienojumu ar Mongo datu bāzi pakalpojumā Node.js. Ja vēl neesat to izdarījis, instalējiet mongoose, palaižot npm instalēt mongoose savā terminālī.

imports mangusts no 'mangusts'

let MONGO_URL = process.env. MONGO_URL || 'jūsu-mongo-datubāzes-url';

ļaut savienojums;
konst connectDb = asinhrons () => {
mēģināt {
gaidīt mongoose.connect (MONGO_URL, {
useNewUrlParser: taisnība,
izmantojiet vienotu topoloģiju: taisnība,
});

console.log("PIEVIENOTS AR DATU BĀZI");
savienojums = mangusts.savienojums;
} noķert (kļūda) {
console.error("DATU BĀZES SAVIENOJUMS NEizdevās!");
konsole.kļūda(kļūda.ziņa);
process.Izeja(1); // aizveriet lietotni, ja neizdodas izveidot savienojumu ar datubāzi
}
};

Savienojums ir jāsaglabā mainīgajā, lai to varētu izmantot, lai vēlāk programmā sāktu darījumu.

Varat ieviest lietotāju un darbu kolekcijas, piemēram:

konst userSchema = jauns mangusts. Shēma({
nosaukums: Stīga,
e-pasts: Stīga,
darba vietas: [mangusts. Shēma. Veidi. ObjectId]
});

konst darba shēma = jauns mangusts. Shēma({
virsraksts: Stīga,
atrašanās vieta: Stīga,
alga: Stīga,
plakāts: mangusts.Shēma.Veidi.ObjectId
});

const userCollection = mongoose.model('lietotājs', userSchema);
const jobCollection = mongoose.model('darbs', darba shēma);

Varat rakstīt funkciju, lai datubāzei pievienotu lietotāju, piemēram:


konst CreateUser = asinhrons (lietotājs) => {
konst jauns lietotājs = gaidīt userCollection.create (lietotājs);
konsole.log("Lietotājs pievienots datu bāzei");
konsole.log (newUser);
}

Tālāk redzamais kods parāda funkciju, lai izveidotu darbu un pievienotu to plakāta darbu sarakstam, izmantojot datu bāzes darījumu.


konst izveidotDarbs = asinhrons (darbs) => {
konst { userEmail, title, location, alga } = darbs;

// iegūt lietotāju no DB
konst lietotājs = gaidīt userCollection.findOne({ e-pasts: userEmail });

// sākt darījuma sesiju
konst sesija = gaidīt savienojums.startSession();

// palaist visus datu bāzes vaicājumus try-catch blokā
mēģināt {
gaidīt session.startTransaction();

// izveidot darbu
konst jaunsDarbs = gaidīt jobCollection.create(
[
{
virsraksts,
atrašanās vieta,
alga,
plakāts: user._id,
},
],
{ sesija }
);
konsole.log("Izveidots jauns veiksmīgi strādāt!");
konsole.log (newJob[0]);

// pievienot darbu publicēto darbu lietotāju sarakstam
konst newJobId = jaunsDarbs[0]._id;
konst pievienotsLietotājam = gaidīt userCollection.findByIdAndUpdate(
Lietotāja ID,
{ $addToSet: { darba vietas: newJobId } },
{ sesija }
);

konsole.log("Uzdevums veiksmīgi pievienots lietotāja darbu sarakstam");
konsole.log (pievienotsLietotājam);

gaidīt session.commitTransaction();

konsole.log("Veiksmīgi veikta DB transakcija");
} noķert (e) {
konsole.error (e);
konsole.log("Neizdevās pabeigt datu bāzes darbības");
gaidīt session.abortTransaction();
} beidzot {
gaidīt session.endSession();
konsole.log("Beigta transakciju sesija");
}
};

A izveidot vaicājums, kas tiek izpildīts darījumā, parasti uzņem un atgriež masīvu. To var redzēt iepriekš norādītajā kodā, kur tas tiek izveidots jauns darbs un uzglabā to _id īpašumsjaunsDarba ID mainīgs.

Šeit ir parādīts, kā darbojas iepriekš minētās funkcijas:

konst mockUser = {
vārds: "Timijs Omolana",
e-pasts: "[email protected]",
};

konst mockJob = {
nosaukums: "Pārdošanas vadītājs",
Atrašanās vieta: "Lagosa, Nigērija",
alga: "$40,000",
lietotājaE-pasts: "[email protected]", // izveidotā lietotāja e-pasts
};

konst startServer = asinhrons () => {
gaidīt connectDb();
gaidīt CreateUser (mockUser);
gaidīt izveidotJob (mockJob);
};

startServer()
.tad()
.catch((err) => konsole.log (err));

Ja saglabājat šo kodu un palaižat to, izmantojot npm sākums vai mezgls komandu, tai vajadzētu radīt šādu izvadi:

Vēl viens veids, kā ieviest ACID darījumus MongoDB, izmantojot Mongoose, ir izmantot withTransaction() funkciju. Šī pieeja nodrošina nelielu elastību, jo tā izpilda visus vaicājumus atzvanīšanas funkcijā, ko jūs nododat funkcijai kā argumentu.

Iepriekš minēto datu bāzes transakciju varat pārveidot, lai to izmantotu withTransaction() kā šis:

konst izveidotDarbs = asinhrons (darbs) => {
konst { userEmail, title, location, alga } = darbs;

// iegūt lietotāju no DB
konst lietotājs = gaidīt userCollection.findOne({ e-pasts: userEmail });

// sākt darījuma sesiju
konst sesija = gaidīt savienojums.startSession();

// palaist visus datu bāzes vaicājumus try-catch blokā
mēģināt {
konst darījums Panākumi = gaidīt session.withTransaction(asinhrons () => {
konst jaunsDarbs = gaidīt jobCollection.create(
[
{
virsraksts,
atrašanās vieta,
alga,
plakāts: user._id,
},
],
{ sesija }
);

konsole.log("Izveidots jauns veiksmīgi strādāt!");
konsole.log (newJob[0]);

// pievienot darbu publicēto darbu lietotāju sarakstam
konst newJobId = jaunsDarbs[0]._id;
konst pievienotsLietotājam = gaidīt userCollection.findByIdAndUpdate(
Lietotāja ID,
{ $addToSet: { darba vietas: newJobId } },
{ sesija }
);

konsole.log("Uzdevums veiksmīgi pievienots lietotāja darbu sarakstam");
konsole.log (pievienotsLietotājam);
});

ja (transaction Success) {
konsole.log("Veiksmīgi veikta DB transakcija");
} cits {
konsole.log("Darījums neizdevās");
}
} noķert (e) {
konsole.error (e);
konsole.log("Neizdevās pabeigt datu bāzes darbības");
} beidzot {
gaidīt session.endSession();
konsole.log("Beigta transakciju sesija");
}
};

Tas radītu tādu pašu rezultātu kā iepriekšējā ieviešana. Jūs varat brīvi izvēlēties, kuru stilu izmantot, ieviešot datu bāzes transakcijas MongoDB.

Šī ieviešana neizmanto commitTransaction() un abortTransaction() funkcijas. Tas ir tāpēc, ka withTransaction() funkcija automātiski veic veiksmīgus darījumus un pārtrauc neveiksmīgos. Vienīgā funkcija, kas jums vajadzētu izsaukt visos gadījumos, ir session.endSession() funkciju.

ACID datu bāzes darījumu ieviešana MongoDB

Datu bāzes transakcijas ir viegli lietojamas, ja tās tiek veiktas pareizi. Tagad jums vajadzētu saprast, kā datu bāzes transakcijas darbojas MongoDB un kā tās var ieviest Node.js lietojumprogrammās.

Lai sīkāk izpētītu ideju par ACID darījumiem un to darbību MongoDB, apsveriet iespēju izveidot fintech maku vai emuāru veidošanas lietojumprogrammu.