Laajennettava säilytysmoottori - Extensible Storage Engine
| Muut nimet | JET sininen |
|---|---|
| Kehittäjä (t) | Microsoft |
| Alkuperäinen julkaisu | 1994 |
| Arkisto | github |
| Kirjoitettu | C ++ |
| Käyttöjärjestelmä | Microsoft Windows |
| Alusta | IA-32 , x86-64 , ARM ja Itanium (ja historiallisesti DEC Alpha , MIPS ja PowerPC ) |
| Tyyppi | Tietokannan moottori |
| Lisenssi | MIT-lisenssi |
| Verkkosivusto |
docs |
ESE ( Extensible Storage Engine ), joka tunnetaan myös nimellä JET Blue , on Microsoftin ISAM (indexed sequential access method) -tallennustekniikka . ESE on Microsoft Exchange Serverin , Active Directoryn ja Windows-haun ydin . Sitä käyttävät myös useat Windows-komponentit, kuten Windows Update -asiakasohjelma ja Ohje- ja tukikeskus . Sen tarkoituksena on antaa sovellusten tallentaa ja noutaa tietoja indeksoidun ja peräkkäisen pääsyn kautta.
ESE tarjoaa tapahtuneiden tietojen päivityksen ja haun. Järjestelmässä on kaatumisen palautusmekanismi, jotta tietojen yhdenmukaisuus säilyy myös järjestelmän kaatumisen yhteydessä. Tapahtumat ESE: ssä ovat erittäin samanaikaisia, joten ESE soveltuu palvelinsovelluksiin. ESE tallentaa välimuistiin tiedot älykkäästi tietojen korkean suorituskyvyn varmistamiseksi. Lisäksi ESE on kevyt, joten se soveltuu apusovelluksiin.
ESE Runtime (ESENT.DLL) on toimitettu jokaisessa Windows- julkaisussa Windows 2000: n jälkeen , ja siinä on natiivi x64-versio ESE: n ajonaikaisesta toimituksesta sekä Windows XP: n ja Windows Server 2003: n x64-versiot . Microsoft Exchange , jopa Exchange 2003, toimitettiin vain 32-bittisen version kanssa, koska se oli ainoa tuettu alusta. Kanssa Exchange 2007 , se mukana toimitetaan 64-bittinen versio.
Tietokannat
Tietokanta on sekä fyysinen että looginen tietojen ryhmittely. ESE-tietokanta näyttää Windowsilta yhdeltä tiedostolta. Sisäisesti tietokanta on 2, 4, 8, 16 tai 32 kt: n sivujen kokoelma (16 ja 32 kt: n sivuvaihtoehdot ovat käytettävissä vain Windows 7: ssä ja Exchange 2010: ssä), jaoteltu tasapainotettuun B-puurakenteeseen . Nämä sivut sisältävät metatietoja, jotka kuvaavat tietokannan sisältämiä tietoja, itse tietoja, hakemistoja mielenkiintoisten tietojen järjestysten säilyttämiseksi ja muuta tietoa. Nämä tiedot sekoittuvat tietokantatiedostoon, mutta pyritään pitämään yhdessä käytetyt tiedot klustereina yhdessä tietokannassa. ESE-tietokanta voi sisältää enintään 2 32 sivua tai 16 teratavua tietoa 8 kilotavun kokoisille sivuille.
ESE-tietokannat on järjestetty ryhmiin, joita kutsutaan instansseiksi. Useimmat sovellukset käyttävät yhtä instanssia, mutta kaikki sovellukset voivat käyttää myös useita instansseja. Esimerkin merkitys on, että se yhdistää yhden palautuslokisarjan yhteen tai useampaan tietokantaan. Tällä hetkellä ESE-ilmentymään voidaan liittää enintään 6 käyttäjätietokantaa milloin tahansa. Jokaisessa erillisessä prosessissa, joka käyttää ESE: tä, voi olla enintään 1024 ESE-esiintymää.
Tietokanta on kannettava siinä mielessä, että se voidaan irrottaa yhdestä käynnissä olevasta ESE-ilmentymästä ja liittää myöhemmin samaan tai toiseen käynnissä olevaan ilmentymään. Irrotettuna tietokanta voidaan kopioida Windowsin tavallisilla apuohjelmilla. Tietokantaa ei voida kopioida, kun sitä käytetään aktiivisesti, koska ESE avaa tietokantatiedostot yksinomaan. Tietokanta voi olla fyysisesti missä tahansa laitteessa, jota Windows tukee suoraan osoitettavissa oleviin I / O-toimintoihin.
Taulukot
Taulukko on homogeeninen tietuekokoelma, jossa jokaisella tietueella on sama sarakesarja. Jokainen taulukko tunnistetaan taulukon nimellä, jonka laajuus on paikallinen tietokannalle, johon taulukko sisältyy. Tietokannassa taululle osoitetun levytilan määrä määritetään parametrilla, joka annetaan, kun taulukko luodaan CreateTable-toiminnolla. Pöydät kasvavat automaattisesti vastauksena tietojen luomiseen.
Taulukoissa on yksi tai useampi hakemisto. Tietuetiedoille on oltava vähintään yksi ryhmittynyt hakemisto. Kun sovellus ei määritä klusteroitua hakemistoa, käytetään keinotekoista indeksiä, joka järjestää ja klusteroi tietueet tietueiden lisäyksen aikajärjestyksessä. Hakemistot on määritelty pysymään mielenkiintoisissa tietojärjestyksissä, ja ne sallivat sekä peräkkäisen pääsyn tietueisiin hakemistojärjestyksessä että suoran pääsyn tietueisiin hakemistosarakkeen arvojen mukaan. ESE: n klusteroitujen hakemistojen on myös oltava ensisijaisia, mikä tarkoittaa, että hakemistoavaimen on oltava ainutlaatuinen.
Klusterit ja ryhmittymättömät indeksit esitetään B + -puilla . Jos lisäys- tai päivitystoiminto aiheuttaa sivun ylivuotamisen, sivu jaetaan: uusi sivu varataan ja ketjutetaan loogisesti kahden aiemmin vierekkäisen sivun väliin. Koska tämä uusi sivu ei ole fyysisesti sen loogisten naapureiden vieressä, pääsy sivulle ei ole yhtä tehokasta. ESE: llä on online-tiivistysominaisuus, joka tiivistää tietoja uudelleen. Jos taulukon odotetaan päivittyvän usein, tilaa voidaan varata tulevia lisäyksiä varten määrittämällä sopiva sivutiheys taulukkoa tai hakemistoa luodessa. Tämä mahdollistaa jaettujen toimintojen välttämisen tai lykkäämisen.
Tietueet ja sarakkeet
Tietue on sarakearvojen sarja. Tietueet lisätään ja päivitetään päivitystoiminnoilla, ja ne voidaan poistaa poistotoiminnoilla. Sarakkeet asetetaan ja haetaan SetColumns- ja RetrieveColumns-toiminnoilla. Tietueen enimmäiskoko on 8110 tavua 8 kilotavun sivuja lukuun ottamatta pitkiä arvosarakkeita. LongText- ja LongBinary-saraketyypit eivät vaikuta merkittävästi tähän kokorajoitukseen, ja tietueet voivat sisältää paljon enemmän tietoja kuin tietokannan sivukoko, kun tietoja tallennetaan pitkien arvojen sarakkeisiin. Kun tietueeseen on tallennettu pitkä arvoviite, tarvitaan vain 9 tavua tietueessa olevaa tietoa. Nämä pitkät arvot voivat itse olla kooltaan enintään 2 gigatavua (Gt).
Tietueet ovat tyypillisesti yhtenäisiä, koska jokaisella tietueella on joukko arvoja samalle sarakeryhmälle. ESE: ssä on myös mahdollista määrittää useita sarakkeita taulukolle, ja silti mikä tahansa tietue sisältää vain pienen määrän ei-NULL-sarakearvoja. Tässä mielessä taulukko voi olla myös heterogeenisten tietueiden kokoelma.
ESE tukee useita sarakearvoja, joiden koko vaihtelee 1-bittisestä 2 Gt: iin. Oikean saraketyypin valinta on tärkeää, koska sarakkeen tyyppi määrää monet sen ominaisuudet, mukaan lukien hakemistojen järjestys. ESE tukee seuraavia tietotyyppejä:
Saraketyypit
| Nimi | Kuvaus |
|---|---|
| Bitti | kolmiarvo (NULL, 0 tai 1) |
| Allekirjoittamaton tavu | 1-tavuinen allekirjoittamaton kokonaisluku |
| Lyhyt | 2-tavuinen allekirjoitettu kokonaisluku |
| Allekirjoittamaton lyhyt | 2-tavuinen allekirjoittamaton kokonaisluku |
| Pitkä | 4-tavuinen allekirjoitettu kokonaisluku |
| Allekirjoittamaton pitkä | 4-tavuinen allekirjoittamaton kokonaisluku |
| PitkäPitkä | 8-tavuinen allekirjoitettu kokonaisluku |
| AllekirjoittamatonPitkä | 8-tavuinen allekirjoittamaton kokonaisluku |
| Valuutta | 8-tavuinen allekirjoitettu kokonaisluku |
| IEEE Single | 4-tavuinen liukuluku |
| IEEE kaksinkertainen | 8-tavuinen liukuluku |
| Treffiaika | 8-tavuinen päivämäärä-aika (kiinteä päivämäärä, murto-aika) |
| GUID | 16-tavuinen yksilöllinen tunniste |
| Binääri | Binaarijono, pituus <= 255 tavua |
| Teksti | ANSI- tai Unicode-merkkijono, pituus <= 255 tavua |
| Pitkä binääri | Suuri binaarijono, pituus <2 Gt |
| Pitkä teksti | Suuri ANSI- tai Unicode-merkkijono, pituus <2 Gt |
Kiinteät, muuttujat ja koodatut sarakkeet
Kukin ESE-taulukko voi määrittää enintään 127 kiinteän pituisen sarakkeen, 128 muuttuvan pituisen sarakkeen ja 64 993 koodatun sarakkeen.
- Kiinteät sarakkeet ovat olennaisesti sarakkeita, jotka vievät saman määrän tilaa jokaisessa tietueessa niiden arvosta riippumatta. Kiinteät sarakkeet vievät 1-bittisen sarakearvon NULLity-arvon ja kiinteän määrän tilaa jokaisessa tietueessa, johon kyseinen sarake tai myöhemmin määritelty kiinteä sarake on asetettu.
- Muuttuvat sarakkeet ovat olennaisesti sarakkeita, jotka vievät vaihtelevan määrän tilaa jokaisessa tietueessa, johon ne on asetettu, riippuen tietyn sarakkeen arvon koosta. Muuttuvat sarakkeet vievät 2 tavua määritettäessä NULLity ja koko sekä vaihtelevan määrän tilaa jokaisessa tietueessa, johon kyseinen sarake on asetettu.
- Merkityt sarakkeet ovat sarakkeita, jotka eivät vie lainkaan tilaa, ellei niitä ole asetettu tietueeseen. Ne voivat olla yksittäisiä, mutta myös moniarvoisia. Samalla merkityllä sarakkeella voi olla useita arvoja yhdessä tietueessa. Kun merkityt sarakkeet on asetettu tietueeseen, jokainen merkitty sarake esiintymä vie noin 4 tavua tilaa merkittyjen sarakkeiden esiintymien arvon lisäksi. Kun yhden merkittyjen sarakkeiden esiintymien määrä on suuri, merkitty sarake-esiintymää kohti on noin 2 tavua. Merkityt sarakkeet ovat ihanteellisia harvoille sarakkeille, koska ne eivät vie lainkaan tilaa, jos niitä ei ole asetettu. Jos indeksoidaan moniarvoinen koodattu sarake, hakemisto sisältää yhden merkinnän tietueelle kutakin koodatun sarakkeen arvoa kohti.
Tietyn taulukon sarakkeet jaetaan kahteen luokkaan: ne, jotka joko esiintyvät täsmälleen kerran kussakin tietueessa, mahdollisesti muutamalla NULL-arvolla; ja ne, joita esiintyy harvoin tai joilla voi olla useita esiintymiä yhdessä tietueessa. Kiinteät ja muuttujat sarakkeet kuuluvat edelliseen luokkaan, kun taas koodatut sarakkeet kuuluvat jälkimmäiseen. Kahden sarakeryhmän sisäinen esitys on erilainen, ja on tärkeää ymmärtää sarakeluokkien väliset kompromissit. Kiinteät ja muuttuvat sarakkeet ovat tyypillisesti edustettuina jokaisessa tietueessa, vaikka esiintymällä olisi NULL-arvo. Nämä sarakkeet voidaan nopeasti käsitellä offset-taulukon kautta. Merkittyjen sarakkeiden esiintymiä edeltää sarakkeen tunniste ja sarake paikannetaan binäärisellä haulla merkittyjen sarakkeiden joukosta.
Pitkät arvot
Pitkän tekstin ja pitkän binaarin saraketyypit ovat suuria binaarikohteita. Ne tallennetaan erilliseen B + -puuhun klusteroidusta indeksistä, jonka avain on pitkä arvon tunnus ja tavun siirtymä. ESE tukee näiden sarakkeiden lisäystä, tavutaajuuden korvaamista ja kokoa. ESE: llä on myös yksi ilmentymämyymäläominaisuus, jossa useat tietueet voivat viitata samaan suureen binaariseen objektiin, ikään kuin jokaisella tietueella olisi oma kopio tiedoista, eli ilman tietueiden välisiä lukitusristiriitoja. Pitkän tekstin tai pitkän binaarin sarakkeen enimmäiskoko on 2 Gt.
Versio-, automaattisen lisäys- ja escrow-sarakkeet
ESE lisää versiosarakkeita automaattisesti aina, kun tätä saraketta sisältävää tietuetta muokataan päivitystoiminnon avulla. Sovellus ei voi asettaa tätä saraketta, mutta se voidaan lukea vain. Versiosarakkeiden sovelluksiin sisältyy sen määrittäminen, onko tietyn tietueen kopio päivitettävä. Jos taulukotietueen arvo on suurempi kuin välimuistissa olevan kopion arvo, välimuistissa olevan kopion tiedetään olevan vanhentunut. Versiosarakkeiden on oltava tyyppiä Long.
ESE asettaa automaattisen lisäyksen sarakkeet automaattisesti siten, että sarakkeen arvo on yksilöllinen jokaiselle taulukon tietueelle. Näitä sarakkeita, kuten versiosarakkeita, sovellus ei voi asettaa. Automaattiset lisäyssarakkeet ovat vain luettavissa, ja ne asetetaan automaattisesti, kun uusi tietue lisätään taulukkoon päivitystoiminnon avulla. Sarakkeen arvo pysyy vakiona tietueen koko käyttöiän ajan, ja vain yksi automaattisen lisäyksen sarake on sallittu taulukkoa kohti. Automaattisen lisäyksen sarakkeet voivat olla tyyppiä Pitkä tai Valuutta.
Escrow-sarakkeita voidaan muokata EscrowUpdate-toiminnolla. Escrowed-päivitykset ovat numeerisia delta-operaatioita. Escrow-sarakkeiden on oltava tyyppiä Long. Esimerkkejä numeerisista delta-operaatioista ovat 2 lisääminen arvoon tai 1 vähentäminen arvosta. ESE seuraa arvon muutosta päivityksen loppuarvon sijasta. Kummassakin useassa istunnossa EscrowUpdate-ohjelmassa voidaan tehdä maksamatta muutoksia samaan arvoon, koska ESE voi määrittää todellisen loppuarvon riippumatta siitä, mitkä tapahtumat sitoutuvat ja mitkä tapahtumat palautetaan. Tämän avulla useat käyttäjät voivat päivittää sarakkeen samanaikaisesti tekemällä numeerisia delta-muutoksia. Vaihtoehtoisesti tietokantamoottori voi poistaa tietueet, joiden sarakkeen arvo on nolla. Tällaisen escrow-sarakkeen yleinen käyttö on vertailulaskuri: monet säikeet lisäävät / vähentävät arvoa ilman lukituksia, ja kun laskuri saavuttaa nollan, tietue poistetaan automaattisesti.
Hakemistot
Indeksi on tietueiden jatkuva järjestys taulukossa. Hakemistoja käytetään sekä peräkkäiseen pääsyyn riveille määritetyssä järjestyksessä että suoraan tietueiden navigointiin indeksoitujen sarakkeiden arvojen perusteella. Hakemiston määrittämä järjestys on kuvattu sarakkeina etusijajärjestyksessä. Tätä sarakeryhmää kutsutaan myös hakemistoavaimeksi. Kutakin saraketta kutsutaan indeksisegmentiksi. Kukin indeksisegmentti voi olla joko nouseva tai laskeva sen tilausosuuden suhteen. Taulukolle voidaan määrittää mikä tahansa määrä indeksejä. ESE tarjoaa runsaan joukon indeksointiominaisuuksia.
Klusteroidut indeksit
Yksi indeksi voidaan määrittää klusteroiduksi tai ensisijaiseksi indeksiksi. ESE: ssä klusteroidun indeksin on oltava yksilöllinen, ja sitä kutsutaan ensisijaiseksi indeksiksi. Muut indeksit kuvataan ryhmittymättömiksi tai toissijaisiksi indekseiksi. Ensisijaiset hakemistot eroavat toissijaisista hakemistoista siinä, että hakemistomerkintä on itse tietue, eikä tietueen looginen osoitin. Toissijaisten hakemistojen lehdissä on ensisijaiset avaimet, jotka linkittyvät loogisesti ensisijaisen hakemiston tietueeseen. Toisin sanoen taulukko on ryhmitelty fyysisesti ensisijaisessa hakemistojärjestyksessä. Indeksoimattomien tietueiden hakeminen ensisijaisessa hakemistojärjestyksessä on yleensä paljon nopeampi kuin toissijaisessa hakemistojärjestyksessä. Tämä johtuu siitä, että yhden levyn käyttö voi tuoda muistiin useita tietueita, jotka ovat käytettävissä lähellä toisiaan ajan myötä. Sama levyn käyttö tyydyttää useita tietueiden käyttöoperaatioita. Tietueen lisääminen indeksin keskelle, kuten ensisijainen hakemistojärjestys määrittää, voi kuitenkin olla paljon hitaampaa kuin sen lisääminen indeksin loppuun. Päivitystaajuutta on harkittava huolellisesti noutomallien suhteen, kun suoritat taulukon suunnittelua. Jos taululle ei ole määritetty ensisijaista hakemistoa, luodaan implisiittinen ensisijainen hakemisto, jota kutsutaan DBK-hakemistoksi. DBK on yksinkertaisesti yksilöllinen nouseva numero, jota kasvatetaan aina, kun tietue lisätään. Tämän seurauksena DBK-hakemiston tietueiden fyysinen järjestys on kronologinen lisäysjärjestys, ja uudet tietueet lisätään aina taulukon loppuun. Jos sovellus haluaa ryhmittää tietoja ei-yksilöllisestä indeksistä, se on mahdollista lisäämällä automaattisen lisäyksen sarake ei-ainutlaatuisen hakemistomäärityksen loppuun.
Indeksointi moniarvoisissa sarakkeissa
Indeksit voidaan määrittää moniarvoisissa sarakkeissa. Näissä hakemistoissa voi olla useita merkintöjä tietueille, joilla on useita arvoja indeksoidulle sarakkeelle. Moniarvoiset sarakkeet voidaan indeksoida yhdessä yksittäisten sarakkeiden kanssa. Kun kaksi tai useampia moniarvoisia sarakkeita indeksoidaan yhdessä, moniarvoinen ominaisuus kunnioitetaan vain indeksin ensimmäisessä moniarvoisessa sarakkeessa. Alemman prioriteetin sarakkeita käsitellään ikään kuin ne olisivat yhden arvon.
Harvat indeksit
Hakemistot voidaan myös määritellä harvoiksi. Harvoissa hakemistoissa ei ole vähintään yhtä merkintää kutakin taulukon tietuetta kohti. Harvan indeksin määrittämisessä on useita vaihtoehtoja. On olemassa vaihtoehtoja tietueiden sulkemiseksi pois hakemistoista, kun koko hakemistoavain on NULL, kun mikä tahansa avainsegmentti on NULL tai kun vain ensimmäinen avainsegmentti on NULL. Hakemistoissa voi olla myös ehdollisia sarakkeita. Nämä sarakkeet eivät koskaan näy hakemistossa, mutta tietueita ei voida indeksoida, kun ehdollinen sarake on joko NULL tai ei-NULL.
Tuple indeksoi
Hakemistot voidaan myös määrittää siten, että ne sisältävät yhden merkinnän jokaiselle Teksti- tai Pitkä teksti -sarakkeen alimerkkijonolle. Näitä indeksejä kutsutaan dupleksiindekseiksi. Niitä käytetään nopeuttamaan kyselyitä, joissa on osajonon vastaavia predikaatteja. Tuple-indeksit voidaan määrittää vain teksti-sarakkeille. Esimerkiksi, jos Teksti-sarakkeen arvo on "Rakastan JET Sinistä" ja hakemistossa on määritetty sekvenssin vähimmäiskoko 4 merkkiä ja enimmäispitkä 10 merkkiä, indeksoidaan seuraavat alijonot:
| "Rakastan JETiä" "Love JET" |
Vaikka kaksinkertaiset hakemistot voivat olla hyvin suuria, ne voivat nopeuttaa merkittävästi lomakkeen kyselyjä: löytää kaikki tietueet, jotka sisältävät ”JET Blue” . Niitä voidaan käyttää enimmäismäärän ylittävissä alamerkkijonoissa jakamalla haun alimerkkijono enimmäisleikkurin pituisiksi hakujonoiksi ja leikkaamalla tulokset. Niitä voidaan käyttää tarkkojen merkkijonojen kohdalla niin kauan kuin maksimiputken pituus tai niin lyhyt kuin minimiputken pituus, ilman indeksin leikkauspistettä. Lisätietoja indeksin leikkauksen suorittamisesta ESE: ssä on kohdasta Hakemisto . Tuple-hakemistot eivät voi nopeuttaa kyselyitä, jos hakumerkkijono on lyhyempi kuin minimiputken pituus.
Tapahtumat
Tapahtuma on looginen käsittelyyksikkö, jonka rajaavat BeginTransaction- ja CommitTransaction- tai Rollback-toiminnot. Kaikki tapahtuman aikana suoritetut päivitykset ovat atomisia; ne joko näkyvät tietokannassa samanaikaisesti tai kukaan ei näy. Muiden tapahtumien myöhemmät päivitykset ovat näkymättömiä tapahtumalle. Tapahtuma voi kuitenkin päivittää vain tiedot, jotka eivät ole muuttuneet tällä välin. muuten toiminto epäonnistuu kerralla odottamatta. Vain luku -tapahtumia ei tarvitse koskaan odottaa, ja päivitystapahtumat voivat häiritä vain toistensa päivitystapahtumaa. Tapahtumat, jotka lopetetaan palautuksella tai järjestelmän kaatumisella, eivät jätä jälkiä tietokantaan. Yleensä tietojen tila palautetaan palautuksen yhteydessä siihen, mikä se oli ennen BeginTransaction-toimintoa.
Tapahtumat voivat olla sisäkkäin enintään 7 tasoa, yksi ylimääräinen taso varattu ESE: n sisäiseen käyttöön. Tämä tarkoittaa, että osa tapahtumasta voidaan palauttaa takaisin ilman, että koko tapahtumaa on tarpeen palauttaa; sisäkkäisen tapahtuman CommitTransaction merkitsee vain yhden käsittelyvaiheen onnistumista, ja uloin tapahtuma voi vielä epäonnistua. Muutokset tehdään tietokantaan vain, kun uloin tapahtuma on tehty. Tätä kutsutaan sitoutumiseksi tapahtumatasolle 0. Kun tapahtuma sitoutuu tapahtumatasolle 0, tapahtumaa kuvaava data huuhdellaan synkronisesti lokiin sen varmistamiseksi, että tapahtuma suoritetaan loppuun myös seuraavan järjestelmän kaatumisen yhteydessä. Lokin synkroninen huuhtelu tekee ESE-tapahtumista kestäviä. Joissakin tapauksissa sovellus haluaa kuitenkin tilata päivitykset, mutta ei välittömästi takaa, että muutokset tehdään. Tässä sovellukset voivat tehdä muutoksia JET_bitIndexLazyFlush -ohjelmalla.
ESE tukee samanaikaisuuden hallintamekanismia, jota kutsutaan moniversioksi. Moniversioinnissa jokainen tapahtuma kysyy yhtenäisen näkymän koko tietokannasta sellaisena kuin se oli tapahtuman alkaessa. Ainoat sen kohtaamat päivitykset ovat sen tekemiä päivityksiä. Tällä tavoin kukin tapahtuma toimii ikään kuin se olisi ainoa aktiivinen tapahtuma järjestelmässä, lukuun ottamatta kirjoitusristiriitoja. Koska tapahtuma voi tehdä muutoksia lukemien tietojen perusteella, jotka on jo päivitetty toisessa tapahtumassa, moniversiointi ei itsessään takaa sarjoitettavia tapahtumia. Kuitenkin serializability voidaan saavuttaa haluttaessa yksinkertaisesti käyttämällä tarkka merkintä lukea lukot lukita lukea tietoja, päivitykset perustuvat. Sekä luku- että kirjoituslukituksia voidaan nimenomaisesti pyytää GetLock-toiminnon yhteydessä.
Lisäksi ESE tukee edistyksellistä samanaikaisuuden hallintaominaisuutta, joka tunnetaan escrow-lukituksena. Escrow-lukitus on erittäin samanaikainen päivitys, jossa numeerista arvoa muutetaan suhteellisesti eli lisäämällä tai vähentämällä toinen numeerinen arvo. Escrow-päivitykset eivät ole ristiriidassa edes muiden samanaikaisen escrow-päivityksen kanssa samaan peruspisteeseen. Tämä on mahdollista, koska tuetut toiminnot ovat vaihdettavissa ja ne voidaan sitouttaa itsenäisesti tai palauttaa. Tämän seurauksena ne eivät häiritse samanaikaisia päivitystapahtumia. Tätä ominaisuutta käytetään usein ylläpidetyissä yhdistelmissä.
ESE laajentaa myös tapahtumasemantiikkaa datan manipulointitoiminnoista tietojen määrittelyoperaatioihin. On mahdollista lisätä hakemisto taulukkoon ja saada samanaikaisesti käynnissä olevat tapahtumat päivittämään sama taulukko ilman minkäänlaista tapahtumalukitusta. Myöhemmin, kun nämä tapahtumat on suoritettu, äskettäin luotu hakemisto on kaikkien tapahtumien käytettävissä, ja sillä on merkintöjä muiden tapahtumien tekemille tietueiden päivityksille, jotka eivät voineet havaita indeksin läsnäoloa päivitysten yhteydessä. Tiedonmääritysoperaatiot voidaan suorittaa kaikilla ominaisuuksilla, joita odotetaan tapahtumamekanismilta tietuepäivityksille. Tällä tavalla tuettuja tietomääritystoimintoja ovat AddColumn, DeleteColumn, CreateIndex, DeleteIndex, CreateTable ja DeleteTable.
Kohdistin on looginen osoitin taulukon hakemistossa. Kohdistin voidaan sijoittaa tietueelle ennen ensimmäistä tietuetta, viimeisen tietueen jälkeen tai jopa tietueiden väliin. Jos kohdistin on sijoitettu tietueen eteen tai jälkeen, nykyistä tietuetta ei ole. On mahdollista, että useat kohdistimet ovat samassa taulukkoindeksissä. Monet tietue- ja saraketoiminnot perustuvat kohdistimen sijaintiin. Kohdistimen sijaintia voidaan siirtää peräkkäin Siirrä-toiminnoilla tai suoraan hakuhakemistoilla hakutoiminnoilla. Kohdistimet voidaan myös siirtää murto-osioon indeksin sisällä. Tällä tavalla kohdistin voidaan siirtää nopeasti peukalopalkkiasemaan. Tämä toiminto suoritetaan samalla nopeudella kuin hakutoiminto. Mitään väliintulevia tietoja ei saa käyttää.
Jokaisella kohdistimella on kopiointipuskuri uuden tietueen luomiseksi tai olemassa olevan tietueen muokkaamiseksi sarakkeittain. Tämä on sisäinen puskuri, jonka sisältöä voidaan muuttaa SetColumns-toiminnoilla. Kopiopuskurin muutokset eivät muuta automaattisesti tallennettuja tietoja. Nykyisen tietueen sisältö voidaan kopioida kopiointipuskuriin PrepareUpdate-toiminnolla, ja päivitystoiminnot tallentavat kopiointipuskurin sisällön tietueeksi. Kopiointipuskuri tyhjennetään implisiittisesti tapahtuman sitoutumisessa tai palautuksessa sekä navigointitoiminnoissa. RetrieveColumns voidaan käyttää saraketietojen hakemiseen joko tietueesta tai kopiopuskurista, jos sellaista on.
Kyselyn käsittely
ESE-sovellukset kysyvät poikkeuksetta tietojaan. Tässä asiakirjan osassa kuvataan ominaisuuksia ja tekniikoita sovelluksille kyselyprosessilogiikan kirjoittamiseen ESE: hen.
Lajittelu ja väliaikaiset pöydät
ESE tarjoaa lajitteluominaisuuden väliaikaisten taulukkojen muodossa. Sovellus lisää tietueet lajitteluprosessiin yksi tietue kerrallaan ja noutaa ne sitten tietueen kerrallaan järjestyksessä. Lajittelu suoritetaan tosiasiallisesti viimeisen tietueen lisäämisen ja ensimmäisen tietueen noutamisen välillä. Väliaikaisia taulukoita voidaan käyttää myös osittaisiin ja täydellisiin tulosjoukoihin. Nämä taulukot voivat tarjota samat ominaisuudet kuin perustaulukot, mukaan lukien mahdollisuus navigoida peräkkäin tai suoraan riveihin käyttämällä lajittelumääritystä vastaavia hakemistonäppäimiä. Väliaikaiset taulukot voidaan myös päivittää monimutkaisten aggregaattien laskemiseen. Yksinkertaiset aggregaatit voidaan laskea automaattisesti lajittelua muistuttavalla ominaisuudella, jossa haluttu aggregaatti on luonnollinen tulos lajitteluprosessista.
Indeksien peittäminen
Saraketietojen noutaminen suoraan toissijaisista hakemistoista on tärkeä suorituskyvyn optimointi. Sarakkeet voidaan noutaa suoraan toissijaisista hakemistoista, ilman tietueisiin pääsyä, RetrieveColumns-toiminnon RetrieveFromIndex-lipun kautta. Hakemistoissa navigoiminen on paljon tehokkaampaa hakea sarakkeita toissijaisesta hakemistosta kuin tietueesta. Jos saraketiedot haettiin tietueesta, tietueen etsiminen ensisijaisella avaimella on tarpeen lisäsuuntauksen avulla. Tämä voi johtaa lisälevyihin. Kun hakemisto sisältää kaikki tarvittavat sarakkeet, sitä kutsutaan peittoindeksiksi. Huomaa, että taulukon ensisijaisessa hakemistossa määritetyt sarakkeet löytyvät myös toissijaisista hakemistoista ja ne voidaan samalla tavoin hakea JET_bitRetrieveFromPrimaryBookmarkilla.
Hakemistonäppäimet tallennetaan normalisoidussa muodossa, joka voidaan monissa tapauksissa denormalisoida alkuperäisen sarakkeen arvoksi. Normalisointi ei ole aina palautettavissa. Esimerkiksi Teksti- ja Pitkä teksti -saraketyyppejä ei voida denormoida. Lisäksi hakemistonäppäimet voidaan katkaista, kun saraketiedot ovat hyvin pitkiä. Tapauksissa, joissa sarakkeita ei voida hakea suoraan toissijaisista hakemistoista, tietuetta voidaan käyttää aina tarvittavien tietojen noutamiseksi.
Hakemiston risteys
Kyselyihin liittyy usein yhdistelmä tietorajoituksia. Tehokas tapa käsitellä rajoitusta on käyttää käytettävissä olevaa hakemistoa. Jos kyselyyn liittyy kuitenkin useita rajoituksia, sovellukset käsittelevät rajoitukset usein kävelemällä yhden hakemiston tyydyttävän rajoittavimman predikaatin koko indeksialueen. Kaikki jäljellä olevat predikaatit, joita kutsutaan jäännösedikaateiksi, käsitellään soveltamalla predikaatti itse tietueeseen. Tämä on yksinkertainen menetelmä, mutta haittana on se, että joudutaan suorittamaan useita levyn käyttöoikeuksia tallenteiden tuomiseksi muistiin jäännös predikaatin soveltamiseksi.
Hakemistoristeys on tärkeä kyselymekanismi, jossa useita hakemistoja käytetään yhdessä monimutkaisen rajoituksen tehokkaampaan käsittelyyn. Sen sijaan, että käytetään vain yhtä hakemistoa, useiden hakemistojen indeksialueet yhdistetään, jolloin saadaan paljon pienempi määrä tietueita, joihin voidaan käyttää mitä tahansa jäännös predikaattia. ESE tekee tämän helpoksi toimittamalla IntersectIndexes-operaation. Tämä toiminto hyväksyy sarjan indeksialueita saman taulukon hakemistoista ja palauttaa väliaikaisen taulukon ensisijaisista avaimista, joita voidaan käyttää siirtymiseen kaikkien taulukon ennusteiden tyydyttäviin perustaulukotietueisiin.
Valmiiksi liitetyt taulukot
Liittyminen on normaali taulukkorakenteen yhteinen operaatio, jossa loogisesti liittyvät tiedot kootaan yhteen käytettäväksi sovelluksessa. Liittyminen voi olla kallista toimintaa, koska monia datan käyttöoikeuksia saatetaan tarvita liittyvän datan tuomiseksi muistiin. Tämä työ voidaan joissakin tapauksissa optimoida määrittelemällä yksi perustaulukko, joka sisältää tietoja kahdelle tai useammalle loogiselle taulukolle. Pohjataulukon sarakejoukko on näiden loogisten taulukoiden sarakejoukkojen yhdistys. Merkityt sarakkeet mahdollistavat tämän, koska ne käsittelevät hyvin sekä moniarvoisia että harvoin arvostettuja tietoja. Koska asiaan liittyvät tiedot tallennetaan yhdessä samaan tietueeseen, niitä käytetään yhdessä, mikä minimoi levyn käyttöoikeuksien määrän liittämisen suorittamiseksi. Tämä prosessi voidaan laajentaa suureen määrään loogisia taulukoita, koska ESE voi tukea jopa 64 993 koodattua saraketta. Koska indeksit voidaan määritellä moniarvoisissa sarakkeissa, on mahdollista indeksoida 'sisäpuoliset' taulukot. Joitakin rajoituksia on kuitenkin olemassa, ja sovellusten tulisi harkita liittymistä huolellisesti ennen tämän tekniikan käyttämistä.
Kirjaaminen ja kaatumisen palauttaminen
ESE: n kirjaus- ja palautustoiminto tukee taattua tietojen eheyttä ja yhdenmukaisuutta järjestelmän kaatumisen yhteydessä. Kirjaaminen on prosessi, jossa tietokannan päivitystoiminnot tallennetaan turhasti lokitiedostoon. Lokitiedostorakenne on erittäin vankka järjestelmän kaatumisia vastaan. Palautus on prosessi, jolla tätä lokia käytetään palauttamaan tietokannat yhtenäiseen tilaan järjestelmän kaatumisen jälkeen.
Tapahtumatoiminnot kirjataan ja loki huuhdellaan levylle jokaisen sitoutumisen yhteydessä tapahtumatasolle 0. Tämä sallii palautusprosessin tehdä päivitykset uudelleen tapahtumissa, jotka sitoutuvat tapahtumatasoon 0, ja kumota tapahtumien tekemät muutokset, jotka eivät sitoutuneet tapahtumatasolle. 0. Tämän tyyppiseen palautusjärjestelmään viitataan usein ”roll-forward / roll-backward” -palautusjärjestelmänä. Lokeja voidaan säilyttää, kunnes tiedot kopioidaan turvallisesti alla kuvatun varmuuskopiointiprosessin kautta, tai lokeja voidaan käyttää uudelleen pyöreällä tavalla heti, kun niitä ei enää tarvita järjestelmän kaatumisesta palautumiseen. Pyöreä kirjaaminen minimoi lokiin tarvittavan levytilan määrän, mutta sillä on vaikutusta kykyyn luoda uudelleen datatila mediavian sattuessa.
Varmuuskopiointi ja palautus
Kirjaaminen ja palauttaminen ovat tärkeässä asemassa myös tietojen suojaamisessa mediavirheiltä. ESE tukee online-varmuuskopiointia, jossa yksi tai useampi tietokanta kopioidaan, sekä lokitiedostot tavalla, joka ei vaikuta tietokantatoimintoihin. Tietokantojen kyselyä ja päivitystä voidaan jatkaa varmuuskopioinnin aikana. Varmuuskopiosta käytetään nimitystä "sumea varmuuskopio", koska palautusprosessi on suoritettava osana varmuuskopion palautusta yhtenäisen tietokantaryhmän palauttamiseksi. Sekä suoratoisto että varjo kopiointi ovat tuettuja.
Suoratoiston varmuuskopiointi on varmuuskopiointimenetelmä, jossa varmuuskopioinnin aikana tehdään kopiot kaikista halutuista tietokantatiedostoista ja tarvittavista lokitiedostoista. Tiedostokopiot voidaan tallentaa suoraan nauhalle tai ne voidaan tehdä muille tallennuslaitteille. Suoratoistetuilla varmuuskopioilla ei tarvita minkäänlaista toiminnan lopettamista. Sekä tietokanta että lokitiedostot tarkistetaan, jotta varmistetaan, ettei varmuuskopioinnin aikana tietojoukossa ole tietoja vioittuneita. Suoratoiston varmuuskopiot voivat olla myös varmuuskopioita. Inkrementaaliset varmuuskopiot ovat sellaisia, joissa vain lokitiedostot kopioidaan ja jotka voidaan palauttaa edellisen täydellisen varmuuskopion kanssa kaikkien tietokantojen viemiseksi viimeaikaiseen tilaan.
Shadow copy -varmuuskopiot ovat uusi nopea varmuuskopiointimenetelmä. Varjokopioiden varmuuskopiot ovat dramaattisesti nopeampia, koska kopio tehdään käytännössä lyhyen sovelluksen lopettamisen jälkeen. Kun tietoja päivitetään myöhemmin, virtuaalikopio toteutuu. Joissakin tapauksissa varjokopioiden varmuuskopioiden laitteistotuki tarkoittaa, että virtuaalikopioiden tallentaminen ei ole tarpeellista. Shadow copy -varmuuskopiot ovat aina täydellisiä varmuuskopioita.
Palautusta voidaan käyttää yhden varmuuskopion käyttämiseen tai sitä voidaan käyttää yhdistämään yksi täydellinen varmuuskopio yhden tai useamman lisävarmuuskopion kanssa. Lisäksi kaikki olemassa olevat lokitiedostot voidaan toistaa samoin, jotta voidaan luoda koko tietojoukko aina viimeiseen tapahtumaan, joka on kirjattu sitoutuneena tapahtumatasolle 0. Varmuuskopion palauttaminen voidaan tehdä mihin tahansa järjestelmään, joka pystyy tukemaan alkuperäistä sovellusta. Sen ei tarvitse olla sama kone tai edes sama koneen kokoonpano. Tiedostojen sijaintia voidaan muuttaa osana palautusprosessia.
Varmuuskopioi ja palauta eri laitteistoihin
Kun ESENT-tietokanta luodaan, fyysisen levysektorin koko tallennetaan tietokantaan. Fyysisen sektorin koon odotetaan pysyvän yhtenäisenä istuntojen välillä; muuten ilmoitetaan virhe. Kun fyysinen asema kloonataan tai palautetaan asemakuvasta asemaan, joka käyttää eri fyysisen sektorin kokoa ( Advanced Format Drives), ESENT ilmoittaa virheistä.
Tämä on tunnettu ongelma, ja Microsoftilla on saatavilla pikakorjauksia. Windows Vista tai Windows Server 2008: katso KB2470478. Windows 7 tai Windows Server 2008 R2: katso KB982018.
Historia
JET Blue on alun perin kehitetty Microsoftin mahdollisena päivityksenä Microsoft Accessin JET Red -tietokantamoottoriin , mutta sitä ei koskaan käytetty tässä roolissa. Sen sijaan sitä jatkoivat Exchange Server, Active Directory, File Replication Service (FRS), Security Configuration Editor, Certificate Services, Windows Internet Name Service (WINS) ja monet muut Microsoftin palvelut, sovellukset ja Windows-komponentit. Vuosien ajan se oli yksityinen sovellusliittymä, jota vain Microsoft käytti, mutta siitä on tullut julkaistu sovellusliittymä, jota kuka tahansa voi käyttää.
Data Access Engine (DAE) -työ alkoi maaliskuussa 1989, kun Allen Reiter liittyi Microsoftiin. Seuraavan vuoden aikana neljän kehittäjän tiimi työskenteli Allenin parissa pitkälti ISAM: n valmistamiseksi. Microsoftilla oli jo BC7 ISAM (JET Red), mutta aloitti Data Access Enginen (DAE) pyrkimykset rakentaa vankempi tietokantamoottori merkinnänä tuolloin uudelle asiakas-palvelinarkkitehtuurialueelle. Keväällä 1990 BC7 ISAM- ja DAE-ryhmät liittyivät yhteiseen moottoritekniikkaan (JET); vastuussa kahden moottorin v1 ( JET Red ) ja v2 (JET Blue) tuottamisesta, jotka vastaavat samaa API-määritystä (JET API). DAE: stä tuli JET Blue Israelin lipun värin vuoksi. BC7 ISAMista tuli JET Red Venäjän lipun värin vuoksi. Vaikka JET Blue ja JET Red kirjoitettiin samaan API-määrittelyyn, he eivät jakaneet mitään ISAM-koodia. He tukivat molempia yhteistä kyselyprosessoria, QJETiä, josta myöhemmin tuli yhdessä BC7 ISAM: n kanssa synonyymi JET Redille.
JET Blue toimitettiin ensimmäisen kerran vuonna 1994 WINS: n, DHCP: n ja Windows NT 3.5: n nyt poistettujen RPL- palveluiden ISAM-muodossa . Se toimitettiin jälleen Microsoft Exchangen tallennusmoottorina vuonna 1996. Windows-lisäpalvelut valitsivat JET Blue -tallennusteknologiaksi ja vuoteen 2000 mennessä kaikki Windows-versiot alkoivat toimittaa JET Blue -palvelun mukana. Active Directory käytti JET Blue -ohjelmaa, ja siitä tuli osa erityistä Windows-koodisarjaa nimeltä TCB (Trusted Computing Base). JET Blue -ohjelmaa käyttävien Microsoft-sovellusten määrä kasvaa jatkuvasti, ja JET Blue -sovellusliittymä julkaistiin vuonna 2005 helpottamaan yhä suuremman määrän sovellusten ja palvelujen käyttöä sekä Windowsissa että sen ulkopuolella.
Microsoft Exchange -verkkoblogimerkinnässä todettiin, että JET Blue -ohjelmaan osallistuneet kehittäjät ovat Cheen Liao, Stephen Hecht, Matthew Bellew, Ian Jose, Edward "Eddie" Gilbert, Kenneth Kin Lum, Balasubramanian Sriram, Jonathan Liem, Andrew Goodsell, Laurion Burchall, Andrei Marinescu, Adam Foxman, Ivan Trindev, Spencer Low ja Brett Shirley.
Tammikuussa 2021 Microsoft avasi ESE: n. Se lähetettiin GitHubiin sallivalla MIT-lisenssillä .
Vertailu JET Rediin
Vaikka heillä on yhteinen sukulinja, JET Redin ja ESE: n välillä on suuria eroja .
- JET Red on tiedostojenjakotekniikka, kun taas ESE on suunniteltu upotettavaksi palvelinsovellukseen, eikä se jaa tiedostoja.
- JET Red tekee parhaan mahdollisen palautustiedoston, kun taas ESE: llä on kirjoituspäiväkirjaus ja yksittäiskuvien eristys taattujen kaatumisten palauttamiseksi.
- JET Red ennen versiota 4.0 tukee vain sivutason lukitusta, kun taas ESE ja JET Red versio 4.0 tukevat tietuetason lukitusta.
- JET Red tukee monenlaisia kyselyliitäntöjä, mukaan lukien ODBC ja OLE DB . ESE ei lähetä kyselymoottoria, vaan se luottaa sovelluksiin, jotka kirjoittavat omat kyselynsä C ISAM-koodina.
- JET Redin tietokantatiedoston enimmäiskoko on 2 GiB , kun taas ESE: n suurin tietokantatiedostokoko on 8 TiB 4 KiB- sivulla ja 16 TiB 8 KiB-sivulla.
Viitteet
- "Vaihtoterminologia" . Arkistoitu alkuperäisestä 2008-11-09 . Haettu 20.8.2015 .
- "Tietosäilön perustiedot" . Arkistoitu alkuperäisestä 9. kesäkuuta 2007 . Haettu 18.06.2007 .