Testiranje baze podataka. Alati otvorenog koda za testiranje baze podataka Poteškoće u testiranju baze podataka

Laravel nudi mnoge korisne alate za testiranje vaših aplikacija baze podataka. Prvo, možete koristiti PHP pomoćnu metodu seeInDatabase() provjeriti ispunjavaju li podaci u bazi podataka određeni skup kriterija. Na primjer, ako želite provjeriti ima li tablica korisnika zapis s poljem e-pošte jednakim [e-mail zaštićen], možete učiniti sljedeće:

PHP
{
// Pozivanje aplikacije...

$this -> seeInDatabase("korisnici", [
"e-pošta" => " [e-mail zaštićen]"
]);
}

Naravno, metode kao što je PHP seeInDatabase() stvoren za praktičnost. Možete koristiti bilo koju od PHPUnit-ovih ugrađenih metoda provjere valjanosti za proširenje svojih testova.

Resetiranje baze podataka nakon svakog testa

Često je korisno resetirati vašu bazu podataka nakon svakog testa tako da podaci iz prethodnog testa ne utječu na sljedeće testove.

Korištenje migracija

Jedan od načina poništavanja stanja baze podataka je vraćanje baze podataka nakon svakog testa i migriranje prije sljedećeg testa. Laravel pruža jednostavnu značajku DatabaseMigrations koja će to automatski učiniti umjesto vas. Samo upotrijebite ovu osobinu na svom ispitnom razredu i sve će biti učinjeno za vas:

PHP




{
koristiti DatabaseMigrations ;

/**
*
* @return void
*/

{
$ovo -> posjetite ("/")
-> vidi ("Laravel 5" );
}
}

Korištenje Transakcija

Drugi način za resetiranje DB stanja je omotavanje svakog testnog slučaja u DB transakciju. A za ovo, Laravel također nudi zgodnu značajku DatabaseTransactions koja će to automatski učiniti za vas:

PHP

Koristite Illuminate\Foundation\Testing\WithoutMiddleware;
koristite Illuminate\Foundation\Testing\DatabaseMigrations;
koristite Illuminate\Foundation\Testing\DatabaseTransactions;

klasa ExampleTest proširuje TestCase
{
koristiti DatabaseTransactions ;

/**
* Primjer temeljnog funkcionalnog testa.
*
* @return void
*/
javna funkcija testBasicExample()
{
$ovo -> posjetite ("/")
-> vidi ("Laravel 5" );
}
}

Prema zadanim postavkama, ova značajka će omotati samo zadanu vezu baze podataka u transakciji. Ako vaša aplikacija koristi višestruke veze s bazom podataka, trebate definirati PHP svojstvo $connectionsToTransact u vašem ispitnom razredu. Ovo bi svojstvo trebalo biti niz naziva veze za izvođenje transakcija.

Stvaranje tvornica

Prilikom testiranja, možda ćete morati umetnuti više zapisa u svoju bazu podataka prije pokretanja testa. Prilikom izrade ovih podataka, umjesto ručnog određivanja vrijednosti svakog stupca, Laravel vam omogućuje definiranje standardnog skupa atributa za svaki od vaših Eloquent modela pomoću tvornica. Prvo pogledajte datoteku database/factories/ModelFactory.php u svojoj aplikaciji. U početku ova datoteka sadrži definiciju jedne tvornice:

PHP $factory -> define (App \ User ::class, funkcija (Faker \ Generator $faker ) (
statička $lozinka;

Povratak [
"ime" => $faker -> ime,
"email" => $faker -> unique()-> safeEmail ,
"lozinka" => $lozinka ?: $lozinka = bcrypt ("tajna"),
"remember_token" => str_random (10),
];
});

U zatvaraču koji služi kao tvornička definicija, možete vratiti standardne testne vrijednosti za sve atribute modela. Zatvaranje će dobiti instancu Faker PHP biblioteke, koja vam omogućuje prikladno generiranje različitih nasumičnih podataka za testiranje.

Naravno, možete dodati vlastite dodatne tvornice u datoteku ModelFactory.php. Također možete stvoriti dodatne tvorničke datoteke za svaki model radi jasnije organizacije. Na primjer, možete kreirati datoteke UserFactory.php i CommentFactory.php u mapi baze podataka/tvornica. Laravel će automatski preuzeti sve datoteke u mapi tvornica.

Tvornička stanja

Stanja vam omogućuju da definirate pojedinačne promjene koje se mogu primijeniti na vaše tvornice modela u bilo kojoj kombinaciji. Na primjer, vaš korisnički model može imati stanje prijestupa koje mijenja zadanu vrijednost jednog od atributa. Svoje transformacije stanja možete definirati pomoću PHP metode država() :

PHP $factory -> state (App \ User ::class, "delinquent", function ($faker) (
povratak [
"account_status" => "delinkvent" ,
];
});

Korištenje tvornica

Izrada modela

Nakon što su tvornice definirane, možete koristiti PHP globalnu funkciju tvornica() u vašim testovima ili početnim datotekama za generiranje instanci modela. Dakle, pogledajmo neke primjere stvaranja modela. Prvo, koristimo PHP metodu napraviti() za izradu modela, ali ih neće spremiti u bazu podataka:

PHP javna funkcija testDatabase()
{
$user = tvornica (App\User::class)->make();

Također možete stvoriti zbirku modela ili izraditi modele određene vrste:

PHP $users = tvornica (App\User::class, 3)->make();

Također možete primijeniti bilo koji na modele. Ako želite primijeniti višestruke promjene stanja na modele, trebate navesti naziv svakog stanja za primjenu:

PHP $users = factory (App \ User ::class, 5 )-> states ( "deliquent" ) -> make ();

$users = tvornica (App \ User ::class, 5 ) -> stanja ( "premium", "deliquent" ) -> make ();

Nadjačavanje atributa

Ako želite nadjačati neke od zadanih vrijednosti svojih modela, možete proslijediti niz vrijednosti PHP metodi napraviti(). Samo navedene vrijednosti bit će zamijenjene, a ostatak će biti postavljen kako je navedeno u tvornici:

PHP $user = tvornica (App\User::class)->make ([
"ime" => "Abigail" ,
]);

Stalni modeli

PHP metoda stvoriti() ne samo da stvara instance modela, već ih i pohranjuje u bazu podataka koristeći Eloquent PHP metodu uštedjeti() :

PHP javna funkcija testDatabase()
{
// Stvorite jednu instancu App\User...
$user = tvornica (App\User::class)->create();

// Kreiraj tri instance aplikacije\korisnika...
$users = tvornica (App\User::class, 3)->create();

// Korištenje modela u testovima...
}

Možete nadjačati atribute modela prosljeđivanjem niza PHP metodi stvoriti():PHP make());
});

Odnosi i atributi zatvaranja

Također možete pridružiti odnose modelima pomoću atributa zatvaranja u vašim tvorničkim definicijama. Na primjer, ako ste željeli stvoriti novu instancu modela korisnika prilikom izrade objave, mogli biste učiniti sljedeće:

PHP $tvornica ->
povratak [
"title" => $faker -> title ,
"sadržaj" => $faker -> odlomak,
"user_id" => funkcija() (
vrati tvornicu (App\User::class)->create()->id;
}
];
});

Ovo zatvaranje također prima određeni niz atributa iz tvornice koja ga sadrži:

PHP $factory -> definiraj (App \ Post ::klasa, funkcija ($faker) (
povratak [
"title" => $faker -> title ,
"sadržaj" => $faker -> odlomak,
"user_id" => funkcija() (
vrati tvornicu (App\User::class)->create()->id;
},
"user_type" => funkcija (niz $post ) (
return App\User::find($post["user_id"])->type;
}
];
});

: Kako testirati i ispravljati pogreške u bazama podataka

Automatsko jedinično testiranje koda aplikacije jednostavno je i izravno. Kako testirati bazu podataka? Ili aplikacija koja radi s bazom podataka. Uostalom, baza podataka nije samo programski kod, baza podataka je objekt koji čuva svoje stanje. A ako počnemo mijenjati podatke u bazi tijekom testiranja (a bez toga, kakvo ćemo testiranje imati?!), onda će se nakon svakog testiranja baza mijenjati. To može ometati naknadne testove i trajno oštetiti bazu podataka.

Ključ rješenja problema su transakcije. Jedna od značajki ovog mehanizma je da sve dok transakcija nije dovršena, uvijek možete poništiti sve promjene i vratiti bazu podataka u stanje u trenutku kada je transakcija započela.

Algoritam je ovakav:

  1. otvoriti transakciju;
  2. ako je potrebno, provodimo pripremne korake za testiranje;
  3. izvršiti jedinični test (ili jednostavno pokrenuti skriptu čiji rad želimo provjeriti);
  4. provjeriti rezultat skripte;
  5. Otkazujemo transakciju, vraćajući bazu podataka u izvorno stanje.

Čak i ako postoje nezatvorene transakcije u kodu koji se testira, vanjski ROLLBACK će i dalje ispravno vratiti sve promjene.

Dobro je ako trebamo testirati SQL skriptu ili pohranjenu proceduru. Što ako testiramo aplikaciju koja se sama povezuje s bazom podataka, otvarajući novu vezu? Osim toga, ako otklanjamo pogreške, tada ćemo vjerojatno htjeti pogledati bazu podataka kroz oči aplikacije kojoj se otklanjaju pogreške. Što učiniti u ovom slučaju?

Nemojte žuriti sa stvaranjem distribuiranih transakcija, postoji jednostavnije rješenje! Koristeći standardne alate SQL poslužitelja, možete otvoriti transakciju na jednoj vezi i nastaviti je na drugoj.

Da biste to učinili, trebate se spojiti na poslužitelj, otvoriti transakciju, dobiti token za tu transakciju, a zatim proslijediti ovaj token aplikaciji koja se testira. Pridružit će se našoj transakciji u svojoj sesiji i od tog trenutka nadalje, u našoj sesiji otklanjanja pogrešaka vidjet ćemo podatke (i također osjetiti zaključavanja) točno onako kako ih vidi aplikacija koja se testira.

Slijed radnji je sljedeći:

Nakon pokretanja transakcije u debug sesiji, moramo saznati njen identifikator. Ovo je jedinstveni niz po kojem poslužitelj razlikuje transakcije. Taj se identifikator mora nekako proslijediti aplikaciji koja se testira.

Sada je zadatak aplikacije povezati se s našom kontrolnom transakcijom prije nego što počne raditi ono što bi trebala raditi.

Tada aplikacija počinje raditi, uključujući pokretanje svojih pohranjenih procedura, otvaranje svojih transakcija, mijenjanje načina izolacije... Ali naša sesija otklanjanja pogrešaka cijelo će to vrijeme biti unutar iste transakcije kao i aplikacija.

Recimo da aplikacija zaključa tablicu i počne mijenjati njezin sadržaj. U ovom trenutku nijedna druga veza ne može pogledati u zaključanu tablicu. Ali ne i naša sesija otklanjanja pogrešaka! Odatle možemo gledati bazu podataka na isti način kao što to čini aplikacija, budući da SQL poslužitelj vjeruje da smo u istoj transakciji.

Dok su za sve druge sesije radnje aplikacije skrivene bravama...

Naša sesija otklanjanja pogrešaka prolazi kroz brave (poslužitelj misli da su to naše vlastite brave)!

Ili zamislite da aplikacija počne raditi sa svojim vlastitim verzijama nizova u SNAPSHOT modu. Kako mogu pogledati ove verzije? I to je moguće ako ste povezani zajedničkom transakcijom!

Ne zaboravite vratiti kontrolnu transakciju unatrag na kraju ovog uzbudljivog procesa. To se može učiniti i iz sesije otklanjanja pogrešaka (ako se proces testiranja završi normalno) i iz same aplikacije (ako se u njoj dogodi nešto neočekivano).

Više o tome možete naučiti na tečajevima

Testiranje baze podataka nije tako uobičajeno kao testiranje drugih dijelova aplikacije. U nekim testovima baza podataka općenito pokisnuti. U ovom ću članku pokušati pogledati alate za testiranje relacijskih i NoSQL baze podataka.

Ova situacija je zbog činjenice da su mnoge baze podataka komercijalne i cijeli potreban skup alata za rad s njima isporučuje organizacija koja je razvila bazu podataka. Međutim, rastuća popularnost NoSQL-a i raznih MySQL forkova u budućnosti mogla bi promijeniti ovo stanje.

Referentna vrijednost baze podataka

Database Benchmark je .NET alat dizajniran za stres testiranje baza podataka s velikim tokovima podataka. Aplikacija izvodi dva glavna testna scenarija: umetanje velikog broja nasumično generiranih zapisa sa sekvencijalnim ili nasumičnim ključevima i čitanje umetnutih zapisa poredanih po njihovim ključevima. Ima široke mogućnosti za generiranje podataka, grafička izvješća i konfiguriranje mogućih vrsta izvješća.

Podržane baze podataka: MySQL, SQL Server, PostgreSQL, MongoDB i mnoge druge.

Jahač baze podataka

Database Rider dizajniran je da omogući testiranje postojala je baza podataka nije bilo ništa teže od testiranja jedinica. Ovaj se alat temelji na Arquillian i stoga Java projekt treba samo ovisnost za DBUnit. Također je moguće koristiti bilješke, kao uJUnit, integracija sa CDI putem presretača, podrška za JSON, YAML, XML, XLS i CSV, konfiguracija putem istih komentara ili yml datoteke, integracija sa Krastavac, podrška za više baza podataka, rad s privremenim tipovima u skupovima podataka.

DbFit

DbFit - razvojni okvir Baza podataka kroz testiranje. Napisano je na vrhu FitNesse, koji je zreo i moćan alat s velikom zajednicom. Testovi se pišu na temelju tablica, što ih čini čitljivijima od običnih jedinični testovi. Možete ih pokrenuti iz IDE-a, pomoću naredbenog retka ili pomoću CI alata.

Podržane baze podataka: Oracle, SQL Server, MySQL, DB2, PostgreSQL, HSQLDB i Derby.

dbstress

dbstress je alat za testiranje performansi baze podataka i stresa napisan u Scali i Akki. Pomoću posebnog JDBC-driver, paralelno izvršava zahtjeve određeni broj puta (eventualno čak i na nekoliko hostova) i sprema konačni rezultat u csv datoteka.

Podržane baze podataka: sve isto kao u JDBC.

DbUnit

je proširenje JUnit (također se koristi s Antom), koji se može vratiti između testova baza podataka do željenog stanja. Ova značajka vam omogućuje da izbjegnete ovisnosti između testova; ako jedan test ne uspije i u isto vrijeme prekrši bazu podataka, tada će sljedeći test započeti ispočetka. DbUnit ima mogućnost prijenosa podataka između baze podataka i XML dokumenta. Također je moguće raditi s velikim skupovima podataka u načinu strujanja. Također možete provjeriti odgovara li dobivena baza podataka određenom standardu.

Podržane baze podataka: sve isto kao u JDBC.

DB testiran

DB Test Driven je alat za jedinično testiranje Baza podataka. Ovaj uslužni program je vrlo lagan, radi s izvornim SQL-om i instalira se izravno u bazu podataka. Lako se integrira s alatima za kontinuiranu integraciju, a verzija SQL Servera ima mogućnost procjene pokrivenosti koda testovima.

Podržane baze podataka: SQL Server, Oracle.

HammerDB

HammerDB - alat za testiranje opterećenja i benchmarka Baza podataka. Ovo je automatizirana aplikacija koja je također višenitna i ima mogućnost korištenja dinamičkih skripti. Jav otvorenog koda i alat za usporedbu. Automatiziran je, višenitni i proširiv s podrškom za dinamičke skripte.

JdbcSlim

JdbcSlim nudi jednostavnu integraciju upita i naredbi u Slim FitNesse. Fokus projekta je na pohranjivanju niza konfiguracija, testnih podataka i SQL-a. To osigurava da su zahtjevi napisani neovisno o implementaciji i da su razumljivi poslovnim korisnicima. JdbcSlim nema kôd specifičan za bazu podataka. On je agnostik glede specifičnosti sustava baze podataka i nema poseban kod za bilo koji sustav baze podataka. U samom okviru sve je opisano na visokoj razini, implementacija bilo kakvih specifičnih stvari događa se promjenom samo jedne klase.

Podržane baze podataka: Oracle, SQL Server, PostgreSQL, MySQL i druge.

JDBDT (delta testiranje baze podataka Java)

JDBDT je ​​Java biblioteka za testiranje (temeljenih na SQL) aplikacija baze podataka. Knjižnica je dizajnirana za automatsku instalaciju i testiranje testova baze podataka. JDBDT ne ovisi o bibliotekama trećih strana, što pojednostavljuje njegovu integraciju. U usporedbi s postojećim bibliotekama za testiranje baza podataka, JDBDT se konceptualno razlikuje u svojoj sposobnosti korištenja δ-tvrdnji.

Podržane baze podataka: PostgreSQL, MySQL, SQLite, Apache Derby, H2 i HSQLDB.

NBi

NBi je u biti dodatak za NUnit i više je namijenjen Poslovna inteligencija sfere. Osim rada s relacijskim bazama podataka moguće je raditi s OLAP platforme (Analysis Services, Mondrian itd.), ETL I sustavi izvješćivanja(Microsoftove tehnologije). Glavni cilj ovog okvira je kreiranje testova koristeći deklarativni pristup temeljen na XML-u. Nećete morati pisati testove u C# ili koristiti Visual Studio za sastavljanje testova. Samo trebate stvoriti xml datoteku i interpretirati je pomoću NBi-ja, a zatim možete pokrenuti testove. Osim u NUnit, može se prenijeti na druge okvire za testiranje.

Podržane baze podataka: SQL Server, MySQL, PostgreSQL, Neo4j, MongoDB, DocumentDB i druge.

NoSQLMap

NoSQLMap je napisan u Pythonu za izvođenje revizije robusnosti sql - injekcije i razna iskorištavanja u konfiguraciji baze podataka. I također za procjenu otpornosti web aplikacije koja koristi NoSQL baze podataka na ovu vrstu napada. Glavni ciljevi aplikacije su pružiti alat za testiranje MongoDB poslužitelja i razbijajući mit da su NoSQL aplikacije neprobojne za SQL injekciju.

Podržane baze podataka: MongoDB.

NoSQLUnit

NoSQLUnit je proširenje za JUnit dizajnirano za pisanje testova u Java aplikacijama koje koriste NoSQL baze podataka. Cilj NoSQLUnit— upravljanje NoSQL životnim ciklusom. Ovaj alat pomoći će vam u održavanju baza podataka koje testirate u poznatom stanju i standardizirati način na koji pišete testove za aplikacije koje koriste NoSQL.

Podržane baze podataka: MongoDB, Cassandra, HBase, Redis i Neo4j.

ruby-plsql-spec

okvir ruby-plsql-spec za jedinično testiranje PL/SQL pomoću Rubyja. Temelji se na dvije druge biblioteke:

  • ruby-plsql – Ruby API za pozivanje PL/SQL procedura;
  • RSpec je okvir za BDD.

Podržane baze podataka: Oracle

SeLite

SeLite je proširenje obitelji Selenium. Glavna ideja je imati bazu podataka temeljenu na SQLite, izoliran od aplikacije. Moći ćete detektirati pogreške web poslužitelja i petljati skripte između testova, raditi sa snimkama itd.

Podržane baze podataka: SQLite, MySQL, PostgreSQL.

sqlmap

sqlmap je alat za testiranje prodora koji može automatizirati proces otkrivanja i iskorištavanja SQL injekcija i preuzimanja poslužitelja baze podataka. Opremljen je snažnim motorom za otkrivanje i mnogim značajkama pentestiranja niša.

Podržane baze podataka: MySQL, Oracle, PostgreSQL, SQL Server, DB2 i druge.

    Alati otvorenog koda za testiranje baze podataka

    https://site/wp-content/uploads/2018/01/data-base-testing-150x150.png

    Testiranje baze podataka nije tako uobičajeno kao testiranje drugih dijelova aplikacije. U nekim se testovima baza podataka potpuno ismijava. U ovom ću članku pokušati analizirati alate za testiranje relacijskih i NoSQL baza podataka. Ova situacija je uzrokovana činjenicom da su mnoge baze podataka komercijalne i da sav potreban skup alata za rad s njima isporučuje organizacija koja […]

1) Ciljevi i ciljevi……………………………………………………………... 3

2) Opis baze podataka ……………………………………………………... 4

3) Rad s bazom podataka ……………………………………………………… 6

4) Testiranje opterećenja baze podataka……………………………...11

5) Zaključak…………………………………………………………………………..15

6) Književnost…………………………………………………………………..16

Ciljevi i ciljevi

Cilj: izraditi bazu eliksira za igricu The Witcher 3 koja će sadržavati informacije o vrsti eliksira, njihovim svojstvima, od čega su napravljeni, mjestima gdje se mogu pronaći te o čudovištima protiv kojih se mogu koristiti. Stvorite optimizirane upite za ovu bazu podataka i testirajte je učitavanjem.

Zadaci:

· Napravite shemu baze podataka s najmanje 5 entiteta u MYSQL Workbenchu. Opišite te entitete i njihove veze.

· Opišite korištenje ove baze podataka, opišite glavne upite, pogledajte njihovo vrijeme izvršenja i izvucite zaključke

· Optimizacija baze podataka

· Izvršite testiranje opterećenja koristeći apache-jmeter. Koristite proširenja za izradu grafikona.

Opis baze podataka

Nastavni rad koristi kreiranu Witcher1 bazu podataka, čiji su glavni entiteti tablice:

Slika 1. Shematski prikaz baze podataka Witcher1

Tablica Sastojci sadrži potrebne sastojke za stvaranje eliksira u igri, koji su opisani u tablici Eliksiri. Za stvaranje eliksira koristi se nekoliko sastojaka, ali svaki je jedinstven za svoj eliksir. Iz tog razloga je između ovih tablica uspostavljen odnos 1:n (jedan prema više), što je prikazano na dijagramu baze podataka (slika 1).

Tablica Ingridients također sadrži informacije o nazivima sastojaka (Discription) i gdje se taj sastojak može pronaći (WhereFind). Stupac idElixirs je stupac koji povezuje tablice Ingridients i Elixirs.

Tablica Eliksiri sadrži informacije o tome kako koristiti određeni eliksir i naziv tog eliksira. Ova tablica je ključna tablica za ostale tablice.

Tablica Lokacije sadrži informacije o tome na kojoj lokaciji ili gradu se određeni sastojak može pronaći.

Tablica IL sadrži konsolidirane informacije o tome gdje i kako pronaći određeni sastojak u određenom području i što je on. Uspostavljen je odnos n:m (više prema mnogima) između tablica Sastojci i Lokacije, budući da se više sastojaka može pronaći na više lokacija, kao što je naznačeno u podređenoj tablici IL.

Tablica Čudovišta sadrži informacije o vrstama čudovišta u

“Witcher 3”, o tome kako prepoznati ovo ili ono čudovište i imena koja su im karakteristična.

ML tablica je podređena tablica n: m unije tablica Lokacija i Čudovišta i sadrži specifične informacije o tome kako pobijediti to određeno čudovište i koji se eliksiri mogu koristiti za to, uključujući posebne znakove vještca, kao i na kojem području i Koje znakove trebate koristiti da tražite ovu određenu vrstu čudovišta?

Rad s bazom podataka

Witcher1 baza podataka sadrži informacije o tome koji eliksiri se trebaju koristiti protiv kojih čudovišta, posebne taktike za posebno opasna čudovišta, kao što su: Pestilence Maiden, Devil, Imp, Goblin itd. Analiza podataka iz svake tablice po redu će oduzeti dosta vremena, stoga ćemo izraditi posebne upite prema bazi podataka koji će biti što korisniji za korisnika.

· Zahtjev za informacijama o tome kako pronaći određeno čudovište.

Ovaj upit će sadržavati ključnu riječ JOIN, zahvaljujući kojoj će se pristupiti tablicama ML i Monsters baze podataka Witcher1.

Ovaj zahtjev će izgledati ovako:

ml PRIDRUŽITE se čudovištima NA monsters.idMonsters=ml.idMonsters;

Nakon izvršenja upita, kao izlaz ćemo dobiti prilično veliku tablicu koja je rezultat kombiniranja dvije tablice. Kako prikazana tablica ne bi bila tako velika, možete odrediti o kojem čudovištu želite prikazati informacije. To jest, za, na primjer, Njega, zahtjev će izgledati ovako:

monsters.MonstersName, monsters.MonstersDiscription,

ml.DiscriptionHowFind, ml.idLocations

ml PRIDRUŽITE SE čudovištima NA monsters.idMonsters=ml.idMonsters

gdje čudovišta.MonstersName=’Hym’;

Kojem čudovištu odgovara ovaj ili onaj ID može se saznati upitom u tablice Monsters ili ML. Upiti će izgledati ovako:

SELECT SELECT

IdMonsters, MonstersName idMonsters, MonstersName

OD ml; OD čudovišta;

Kako biste provjerili usklađenost, možete postaviti upite i za ML i za Monsters tablice, prvo im se pridruži idMonsters.

ml.idMonsters, monsters.MonstersName

ml PRIDRUŽITE SE čudovištima

ml.idMonsters=monsters.idMonsters

ORDER BY monsters.idMonsters;

· Zahtjev koji je eliksir prikladan za ovo čudovište.

Za implementaciju ovog zahtjeva koristit će se JOIN. Upit će biti upućen na dvije tablice Eliksiri i Čudovišta i sadržavat će informacije o tome kada i koji eliksir piti u borbi protiv čudovišta:

čudovišta.Naziv čudovišta ,eliksiri.Naziv eliksira, eliksiri.Opis eliksira

eliksiri PRIDRUŽITE SE čudovištima

elixirs.idElixirs=monsters.idElixirs;

· Upit o tome koji se sastojak nalazi u određenom području.

Za implementaciju ovog zahtjeva koristit će se JOIN. Upit će biti upućen dvjema tablicama Sastojci i Lokacije i sadržavat će informacije o tome koji se sastojak nalazi na kojoj lokaciji i informacije o njegovoj vrsti:

sastojci.Opis, lokacije.Opis, sastojci.Gdje pronaći

sastojci JOIN lokacije ON

sastojci.idIngridients=locations.idIngridients

POREDAK PREMA sastojcima.Opis;

· AŽURIRANJE zahtjeva

Implementiramo ovaj upit za čudovište u tablici Čudovišta pod imenom Hym. Recimo da želimo promijeniti njegovo ime u On:

čudovišta

SET MonstersName="On"

gdje idMonsters=1;

No, budući da je Hym točan u engleskoj verziji, vratimo sve natrag:

čudovišta

SET MonstersName="Hym"

gdje idMonsters=1;

sl.2. Implementacija UPDATE upita

· "Agregacijski" upiti. COUNT i COUNT(DISTINCT)

Funkcija COUNT broji broj nepraznih redaka (bez NULL unutar njih) u danoj tablici. COUNT ima optimiziranu verziju za prikaz broja redaka kada se koristi za 1 tablicu. Na primjer:

sl.3. Brojite redove u tablicama Eliksiri, Čudovišta i Čudovišta JOIN Eliksiri.

Funkcija COUNT(DISTINCT) koristi se za prikaz broja redaka koji se ne ponavljaju u tablicama i optimizirana je verzija obitelji funkcija COUNT:

sl.4. Brojanje eliksira koji se ne ponavljaju u tablici čudovišta.

· funkcija DELETE.

Dodajmo još jedan red u tablicu Elixirs koristeći INSERT:

INSERT INTO elixirs VALUES (6,'ForDelete','DiscriptionDelete');

sl.5. Dodavanje reda u tablicu Elixirs.

Sada ćemo podnijeti zahtjev za brisanje ove linije, jer nema potrebe za eliksirom koji ni na koji način neće pomoći u borbi protiv čudovišta:

DELETE FROM elixirs WHERE idElixirs=6;

sl.6. Izbrišite dodani redak.

Testiranje opterećenja baze podataka

Sada kada su upiti dovršeni i pristup bazi podataka uspostavljen, može se testirati pomoću nekoliko parametara:

· Vremena odgovora tijekom vremena ili Vremena odgovora tijekom vremena – ova provjera prikazuje informacije za svaki zahtjev o njegovom prosječnom vremenu odgovora u milisekundama.

· Response Times Distribution ili Distribucija vremena odgovora - ova provjera prikazuje broj odgovora u određenom vremenskom intervalu tijekom kojeg je zahtjev izvršen.

· Percentili vremena odgovora – Ova provjera prikazuje percentile za vrijednosti vremena odgovora. Na grafikonu će os X biti postoci, a os Y vrijeme odgovora.

Za najvjerojatnije testove postavit ćemo određene

opcije:

sl.7. Parametri ispitivanja

Broj niti (korisnika) – Broj virtualnih korisnika. U našem slučaju, postavit ćemo ga na 1000 kako bismo što više učitali našu bazu podataka.

Ramp-Up Period – razdoblje tijekom kojeg će svi korisnici biti uključeni.

Provjerit ćemo učinkovitost svih JOIN zahtjeva kada ih nekoliko korisnika istovremeno aktivira.

Zadnje 3 točke su crtači provjera kojima ćemo testirati bazu podataka.

·
Provjera vremena odgovora tijekom vremena

sl.7. Rezultat izvršavanja upita tijekom testa Vremena odgovora tijekom vremena

Kao što se može vidjeti iz grafikona, najteži zahtjev za ispuniti bio je “Monsters&Locations” i zahtijevao je najduže vrijeme odgovora. Možete provjeriti razlog dugog izvršavanja zahtjeva pokretanjem zahtjeva u konzoli. Glavni razlog za ovo kašnjenje je taj što i tablica Čudovišta i tablica ML sadrže dugačka objašnjenja čudovišta ili gdje ih pronaći. Zbog toga zahtjev treba dosta dugo da se završi.

·
Ispitivanje Distribucija vremena odziva

sl.8. Rezultat izvršavanja upita tijekom testa Distribucija vremena odziva.

Iz ovog grafikona možemo zaključiti da je broj odgovora za svaki naš zahtjev u istom vremenskom razdoblju isti.

·
Provjera percentila vremena odgovora

Na ordinatnoj osi prikazano je vrijeme izvršenja, a na apscisnoj osi postoci od ukupne količine. Na temelju grafa možemo zaključiti da se 90% zahtjeva izvrši u vremenskom intervalu od 0 do 340 milisekundi, a od 5% do 15% broj zahtjeva raste linearno, a zatim eksponencijalno s vrlo malim koeficijentom porasta.

Preostalih 10% se izvršava u vremenskom intervalu od 340 milisekundi do 700 milisekundi, što dovodi do zaključka da postoji jako veliko opterećenje baze podataka.

Zaključak

U ovom kolegiju svi zadaci su obavljeni. Baza je osmišljena, popunjena podacima, prikazane su glavne mogućnosti njezine upotrebe u obliku upita i rezultati njihovog izvršavanja.

Na kraju je provedeno testiranje i analiza njegovih rezultata s naknadnim zaključcima.

Treba napomenuti da je sama baza podataka izrađena samo kao edukativna, pa nije toliko obimna.

Još jedna važna karakteristika je sigurnost: lozinke, ako se kreira takva tablica, moraju biti pohranjene u šifriranom obliku i zaštićene od neovlaštenog pristupa.

Književnost

1. http://phpclub.ru/mysql/doc/- Internet resurs “MySQL - referentni vodič”

2. Schwartz B., Zaitsev P., Tkachenko V. i dr. - MySQL. Optimiziranje izvedbe (2. izdanje)

3. Thalmann L., Kindal M., Bell C. – “Osiguravanje visoke dostupnosti sustava temeljenih na MySQL-u”

4. Andrzej Sapkowski – “The Witcher (velika zbirka)”, Broj stranica: 571

5. CD PROJEKT RED, GOG KOM. "The Witcher 3: Wild Hunt."


Povezane informacije.


Testiranje baze podataka je neophodno kako bi se osigurala funkcionalnost baze podataka. Da biste to učinili, u bazi podataka sastavljaju se upiti različitih vrsta: za uzorkovanje, s izračunatim poljima, parametarski, s grupiranjem podataka, za ažuriranje, za brisanje.

Primjer upita: Prikažite popis knjiga koje je uzeo određeni učenik. Postavite svoje puno ime kao parametar.

Primjer upita: Prikaz popisa knjiga određenog autora s naznakom mjesta pohrane u knjižnici. Postavite puno ime autora kao parametar.

Primjer zahtjeva: Brojem iskaznice knjižnice odredite koji je razred dotični učenik i tko mu je razrednik.

Riža. 15. Upit 3. “Pronađi učenika po broju iskaznice knjižnice i odredi u kojem razredu studira”

Primjer zahtjeva: Punim imenom i prezimenom učenika odrediti u kojem se razredu dužnik školuje i tko mu je razrednik.

Radi praktičnosti rada sa zapisima raznih tablica, stvorena je pomoću koje možete otvoriti bilo koju tablicu potrebnu za pregled, ažuriranje i promjenu informacija. Oblik gumba prikazan je na sl. 17.

Riža. 17. Obrazac gumba baze podataka

ZAKLJUČAK

Završni kvalifikacijski rad obavljen je na aktualnu temu „Razvoj informacijskog sustava za seosku školsku knjižnicu“.

Cilj dizajna diplome za razvoj informacijskog sustava za školsku knjižnicu regije Saratov, Fedorovski okrug općinske obrazovne ustanove srednje škole u selu Solnechny je postignut.

Tijekom diplomskog projekta rješavani su sljedeći zadaci:

Promatrati knjižnicu kao element obrazovne sredine;

Proučiti državni koncept poticanja i razvoja dječjeg čitanja;

Analizirane su tehnologije rada knjižnica odgojno-obrazovnih ustanova;

Predmetno područje je opisano na temelju ankete;

-izrađena tehnička specifikacija za razvoj informacijskog sustava seoske školske knjižnice;

- izgrađen funkcionalni model djelovanja školske knjižnice;

- opis ulaznih i izlaznih tokova informacija;

razvijen je informacijski sustav temeljen na DBMS-uACCess;

- testirana je razvijena relacijska baza podataka.

U završnom kvalifikacijskom radu za izgradnju informacijskog sustava koji osigurava automatizaciju ručnih operacija za osiguranje procesa skladištenja, pretraživanja, obračuna izdavanja i povrata od strane studenata, izrađena je tehnička specifikacija na temelju analize rezultata ankete. predmetnog područja. Tehničke specifikacije (TZ) odražavale su zahtjeve korisnika sustava – knjižničnih djelatnika.

Na temelju tehničkih specifikacija izrađen je funkcionalni model djelatnosti seoske školske knjižnice. Funkcionalni model je pak poslužio kao materijal za prepoznavanje neautomatiziranih područja u radu knjižnice.

Izbor DBMS-a kao razvojnog okruženja određen je tehničkim mogućnostima seoske knjižnice. Kao rezultat toga, na temelju DBMS-a PristupIzgrađena je jezgra informacijskog sustava – baza podataka.

Za praktičnost korisnika razvijeno je sučelje s tipkama.

Za testiranje baze podataka razvijeni su odgovarajući upiti. Ispunjavanje ovih upita omogućuje nam da prosudimo normalnu izvedbu informacijskog sustava za seosku školsku knjižnicu.

BIBLIOGRAFSKI POPIS