Tokie skaitytojai kaip jūs padeda palaikyti MUO. Kai perkate naudodami nuorodas mūsų svetainėje, galime uždirbti filialų komisinius.

Kurdami gamybai paruoštą žiniatinklio programą turite užtikrinti, kad ji būtų saugi ir keičiamo dydžio.

Vienas iš svarbiausių dalykų, kuriuos reikia žinoti apie duomenų bazes, yra ACID principas, kuris reiškia atomiškumą, nuoseklumą, izoliaciją ir ilgaamžiškumą. Reliacinės duomenų bazės, tokios kaip MySQL, palaiko ACID operacijas. Tačiau MongoDB yra NoSQL duomenų bazė ir pagal numatytuosius nustatymus nepalaiko ACID operacijų.

Kaip programuotojas, turėtumėte žinoti, kaip įvesti ACID ypatybes į savo MongoDB duomenų bazes.

Kas yra duomenų bazės operacijos?

Duomenų bazės operacija yra duomenų bazės užklausų arba operacijų seka, kurios visos vykdomos kaip vienas vienetas, kad būtų atlikta viena užduotis.

Duomenų bazės operacijos atitinka ACID charakteristikų sąvokas. Tai padeda užtikrinti, kad neįvyktų jokių pakeitimų, nebent visos operacijos būtų sėkmingos. Tai taip pat užtikrina duomenų bazės nuoseklumą.

instagram viewer

Paaiškintos ACID savybės

Keturios savybės, sudarančios ACID principus, yra šios:

  • Atomiškumas yra savybė, kuri konceptualizuoja sandorius kaip mažus programos vienetus. Tai reiškia, kad visos užklausos sėkmingai vykdomos arba nepavyksta kartu.
  • Nuoseklumas teigia, kad duomenų bazės įrašai turi išlikti nuoseklūs prieš ir po kiekvienos operacijos.
  • Isolation užtikrina, kad kai vienu metu vykdomos kelios operacijos, viena neturės įtakos kitai.
  • Patvarumas dėmesys sutelkiamas į sistemos gedimus ar gedimus. Tai užtikrina, kad įvykdyta operacija nebūtų prarasta sistemos gedimo atveju. Tai gali apimti metodus, reikalingus duomenims iš atsarginės kopijos atkurti automatiškai, kai sistema vėl pasirodys.

Kaip įdiegti MongoDB duomenų bazės operacijas Node.js naudojant Mongoose

Per daugelį metų MongoDB tapo plačiai naudojama duomenų bazių technologija jo NoSQL prigimtis ir lankstus dokumentais pagrįstas modelis. Tai taip pat suteikia galimybę geriau tvarkyti duomenis ir lanksčiau nei SQL arba reliacinėse duomenų bazėse.

Norėdami įgyvendinti duomenų bazės operacijas MongoDB, galite apsvarstyti pavyzdinį scenarijų darbo sąrašo programoje, kur vartotojas gali paskelbti, atnaujinti arba ištrinti užduotį. Štai paprastas šios programos duomenų bazės schemos dizainas:

Norėdami tęsti, šioje dalyje reikia pagrindinių žinių apie Node.js programavimą ir MongoDB.

Atskiruose MongoDB įrenginiuose operacijos nepalaikomos. Jums reikės naudoti a MongoDB kopijų rinkinys arba MongoDB suskaidytas klasteris kad sandoriai veiktų. Todėl lengviausias būdas naudoti sandorius yra sukurti debesyje priglobtą MongoDB egzempliorių (MongoDB atlasas). Pagal numatytuosius nustatymus kiekvienas Atlas duomenų bazės egzempliorius yra kopijų rinkinys arba suskaidytas klasteris.

Sukūrę veikiantį Node.js ir MongoDB projektą, galite nustatyti ryšį su Mongo duomenų baze Node.js. Jei dar to nepadarėte, įdiekite „Mongoose“ paleisdami npm įdiegti mongoose savo terminale.

importuoti mangustas  "mangustas"

tegul MONGO_URL = process.env. MONGO_URL || 'jūsų-mongo-duomenų bazės-url';

leisti ryšys;
konst connectDb = async () => {
bandyti {
laukti mongoose.connect (MONGO_URL, {
useNewUrlParser: tiesa,
naudokite vieningą topologiją: tiesa,
});

console.log("PRISIJUNGTA PRIE DUOMENŲ BAZĖS");
jungtis = mongoose.connection;
} sugauti (err) {
console.error("NEPRISIJUNGĖ DUOMENŲ BAZĖS!");
konsolė.klaida(klysti.pranešimas);
procesas.išeiti(1); // uždarykite programą, jei nepavyksta prisijungti prie duomenų bazės
}
};

Turėtumėte išsaugoti ryšį kintamajame, kad galėtumėte jį naudoti norėdami pradėti operaciją vėliau programoje.

Naudotojų ir darbų rinkinius galite įdiegti taip:

konst userSchema = naujas mangustas. Schema({
vardas: Styga,
paštas: Styga,
darbo vietų: [mangustas. Schema. Tipai. ObjectId]
});

konst darboSchema = naujas mangustas. Schema({
pavadinimas: Styga,
vieta: Styga,
atlyginimas: Styga,
plakatas: mangustas.Schema.Tipas.ObjectId
});

const userCollection = mongoose.model('Vartotojas', vartotojoSchema);
const jobCollection = mongoose.model('darbas', darboSchema);

Galite parašyti funkciją, kad pridėtumėte vartotoją į duomenų bazę, pavyzdžiui:


konst CreateUser = async (vartotojas) => {
konst naujas vartotojas = laukti userCollection.create (vartotojas);
konsolė.log("Vartotojas įtrauktas į duomenų bazę");
konsolė.log (newUser);
}

Žemiau pateiktas kodas demonstruoja funkciją sukurti užduotį ir įtraukti ją į plakato darbų sąrašą naudojant duomenų bazės operaciją.


konst sukurtiDarbą = async (darbas) => {
konst { userEmail, title, location, alga } = darbas;

// gauti vartotoją iš DB
konst vartotojas = laukti userCollection.findOne({ paštu: userEmail });

// pradėti operacijos seansą
konst sesija = laukti connect.startSession();

// paleiskite visas duomenų bazės užklausas try-catch bloke
bandyti {
laukti session.startTransaction();

// sukurti darbo vietą
konst naujas darbas = laukti jobCollection.create(
[
{
titulas,
vieta,
atlyginimas,
plakatas: user._id,
},
],
{ sesija }
);
konsolė.log("Sukurta naujas sėkmingas darbas!");
konsolė.log (newJob[0]);

// įtraukti darbą į paskelbtų darbų sąrašą
konst newJobId = naujas darbas[0]._id;
konst AddToUser = laukti userCollection.findByIdAndUpdate(
Vartotojo ID,
{ $addToSet: { darbo vietų: newJobId } },
{ sesija }
);

konsolė.log("Užduotis sėkmingai įtraukta į vartotojo darbų sąrašą");
konsolė.log (addedToUser);

laukti session.commitTransaction();

konsolė.log("Sėkmingai atlikta DB operacija");
} sugauti (e) {
konsolė.error (e);
konsolė.log("Nepavyko užbaigti duomenų bazės operacijų");
laukti session.abortTransaction();
} pagaliau {
laukti session.endSession();
konsolė.log("Baigta operacijos sesija");
}
};

A sukurti užklausa, kuri vykdoma atliekant operaciją, paprastai priima ir grąžina masyvą. Tai galite pamatyti aukščiau esančiame kode, kuriame jis sukuriamas naujas darbas ir saugo ją _id turtas esančiamenewJobId kintamasis.

Štai kaip veikia aukščiau nurodytos funkcijos:

konst mockUser = {
vardas: "Timmy Omolana",
paštas: "darbo [email protected]",
};

konst mockJob = {
pavadinimas: "Pardavimų vadybininkas",
vieta: "Lagosas, Nigerija",
atlyginimas: „$40,000",
userEmail: "darbo [email protected]", // sukurto vartotojo el
};

konst startServer = async () => {
laukti connectDb();
laukti CreateUser (mockUser);
laukti sukurtiJob (mockJob);
};

startServer()
.tada ()
.catch((err) => konsolė.log (err));

Jei išsaugosite šį kodą ir paleisite jį naudodami npm pradžia arba mazgas komandą, ji turėtų sukurti tokią išvestį:

Kitas būdas įgyvendinti ACID operacijas MongoDB naudojant Mongoose yra naudoti with Transaction () funkcija. Šis metodas suteikia mažai lankstumo, nes vykdo visas užklausas atgalinio skambinimo funkcijoje, kurią perduodate kaip argumentą funkcijai.

Galite pertvarkyti pirmiau nurodytą duomenų bazės operaciją, kad galėtumėte naudoti with Transaction () kaip šitas:

konst sukurtiDarbą = async (darbas) => {
konst { userEmail, title, location, alga } = darbas;

// gauti vartotoją iš DB
konst vartotojas = laukti userCollection.findOne({ paštu: userEmail });

// pradėti operacijos seansą
konst sesija = laukti connect.startSession();

// paleiskite visas duomenų bazės užklausas try-catch bloke
bandyti {
konst sandoris Sėkmė = laukti session.withTransaction(async () => {
konst naujas darbas = laukti jobCollection.create(
[
{
titulas,
vieta,
atlyginimas,
plakatas: user._id,
},
],
{ sesija }
);

konsolė.log("Sukurta naujas sėkmingas darbas!");
konsolė.log (newJob[0]);

// įtraukti darbą į paskelbtų darbų sąrašą
konst newJobId = naujas darbas[0]._id;
konst AddToUser = laukti userCollection.findByIdAndUpdate(
Vartotojo ID,
{ $addToSet: { darbo vietų: newJobId } },
{ sesija }
);

konsolė.log("Užduotis sėkmingai įtraukta į vartotojo darbų sąrašą");
konsolė.log (addedToUser);
});

jeigu (sėkmingas sandoris) {
konsolė.log("Sėkmingai atlikta DB operacija");
} Kitas {
konsolė.log("Operacija nepavyko");
}
} sugauti (e) {
konsolė.error (e);
konsolė.log("Nepavyko užbaigti duomenų bazės operacijų");
} pagaliau {
laukti session.endSession();
konsolė.log("Baigta operacijos sesija");
}
};

Taip būtų gauta tokia pati produkcija kaip ir ankstesnio įgyvendinimo metu. Galite laisvai pasirinkti, kurį stilių naudoti įgyvendindami duomenų bazės operacijas MongoDB.

Šis įgyvendinimas nenaudoja commitTransaction() ir nutraukti operaciją () funkcijas. Taip yra todėl, with Transaction () funkcija automatiškai atlieka sėkmingas operacijas ir nutraukia nepavykusias operacijas. Vienintelė funkcija, kurią turėtumėte iškviesti visais atvejais, yra session.endSession() funkcija.

ACID duomenų bazės operacijų įgyvendinimas MongoDB

Duomenų bazės operacijas lengva naudoti, kai jos atliekamos teisingai. Dabar turėtumėte suprasti, kaip duomenų bazės operacijos veikia MongoDB ir kaip galite jas įdiegti Node.js programose.

Norėdami toliau tyrinėti ACID operacijų idėją ir jų veikimą MongoDB, apsvarstykite galimybę sukurti „fintech“ piniginę arba tinklaraščių programą.