Database-engine - Database engine
Een database-engine (of storage-engine ) is de onderliggende softwarecomponent die een databasebeheersysteem (DBMS) gebruikt om gegevens uit een database te creëren, lezen, bijwerken en verwijderen (CRUD) . De meeste databasebeheersystemen hebben hun eigen Application Programming Interface (API) waarmee de gebruiker kan communiceren met de onderliggende engine zonder de gebruikersinterface van het DBMS te hoeven doorlopen.
De term "database-engine" wordt vaak door elkaar gebruikt met " databaseserver " of "databasebeheersysteem". Een "database-instantie" verwijst naar de processen en geheugenstructuren van de draaiende database-engine .
Opslag motoren
Veel van de moderne DBMS ondersteunen meerdere storage-engines binnen dezelfde database. Bijvoorbeeld MySQL ondersteunt InnoDB en MyISAM .
Sommige opslagengines zijn transactioneel .
| Naam | Vergunning | Transactioneel |
|---|---|---|
| Aria | GPL | Nee |
| Valk | GPL | Ja |
| InnoDB | GPL | Ja |
| MijnISAM | GPL | Nee |
| InfiniDB | GPL | Nee |
| TokuDB | GPL | Ja |
| WiredTiger | GPL | Ja |
| XtraDB | GPL | Ja |
| RocksDB | GPL v2 of Apache 2.0 | Ja |
Extra motortypes zijn onder meer:
- Ingesloten database- engines
- In-memory database- engines
Ontwerp Overwegingen
Informatie in een database wordt opgeslagen als bits die zijn ingedeeld als datastructuren in de opslag die efficiënt kunnen worden gelezen van en geschreven naar de eigenschappen van hardware. Doorgaans is de opslag zelf ontworpen om te voldoen aan de vereisten van verschillende gebieden die op grote schaal gebruikmaken van opslag, inclusief databases. Een DBMS in gebruik maakt altijd gelijktijdig gebruik van verschillende opslagtypes (bijv. geheugen en externe opslag), met respectieve lay-outmethoden.
In principe kan de databaseopslag worden gezien als een lineaire adresruimte , waarbij elk stukje data zijn unieke adres heeft in deze adresruimte. In de praktijk wordt slechts een zeer klein percentage van de adressen bewaard als initiële referentiepunten (wat ook opslag vereist); de meeste gegevens worden indirect benaderd met behulp van verplaatsingsberekeningen (afstand in bits vanaf de referentiepunten) en gegevensstructuren die op een effectieve manier toegangspaden definiëren (met behulp van wijzers) naar alle benodigde gegevens, geoptimaliseerd voor de benodigde gegevenstoegangsbewerkingen.
Hiërarchie van databaseopslag
Een database, terwijl deze in bedrijf is, bevindt zich tegelijkertijd in verschillende soorten opslag en vormt een opslaghiërarchie . Door de aard van hedendaagse computers bevindt het grootste deel van het databasegedeelte in een computer waarop het DBMS wordt gehost (gedeeltelijk gerepliceerd) zich in vluchtige opslag. Gegevens (delen van de database) die worden verwerkt/gemanipuleerd, bevinden zich in een processor, mogelijk in de caches van de processor . Deze gegevens worden gelezen van / geschreven naar het geheugen, meestal door middel van een computer bus (tot nu toe meestal vluchtige geheugens componenten). Computergeheugen communiceert gegevens (overgedragen naar/van) externe opslag, meestal via standaard opslaginterfaces of -netwerken (bijv. Fibre Channel , iSCSI ). Een opslagarray , een gemeenschappelijke externe opslageenheid, heeft typisch een eigen opslaghiërarchie, van een snelle cache, die typisch bestaat uit (vluchtig en snel) DRAM , dat (opnieuw via standaardinterfaces) is verbonden met schijven, mogelijk met verschillende snelheden, zoals flashdrives en magnetische diskdrives (niet-vluchtig). De schijven kunnen zijn aangesloten op magnetische banden , waarop doorgaans de minst actieve delen van een grote database staan, of op databaseback-upgeneraties.
Typisch bestaat er momenteel een correlatie tussen opslagsnelheid en prijs, terwijl de snellere opslag meestal vluchtig is.
Data structuren
Een datastructuur is een abstracte constructie die gegevens op een goed gedefinieerde manier insluit. Een efficiënte gegevensstructuur maakt manipulatie van de gegevens op efficiënte manieren mogelijk. De gegevensmanipulatie kan het invoegen, verwijderen, bijwerken en ophalen van gegevens in verschillende modi omvatten. Een bepaald type gegevensstructuur kan zeer effectief zijn bij bepaalde bewerkingen en zeer ineffectief bij andere. Bij de ontwikkeling van DBMS wordt een type gegevensstructuur geselecteerd om het beste te voldoen aan de bewerkingen die nodig zijn voor de soorten gegevens die het bevat. Het type gegevensstructuur dat voor een bepaalde taak is geselecteerd, houdt doorgaans ook rekening met het type opslag waarin het zich bevindt (bijv. snelheid van toegang, minimale grootte van het gebruikte opslagblok, enz.). In sommige DBMS'en hebben databasebeheerders de flexibiliteit om te kiezen uit opties van gegevensstructuren om gebruikersgegevens te bevatten om prestatieredenen. Soms hebben de gegevensstructuren selecteerbare parameters om de databaseprestaties af te stemmen.
Databases kunnen gegevens in vele soorten gegevensstructuur opslaan. Veelvoorkomende voorbeelden zijn de volgende:
- geordende/ongeordende platte bestanden
- hash tabellen
- B+ bomen
- ISAM
- hopen
Gegevensoriëntatie en clustering
In tegenstelling tot conventionele rijoriëntatie, kunnen relationele databases ook kolomgeoriënteerd of correlatief zijn in de manier waarop ze gegevens in een bepaalde structuur opslaan.
Over het algemeen wordt een aanzienlijke prestatieverbetering bereikt als verschillende typen database-objecten die gewoonlijk samen worden gebruikt, in de buurt van elkaar worden opgeslagen en "geclusterd" worden. Dit maakt het meestal mogelijk om de benodigde gerelateerde objecten uit de opslag op te halen in een minimaal aantal invoerbewerkingen (elk soms aanzienlijk tijdrovend). Zelfs voor in-memory databases biedt clustering prestatievoordeel vanwege het gemeenschappelijke gebruik van grote caches voor invoer-uitvoerbewerkingen in het geheugen, met vergelijkbaar resulterend gedrag.
Het kan bijvoorbeeld voordelig zijn om een record van een "artikel" in voorraad te clusteren met alle bijbehorende "bestel"-records. De beslissing om bepaalde objecten al dan niet te clusteren, hangt af van de gebruiksstatistieken van de objecten, objectgroottes, cachegroottes, opslagtypes, enz.
Database-indexering
Indexering is een techniek die sommige opslagengines gebruiken om de databaseprestaties te verbeteren. De vele typen indexen delen de gemeenschappelijke eigenschap dat ze de noodzaak verminderen om elk item te onderzoeken bij het uitvoeren van een query. In grote databases kan dit de querytijd/-kosten met ordes van grootte verminderen. De eenvoudigste vorm van index is een gesorteerde lijst met waarden die kan worden doorzocht met behulp van een binaire zoekopdracht met een aangrenzende verwijzing naar de locatie van het item, analoog aan de index achter in een boek. Dezelfde gegevens kunnen meerdere indexen hebben (een werknemersdatabase kan worden geïndexeerd op achternaam en aanwervingsdatum).
Indexen zijn van invloed op de prestaties, maar niet op de resultaten. Databaseontwerpers kunnen indexen toevoegen of verwijderen zonder de toepassingslogica te wijzigen, waardoor de onderhoudskosten worden verlaagd naarmate de database groeit en het databasegebruik evolueert. Indexen kunnen de toegang tot gegevens versnellen, maar ze nemen ruimte in de database in beslag en moeten elke keer dat de gegevens worden gewijzigd, worden bijgewerkt. Indexen kunnen daarom de toegang tot gegevens versnellen, maar het gegevensonderhoud vertragen. Deze twee eigenschappen bepalen of een bepaalde index de kosten waard is.