Кіріспе

JET Red сақтау механизмі Microsoft Access

Extensible Storage Engine (ESE), сондай-ақ JET Blue деп те аталады, Microsoft компаниясының ISAM (индекстелген тізбектік қол жеткізу әдісі) деректерді сақтау технологиясы. ESE – Microsoft Exchange Server, Active Directory және Windows Search жүйелерінің негізі. Ол Windows Update клиенті және Көмек және қолдау орталығы сияқты бірқатар Windows компоненттерінде де қолданылады. Оның мақсаты – бағдарламаларға деректерді индекстелген және тізбектік түрде қол жеткізу арқылы сақтауға және алуға мүмкіндік беру. ESE деректерді транзакциялық түрде жаңарту және алуды қамтамасыз етеді. Деректердің дұрыстығын сақтау үшін жүйелік қателіктер кезінде де деректерді қалпына келтіру механизмі қарастырылған. ESE-дегі транзакциялар жоғары деңгейде параллельдікпен жұмыс істейді, бұл ESE-ді серверлік бағдарламалар үшін ыңғайлы етеді. ESE деректерге жоғары жылдамдықпен қол жеткізуді қамтамасыз ету үшін деректерді интеллектуалды түрде кэштейді. Сонымен қатар, ESE жеңіл салмақты, сондықтан оны қосымша бағдарламаларда пайдалануға болады. ESE Runtime (ESENT.DLL) Windows 2000 нұсқасынан бастап Windows-тың барлық нұсқаларымен бірге шығарылған, ал ESE орындалу уақытының x64 нұсқасы Windows XP және Windows Server 2003 x64 нұсқаларымен бірге жеткізілген. Microsoft Exchange, Exchange 2003-ке дейін тек 32 биттік нұсқамен шығарылды, себебі ол қолдау көрсетілген жалғыз платформа болды. Exchange 2007 64 биттік нұсқасымен бірге шығарылады.

Деректер қоры

Деректер қоры – деректердің физикалық және логикалық жиынтығы. ESE деректер қоры Windows жүйесінде бір файл сияқты көрінеді. Ішінде деректер қоры 2, 4, 8, 16 немесе 32 КБ беттерден тұратын жиынтық (Windows 7 және Exchange 2010 жүйелерінде тек 16 және 32 КБ беттер қолжетімді), теңгерілген B-ағаш құрылымында орналасқан. Бұл беттерде деректер қорындағы деректерді сипаттау үшін мата-деректер, деректердің өзі, деректердің маңызды ретін сақтауға арналған индекстер және басқа да ақпараттар болады. Бұл ақпарат деректер қоры файлында шатастырылған, бірақ бірге қолданылатын деректер деректер қорында жинақталуы үшін күш салынады. 8 килобайт көлеміндегі беттер үшін ESE деректер қоры 232 бетке дейін немесе 16 терабайт дерек сақтауы мүмкін. ESE деректер қоры инстанциялар деп аталатын топтарға бөлінеді. Көптеген қолданбалар бір инстанцияны пайдаланады, бірақ барлық қолданбалар бірнеше инстанцияны да пайдалана алады. Инстанцияның маңыздылығы – ол бір немесе бірнеше деректер қорына бір қалпына келтіру журналы сериясын байланыстырады. Қазіргі уақытта ESE инстанциясына кез келген уақытта 6 пайдаланушы деректер қорын қосуға болады. ESE-ны пайдаланатын әрбір жеке процесте 1024 ESE инстанциясы болуы мүмкін. Деректер қоры көшіруге болады, яғни оны бір жұмыс істеп тұрған ESE инстанциясынан ажыратып, кейіннен сол немесе басқа жұмыс істеп тұрған инстанцияға қосуға болады. Ажыратылған кезде деректер қоры стандартты Windows құралдарын пайдалана отырып көшірілуі мүмкін. Деректер қоры белсенді қолданылып жатқанда көшіруге болмайды, себебі ESE деректер қоры файлдарын эксклюзивті түрде ашады. Деректер қоры Windows жүйесінің тікелей адрестелетін I/O операцияларын қолдайтын кез келген құрылғыда физикалық түрде орналасуы мүмкін.

Кестелер

Кесте – әрбір жазбаның бағандарының бірдей жиынтығы бар біртекті жазбалар жиынтығы. Әрбір кесте кесте атауымен анықталады, оның қолданылу аймағы кесте орналасқан деректер базасымен шектеледі. Деректер базасындағы кестеге бөлінген дискілік кеңістіктің мөлшері CreateTable операциясы арқылы кесте жасалған кезде берілген параметрмен анықталады. Кестелер деректер құрылған кезде автоматты түрде кеңейеді. Кестелерде бір немесе бірнеше индекс болады. Жазба деректері үшін кем дегенде бір кластерленген индекс болуы керек. Егер қолданба кластерленген индексті анықтамаса, жазбалардың енгізілу хронологиялық тәртібі бойынша реттелген және кластерленген жасанды индекс қолданылады. Индекстер деректердің маңызды ретін сақтау үшін анықталады және индекс бойынша тізбекпен жазбаларға қол жеткізуге, сондай-ақ индекс бағанының мәндері бойынша тікелей қол жеткізуге мүмкіндік береді. ESE-де кластерленген индекстер сонымен қатар бастапқы болуы керек, яғни индекс кілті бірегей болуы тиіс. Кластерленген және кластерленбеген индекстер B+ ағаштары арқылы ұсынылады. Егер қосу немесе жаңарту операциясы беттің толуына себеп болса, бет екіге бөлінеді: жаңа бет бөлініп, екі бұрынғы іргелес беттердің арасына логикалық тізбек ретінде қосылады. Бұл жаңа бет физикалық жағынан логикалық көршілеріне іргелес болмағандықтан, оған қол жеткізу тиімділігі төмендейді. ESE деректерді қайта жинақтайтын онлайн жинақтау мүмкіндігіне ие. Егер кесте жиі жаңартылатын болса, кесте немесе индекс жасалған кезде тиісті бет тығыздығын көрсету арқылы болашақ енгізулер үшін орын резервтеуге болады. Бұл бөлу операцияларын болдырмауға немесе кейінге шегеруге мүмкіндік береді.

Тіркемелер мен бағандар

Жазба – байланысты бағана мәндерінің жиынтығы. Жазулар Update операциялары арқылы енгізіліп, жаңартылады және Delete операциялары арқылы жойылуы мүмкін. Бағандар SetColumns және RetrieveColumns операциялары арқылы орнатылады және алынады. Жазбаның максималды көлемі 8 килобайттық беттер үшін 8110 байтты құрайды, ұзын мәнді бағандардан басқа. LongText және LongBinary бағана түрлері бұл өлшем шектеуіне елеулі үлес қоспайды, ал деректер ұзын мәнді бағандарда сақталғанда, деректер базасының бет өлшемінен әлдеқайда үлкен деректерді сақтауға болады. Жазбада ұзын мәнді сілтеме сақталғанда, жазбадағы деректердің тек 9 байты қажет. Бұл ұзын мәндердің көлемі 2 гигабайтқа (GB) дейін жете алады. Жазулар әдетте біркелкі болады, себебі әрбір жазуда бағаналардың бірдей жиынтығы үшін мәндер жиынтығы болады. ESE жүйесінде кесте үшін көптеген бағандарды анықтауға болады, бірақ кез келген нақты жазуда NULL емес бағандардың саны аз болуы мүмкін. Осы тұрғыдан алғанда, кесте гетерогенді жазулар жиынтығы болып табылуы мүмкін. ESE 1 биттен 2 ГБ-қа дейін көлемдегі бағана мәндерінің кең ауқымын қолдайды. Бағанның дұрыс түрін таңдау маңызды, өйткені бағанның түрі оның көптеген қасиеттерін, соның ішінде индекстер үшін ретін анықтайды. ESE келесі дерек түрлерін қолдайды:

Белгілі, өзгермелі және белгіленген бағандар

Әрбір ESE кестесі 127 тұрақты ұзындығы бар бағананы, 128 өзгермелі ұзындығы бар бағананы және 64,993 белгіленген бағананы анықтай алады. Тұрақты бағаналар – бұл олардың мәніне қарамастан, әрбір жазбада бірдей орын алатын бағаналар. Тұрақты бағаналар бағана мәнінің NULL екенін көрсету үшін 1 бит және осы бағана немесе кейін анықталған тұрақты бағана орналасқан әрбір жазбадағы белгіленген орынды көрсету үшін бірнеше бит алады. Өзгермелі бағаналар – бұл әрбір жазбада олар орналасқанда өзгермелі орынды алатын бағаналар, бұл нақты бағана мәнінің көлеміне байланысты. Өзгермелі бағаналар NULL екенін және көлемін анықтау үшін 2 байтты алады, сондай-ақ осы бағана орналасқан әрбір жазбада өзгермелі орынды алады. Белгіленген бағаналар – бұл жазбада орналасқанда ешқандай орын алмайтын бағаналар. Олар бір мәнді болуы мүмкін, бірақ бірнеше мәнді де болуы мүмкін. Бір белгіленген бағананың бір жазбада бірнеше мәні болуы мүмкін. Белгіленген бағаналар жазбада орналасқанда, белгіленген бағананың әрбір мысалы белгіленген бағана мысалының мәнінен басқа шамамен 4 байт орын алады. Егер бір белгіленген бағананың мысалдарының саны көп болса, әрбір белгіленген бағана мысалы үшін қосымша шығын шамамен 2 байтты құрайды. Белгіленген бағаналар сирек кездесетін бағаналар үшін өте қолайлы, өйткені олар орналасқан жағдайда ешқандай орын алмайды. Егер бірнеше мәнді белгіленген бағана индекстелсе, индекс белгіленген бағананың әрбір мәні үшін жазбаға бір жазбаны қосады. Берілген кестеде бағаналар екі санаттың біріне жатады: әрбір жазбада дәл бір рет пайда болатын бағаналар, мүмкін бірнеше NULL мәнімен; және сирек кездесетін немесе бір жазбада бірнеше рет пайда болатын бағаналар. Тұрақты және өзгермелі бағаналар бірінші санатқа жатады, ал белгіленген бағаналар екінші санатқа жатады. Екі бағана санатының ішкі өрнегі әртүрлі, сондықтан бағана санаттары арасындағы айырмашылықтарды түсіну маңызды. Тұрақты және өзгермелі бағаналар әдетте әрбір жазбада көрсетіледі, тіпті мәні NULL болған жағдайда да. Осы бағаналарға офсет кестесі арқылы жылдам қол жеткізуге болады. Белгіленген бағаналардың пайда болуы бағана идентификаторымен алдын ала жүреді және бағана белгіленген бағаналар жиынтығында екілік іздеу арқылы анықталады.

Ұзақ мәндер

Ұзын мәтін және Ұзын бинарлық бағана түрлері үлкен бинарлық нысандар болып табылады. Олар кластерленген индекстен бөлек B+ағашта, ұзын мәнді идентификатор және байт смещениесі бойынша кілттелген күйде сақталады. ESE осы бағаналар үшін қосымша жазу, байт диапазоны бойынша жаңарту және өлшемді орнату мүмкіндіктерін қолдайды. Сондай-ақ, ESE бір дана сақтау мүмкіндігіне ие, онда бірнеше жазба бір үлкен бинарлық нысанға сілтеме жасай алады, әрбір жазбада ақпараттың жеке данасы бар сияқты, яғни жазбалар арасында құлыптау қақтығыстары болмайды. Ұзын мәтін немесе Ұзын бинарлық бағана мәнінің максималды көлемі 2 ГБ құрайды.

Версия, автоматты түрде көбейту және ескроу бағандары

Версия бағандары ESE жүйесімен осы бағанды қамтитын жазба жаңарту операциясы арқылы өгертілген сайын автоматты түрде ұлғаяды. Бұл бағанды қолданба орната алмайды, тек оқуға болады. Версия бағандарының қолданылуы – белгілі бір жазбаның жадтағы көшірмесін жаңарту қажеттігін анықтау. Егер кестедегі жазбаның мәні кэштелген көшірмедегі мәннен артық болса, кэштелген көшірме ескірген деп есептеледі. Версия бағандары "Long" типінде болуы керек. Автоматты ұлғаю бағандары ESE жүйесімен автоматты түрде орнатылады, яғни бағандағы мән кестедегі әрбір жазба үшін бірегей болады. Бұл бағандар, версия бағандары сияқты, қолданбамен орнатыла алмайды. Автоматты ұлғаю бағандары тек оқуға арналған және жаңарту операциясы арқылы кестеге жаңа жазба енгізілгенде автоматты түрде орнатылады. Бағандағы мән жазбаның өмір бойында өзгермейді және әрбір кестеде тек бір ғана автоматты ұлғаю бағанына рұқсат етіледі. Автоматты ұлғаю бағандары "Long" немесе "Currency" типінде болуы мүмкін. Ескроу бағандарын EscrowUpdate операциясы арқылы өзгертуге болады. Ескроу жаңартулары – сандық дельта операциялары. Ескроу бағандары "Long" типінде болуы керек. Сандық дельта операцияларының мысалдары: мәнге 2 қосу немесе мәннен 1-ді алу. ESE жаңартудың соңғы мәнін емес, мәннің өзгеруін қадағалайды. Бірнеше сессияда бірдей мәнге EscrowUpdate арқылы жасалған өзгерістер болуы мүмкін, себебі ESE нақты соңғы мәнді қай транзакциялар орындалса немесе қайтарылса да анықтай алады. Бұл бірнеше пайдаланушыға сандық дельта өзгерістерін жасау арқылы бағанды бір уақытта жаңартуға мүмкіндік береді. Міндетті емес, деректер қорының механизмі бағанның мәні нөлге тең жазбаларды жоюы мүмкін. Мұндай ескроу бағанының кең таралған қолданылуы – сілтеме санағышы: көптеген жіптер құлпы қолданбай мәнді арттырады/азайтады, ал санағыш нөлге жеткенде жазба автоматты түрде жойылады.

Индекстер

Индекс – кестедегі жазбалардың сақталатын реттелген тізімі. Индекстер реттелген тәртіптегі қатарларға тікелей қол жеткізу үшін де, индекстелген бағаналардың мәндеріне сүйенген жазбаларды іздеу үшін де пайдаланылады. Индекспен анықталған рет, басымдық бойынша реттелген бағаналар тізімі арқылы сипатталады. Осы бағаналар тізімі индекс кілті деп те аталады. Әр бағана индекс сегменті деп аталады. Әрбір индекс сегменті реттелуге қатысқан үлесіне қарай өсу немесе кему ретінде болуы мүмкін. Бір кесте үшін кез келген мөлшерде индекс құруға болады. ESE кең спектрлі индекстеу мүмкіндіктерін ұсынады.

Кластерлік индекстер

Бір индекс кластерленген немесе негізгі индекс ретінде белгіленуі мүмкін. ESE жүйесінде кластерленген индекс бірегей болуы керек және ол негізгі индекс деп аталады. Басқа индекстер кластерленбеген немесе қосымша индекстер ретінде сипатталады. Негізгі индекстер қосымша индекстерден өзгеше, себебі индекс жазбасы – жазбаның өзі, ал жазбаға логикалық сілтеме емес. Қосымша индекстерде негізгі индекспен логикалық байланыс үшін жапырақтарында негізгі кілттер болады. Басқаша айтқанда, кесте негізгі индекс тәртібімен физикалық түрде кластерленген. Негізгі индекс тәртібімен индекстелмеген жазба деректерін алу, әдетте, қосымша индекс тәртібіне қарағанда әлдеқайда жылдам. Бұл себебі бір дискіге қол жеткізу арқылы жадқа бірнеше жазба әкелінеді, олар уақыт бойынша бір-біріне жақын болады. Сол дискіге жасалған бір қол жеткізу бірнеше жазбаға қол жеткізу операцияларын қамтиды. Алайда, индекстің ортасына жазбаны енгізу, негізгі индекс тәртібімен анықталғандай, оны индекстің соңына қосуға қарағанда әлдеқайда баяу болуы мүмкін. Кестелерді жобалау кезінде жаңарту жиілігін деректерді іздеу үлгілерімен мұқият салыстыру қажет. Егер кесте үшін негізгі индекс анықталмаса, дерекқор кілті (DBK) индексі деп аталатын автоматты негізгі индекс құрылады. DBK – жазба енгізілген сайын артатын бірегей сан. Нәтижесінде, DBK индексіндегі жазбалардың физикалық тәртібі – хронологиялық енгізу тәртібі, ал жаңа жазбалар әрқашан кесте соңына қосылады. Егер қолданба бірегей емес индекс бойынша деректерді кластерлеуді қаласа, бұл бірегей емес индекс анықтамасының соңына автоматты түрде артатын бағанды қосу арқылы мүмкін болады.

Көп мәнді бағандар бойынша индекстеу

Индекстер көп мәнді бағандар бойынша құрылуы мүмкін. Көп мәнді бағандары бар жазбалар үшін осы индексерде бірнеше жазба болуы мүмкін. Көп мәнді бағандарды бір мәнді бағандармен бірге индекстеуге болады. Екі немесе одан көп көп мәнді бағандар бірге индекстелген жағдайда, көп мәнді қасиет тек индексердегі бірінші көп мәнді баған үшін ғана сақталады. Төменгі басымдыққа ие бағандар бір мәнді болып есептеледі.

Спарс индекстері

Индекстерді сиретіп анықтауға да болады. Сиретілген индекстерде кестедегі әрбір жазба үшін міндетті түрде бір жазба болуы керек емес. Сиретілген индексті анықтаудың бірнеше тәсілі бар. Индекс кілтінің толығымен NULL болуы, кез келген кілт сегментінің NULL болуы немесе тек бірінші кілт сегментінің NULL болуы жағдайында жазбаларды индекстен шығарып тастауға мүмкіндік беретін опциялар бар. Индекстерде шартты бағандар да болуы мүмкін. Бұл бағандар индексте көрінбейді, бірақ шартты баған NULL немесе NULL емес мәнге ие болғанда жазба индекстелмеуі мүмкін.

Транзакциялар

Транзакция – BeginTransaction және CommitTransaction немесе Rollback операцияларымен шектелген логикалық өңдеу бірлігі. Транзакция кезінде орындалатын барлық жаңартулар атомдық болып табылады; олар деректер базасында бір уақытта пайда болады немесе мүлде пайда болмайды. Басқа транзакциялардың кейінгі жаңартулары ағымдағы транзакцияға көрінбейді. Дегенмен, транзакция тек осы уақытқа дейін өзгермеген деректерді ғана жаңарта алады; әйтпесе, операция күтусіз дереу сәтсіз аяқталады. Тек оқуға арналған транзакциялар күтуді қажет етпейді, ал жаңарту транзакциялары бір-біріне ғана кедергі келтіре алады. Rollback немесе жүйелік қателік салдарынан тоқтатылған транзакциялар деректер базасында ешқандай із қалдырмайды. Жалпы алғанда, деректер күйі Rollback кезінде BeginTransaction операциясынан бұрынғы күйіне қайтарылады. Транзакциялар 7 деңгейге дейін ұяластырылуы мүмкін, ал қосымша бір деңгей ESE ішкі пайдалану үшін резервтелген. Бұл, транзакцияның бір бөлігін кері қайтаруға болады, егер бүкіл транзакцияны кері қайтару қажет болмаса; ұялатылған транзакцияның CommitTransaction операциясы тек өңдеудің бір кезеңінің сәтті аяқталғанын білдіреді, ал сыртқы транзакция әлі де сәтсіз болуы мүмкін. Өзгерістер деректер базасына тек ең сыртқы транзакция CommitTransaction операциясын орындағанда ғана тіркеледі. Бұл 0-деңгейлі міндеттеме ретінде белгілі. Егер транзакция 0-деңгейге міндеттелсе, транзакция туралы деректер жүйелік қателіктер болған жағдайда да транзакцияның аяқталуын қамтамасыз ету үшін бірден журналға жазылады. Журналды синхронды түрде жазу ESE транзакцияларын сенімді етеді. Алайда, кейбір жағдайларда қолданбалар өздерінің жаңартуларын белгілі бір ретпен орындауды қалайды, бірақ өзгерістердің дереу орындалатынына кепілдік беруді қажет етпейді. Мұндай жағдайда, қолданбалар JET bitIndexLazyFlush арқылы өзгерістерді тіркеуге мүмкіндік алады. ESE көп нұсқалы басқару деп аталатын қатарласуды басқару механизмін қолдайды. Көп нұсқалы басқаруда әрбір транзакция транзакция басталған кездегі деректер базасының тұрақты көрінісін сұрайды. Ол тек өзі жасаған жаңартуларды ғана көреді. Осылайша, әрбір транзакция жүйедегі жалғыз белсенді транзакция сияқты жұмыс істейді, жазу қақтығыстары болған жағдайда ғана. Бір транзакция басқа транзакцияда жаңартылған деректерге негізделген өзгерістерді жасаса, көп нұсқалы басқару өзі серияланатын транзакцияларды кепілдемейді. Алайда, қажет болған жағдайда, жаңартулар негізделген оқу деректерін бұғаттау үшін нақты жазбаларды оқуға бұғаттауларын пайдалану арқылы серияланатындықты қол жеткізуге болады. Оқу және жазу бұғаттаулары GetLock операциясы арқылы нақты сұралуы мүмкін. Сонымен қатар, ESE escrow locking деп аталатын қатарласуды басқарудың жетілдірілген мүмкіндігін қолдайды. Escrow locking – бұл сандық мәннің салыстырмалы түрде өзгеруі, яғни басқа сандық мәнді қосу немесе алу арқылы бір мезгілде жаңарту. Escrow жаңартулары бірдей деректерге жасалған басқа escrow жаңартуларымен қайшылыққа түспейді. Бұл операциялар ауыстырылатындықтан және оларды тәуелсіз түрде міндеттеуге немесе кері қайтаруға болады. Нәтижесінде, олар бір мезгілдегі жаңарту транзакцияларына кедергі келтірмейді. Бұл мүмкіндік көбінесе сақталған агрегациялар үшін қолданылады. ESE транзакциялық семантиканы деректерді манипуляциялау операцияларынан деректерді анықтау операцияларына дейін кеңейтеді. Кестеге индекс қосу және бір мезгілде орындалатын транзакциялардың бір кестені жаңартуы мүмкін, ешқандай транзакциялық құлыптау қақтығыстары болмайды. Кейіннен, осы транзакциялар аяқталғаннан кейін жаңадан құрылған индекс барлық транзакциялар үшін қол жетімді болады және жаңартулар кезінде индекстің бар екенін сезіне алмаған басқа транзакциялар жасаған жазбаларға сілтемелер болады. Деректерді анықтау операциялары жазбаларды жаңарту үшін транзакция механизмінен күтілетін барлық мүмкіндіктермен орындалуы мүмкін. Бұл әдіспен қолдау көрсетілетін деректерді анықтау операцияларына AddColumn, DeleteColumn, CreateIndex, DeleteIndex, CreateTable және DeleteTable кіреді.

Курсорды навигациялау және көшірме буфері

Курсор – кесте индексіндегі логикалық нұсқаушы. Курсорды жазбаға, бірінші жазбаның алдына, соңғы жазбадан кейін немесе тіпті жазбалар арасына орналастыруға болады. Егер курсор жазбаның алдында немесе кейінде орналасса, онда ағымдағы жазба болмайды. Бір кесте индексіне бірнеше курсор орналастыруға болады. Көптеген жазбалар мен бағандармен жұмыс істеу курсордың орналасуына байланысты. Курсордың орнын тізбектей жылжыту операциялары арқылы немесе іздеу операциялары арқылы индекс кілттерін пайдаланып тікелей жылжытуға болады. Курсорларды индекстегі бөлшек орнына жылжытуға да болады. Осылайша, курсорды жылдам түрде бас бармақ орнына жылжытуға болады. Бұл операция іздеу операциясымен бірдей жылдамдықпен орындалады. Аралық деректерге қатынау қажет емес. Әрбір курсорда жаңа жазба жасау немесе қолданыстағы жазбаны баған-бағанмен өзгерту үшін көшірме буфері болады. Бұл ішкі буфер, оның мазмұнын SetColumns операцияларымен өзгертуге болады. Көшірме буферінің өзгерістері деректерді автоматты түрде өзгертпейді. Ағымдағы жазбаның мазмұны PrepareUpdate операциясын пайдаланып көшірме буферіне көшірілуі мүмкін, ал Update операциялары көшірме буферінің мазмұнын жазба ретінде сақтайды. Көшірме буфері транзакция аяқталғанда немесе кері қайтарылғанда, сондай-ақ навигациялық операциялар кезінде автоматты түрде тазартылады. RetrieveColumns баған деректерін жазбадан немесе көшірме буферінен, егер ол болса, алу үшін пайдаланылуы мүмкін.

Сұрау салуды өңдеу

ESE қолданбалары міндетті түрде өз деректерін сұрайды. Осы құжаттың бөлімі ESE-де сұраныс өңдеу логикасын жазуға арналған мүмкіндіктер мен техникаларды сипаттайды.

Сорттар мен уақытша кестелер

ESE уақытша кестелер арқылы сұрыптау мүмкіндігін қамтамасыз етеді. Қолданба деректерді сұрыптау процесіне бір-бірлеп жазбалармен енгізеді, содан кейін оларды сұрыпталған күйде бір-бірлеп алады. Сұрыптау, негізінен, соңғы жазба енгізілгеннен бастап, алғашқы жазба алынғанға дейін жүзеге асырылады. Уақытша кестелерді толық және ішінара нәтижелер жиынтықтары үшін де пайдалануға болады. Бұл кестелер базалық кестелерге ұқсас мүмкіндіктерді ұсынады, соның ішінде сұрыптау шарттарына сәйкес индекс кілттерін қолданып, қатарларға тікелей немесе ретті түрде өтуге мүмкіндік береді. Уақытша кестелер күрделі агрегаттарды есептеу үшін жаңартылуы мүмкін. Ал қарапайым агрегаттарды сұрыптауға ұқсас мүмкіндік арқылы автоматты түрде есептеуге болады, онда қажетті агрегат сұрыптау процесінің табиғи нәтижесі болып табылады.

Индекстерді қамтитын

Баған деректерін тікелей екіншілік индекстерден алу – маңызды өнімділік оңтайландыру болып табылады. Бағандар деректерді тікелей қарастырмай, RetrieveColumns операциясындағы RetrieveFromIndex белгісі арқылы екіншілік индекстерден алынуы мүмкін. Индекс бойынша іздеу кезінде жазбадан емес, екіншілік индекстен бағандарды алу әлдеқайда тиімді. Егер баған деректері жазбадан алынса, онда негізгі кілт арқылы жазбаны табу үшін қосымша іздеу қажет болады. Бұл дискіге қосымша жүгінулерге алып келуі мүмкін. Барлық қажетті бағандарды қамтитын индекс – жабатын индекс деп аталады. Кестедегі негізгі индексте анықталған бағандар екіншілік индекстерде де кездеседі және JET bitRetrieveFromPrimaryBookmark арқылы да алынуы мүмкін. Индекс кілттері нормаланған күйде сақталады, көп жағдайда бастапқы баған мәніне дейін денормализациялануы мүмкін. Денормализация әрқашан кері қайтарыла бермейді. Мысалы, мәтін және ұзын мәтін баған түрлерін денормализациялауға болмайды. Сонымен қатар, баған деректері өте ұзын болған жағдайда индекс кілттері қысқартылуы мүмкін. Егер бағандарды тікелей екіншілік индекстерден алу мүмкін болмаса, қажетті деректерді алу үшін жазбаға жүгінуге болады.

Индекс қиылысуы

Сұраулар көбінесе деректерге қатысты шектеулердің жиынтығын қамтиды. Шектеуді өңдеудің тиімді тәсілі – қолжетімді индексті пайдалану. Дегенмен, егер сұрау бірнеше шектеулерді қамтитын болса, қолданбалар көбінесе шектеулерді бір индекспен қанағаттандырылатын ең қатаң предикаттың толық индекс диапазоны бойынша қарау арқылы өңдейді. Қалған предикат, атап айтқанда, қалдық предикат, дерекке тікелей предикатты қолдану арқылы өңделеді. Бұл оңай әдіс, бірақ қалдық предикатты қолдану үшін деректерді жадқа жүктеу үшін көптеген дискілік операциялар қажет болуы мүмкін. Индекс қиылысы – күрделі шектеуді тиімді өңдеу үшін бірнеше индекс бірге қолданылатын маңызды сұрау механизмі. Бір индекс ғана пайдаланудың орнына, бірнеше индекстің диапазондары біріктіріліп, қалдық предикатты қолдануға болатын деректердің санын азайтады. ESE бұл процесті IntersectIndexes операциясы арқылы жеңілдетеді. Бұл операция бір кестеден алынған индекс диапазондарының тізбесін қабылдайды және барлық индекс предикаттарына сәйкес келетін базалық кесте деректеріне өтуге арналған бастапқы кілттердің уақытша кестесін қайтарады.

Алдын ала біріктірілген кестелер

Жосым – қалыпты кестелік құрылымдағы жиі қолданылатын операция, онда логикалық жағынан байланысты деректер қосымшада пайдалану үшін біріктіріледі. Жосымдар көп деректерге қатынау қажет болғандықтан, деректерді жадқа енгізу процесіне байланысты қымбат операциялар болуы мүмкін. Кейбір жағдайларда, екі немесе одан көп логикалық кестенің деректерін қамтитын бір базалық кесте анықтау арқылы бұл процесті оңтайландыруға болады. Базалық кестедегі бағандар жиыны – осы логикалық кестелердің бағандар жиындарының біріндісі. Белгіленген бағандар көп мәнді және сирек мәнді деректерді тиімді өңдеуге мүмкіндік береді, сондықтан мұндай құрылымды жасауға болады. Байланысты деректер бір жазбада бірге сақталғандықтан, олар бірдей уақытта қолжетімді болады, бұл жосымды орындау үшін дискіге қатынау санын азайтады. Бұл процесті көптеген логикалық кестелерге дейін кеңейтуге болады, себебі ESE 64 993 белгіленген бағанға дейін қолдау көрсетеді. Көп мәнді бағандарда индекстерді анықтау мүмкіндігі болғандықтан, «ішкі» кестелерді де индекстеуге болады. Дегенмен, кейбір шектеулер бар, сондықтан қосымшалар осы техниканы қолдану алдында алдын ала жосымды мұқият қарастыруы керек.

Тіркелу және апаттан қалпына келтіру

ESE-нің журналдау және қалпына келтіру мүмкіндігі жүйелік қателіктер кезінде деректердің сенімділігі мен сақталуын қамтамасыз етеді. Журналдау – деректер базасын жаңарту операцияларын журналдық файлға еселенген түрде жазу процесі. Журналдық файлдың құрылымы жүйелік қателіктерге өте төзімді. Қалпына келтіру – жүйелік қателіктен кейін деректер базасын тұрақты күйге келтіру үшін осы журналды пайдалану процесі. Транзакциялық операциялар тіркеледі және журнал транзакция деңгейі 0-ге бекітілген кезде дискіге жіберіледі. Бұл қалпына келтіру процесіне транзакция деңгейі 0-ге бекітілген жаңартуларды қайтадан орындауға және транзакция деңгейі 0-ге бекітілмеген өзгерістерді кері қайтаруға мүмкіндік береді. Мұндай қалпына келтіру схемасы көбінесе «алға жылжу/кері жылжу» схемасы деп аталады. Журналдарды деректер қауіпсіз түрде сақталу үшін резервтік көшірме жасау процесінде сипатталғандай көшірілгенге дейін сақтауға болады, немесе журналдар жүйелік қателіктен қалпына келтіру үшін қажет болмай қалғанда айналмалы түрде қайта пайдаланылуы мүмкін. Айналмалы журналдау журнал үшін қажетті дискілік кеңістікті азайтады, бірақ деректерді қалпына келтіру мүмкіндігіне медиалық қателіктер болған жағдайда әсер етеді.

Сақтық көшірмелеу және қалпына келтіру

Журналдау және қалпына келтіру деректерді құрылғылық ақаулардан қорғауда да маңызды рөл атқарады. ESE бір немесе бірнеше деректер базасын, сондай-ақ журналдық файлдарды деректер базасының жұмысына кедерес келтірмейтін етіп көшіру мүмкіндігін ұсынады. Деректер базасына сауалдар жіберу және жаңарту сақтық көшірме жасалған кезде де жалғастырыла береді. Бұл сақтық көшірме «шала сақтық көшірме» деп аталады, себебі деректер базасының дұрыс жиынтығын қалпына келтіру үшін сақтық көшірмені қалпына келтіру процесінің бір бөлігі ретінде іске асырылуы тиіс. Ағынды және көлеңкелік көшірмелер де қолдау көрсетіледі. Ағынды сақтық көшірме – бұл сақтық көшірме жасау әдісі, онда барлық қажетті деректер базасы файлдары мен қажетті журналдық файлдар сақтық көшірме жасау процесінде көшіріледі. Файлдардың көшірмелерін тікелей магниттік лентаға немесе кез келген басқа сақтау құрылғысына сақтауға болады. Ағынды сақтық көшірмелер үшін ешқандай операцияны тоқтату қажет емес. Деректер базасының және журналдық файлдардың тексеру сомасы сақтық көшірме жасау процесінде деректер жиынтығында деректердің бұзылуы болмауын қамтамасыз ету үшін жүргізіледі. Ағынды сақтық көшірмелер үлесті сақтық көшірмелер де болуы мүмкін. Үлесті сақтық көшірмелер – бұл тек журналдық файлдардың көшірмелерін жасау және оларды бұрынғы толық сақтық көшірмемен бірге қолданып, деректер базасын соңғы күйге келтіруге мүмкіндік беретін сақтық көшірмелер. Көлеңкелік сақтық көшірмелер – бұл жаңа, жоғары жылдамдықты сақтық көшірмелеу әдісі. Көлеңкелік сақтық көшірмелер айтарлықтай жылдам, өйткені көшірме қолданбаны қысқа мерзімге тоқтатып қойғаннан кейін жасалады. Деректер жаңартылғанда виртуалды көшірме материалдық көшірмеге айналады. Кейбір жағдайларда, көлеңкелік сақтық көшірмелерге аппараттық қолдау виртуалды көшірмелерді сақтау қажеттілігін жояды. Көлеңкелік сақтық көшірмелер әрқашан толық сақтық көшірме болып табылады. Қалпына келтіруді жеке сақтық көшірмені қолдану үшін немесе толық сақтық көшірмені бір немесе бірнеше үлесті сақтық көшірмелермен бірге қолдану үшін пайдалануға болады. Бұдан әрі, барлық қолданыстағы журналдық файлдарды қайта ойнату арқылы деректер жиынтығын толығымен қайта құруға болады, тіпті 0 деңгейінде тіркелген соңғы транзакцияға дейін. Сақтық көшірмені бастапқы қолданбаны қолдай алатын кез келген жүйеде қалпына келтіруге болады. Бұл міндетті түрде бірдей машина немесе тіпті бірдей машина конфигурациясы болуы керек емес. Файлдардың орналасқан жері қалпына келтіру процесінің бір бөлігі ретінде өзгертілуі мүмкін.

Сақтық көшірмелеу және қалпына келтіру

ESENT дерекқоры құрылған кезде физикалық дискінің сектор өлшемі дерекқормен бірге сақталады. Физикалық сектор өлшемінің сессиялар арасында өзгермейтін болуы күтіледі, әйтпесе қате туралы хабар беріледі. Физикалық диск клондалғанда немесе диск бейнесінен басқа физикалық сектор өлшемін қолданатын дискке (Advanced Format Drives) қалпына келтірілгенде ESENT қателерді көрсетеді. Бұл мәлім мәселе және Microsoft-тың жылдам түзетулері қолжетімді. Windows Vista немесе Windows Server 2008 үшін KB2470478 нұсқаулығын қараңыз. Windows 7 немесе Windows Server 2008 R2 үшін KB982018 нұсқаулығын қараңыз.

JET Red-пен салыстыру

Олардың ортақ түбірі болғанымен, JET Red пен ESE арасында зор айырмашылықтар бар. JET Red – файлдарды бөлісу технологиясы, ал ESE серверлік қолданбаға енгізілуге арналған және файлдарды бөліспейді. JET Red файлдарды қалпына келтіруге бар күшін салады, ал ESE жазу алдындағы журналдау және кепілді апаттан қалпына келтіру үшін суреттерді оқшаулауды қолданады. JET Red 4.0 нұсқасына дейін тек беттік деңгейде құлыптауды қолдайды, ESE және JET Red 4.0 нұсқасы жазба деңгейінде құлыптауды қолдайды. JET Red ODBC және OLE DB-ні қоса алғанда, сұраныс интерфейстерінің кең спектрін қолдайды. ESE сұраныс механизмімен бірге келмейді, керісінше, қолданбалар өз сұраныстарын C ISAM коды түрінде жазуға сенеді. JET Red дерекқорының максималды файл көлемі 2 GiB, ал ESE дерекқорының максималды файл көлемі 4 KiB беттерімен 8 TiB және 8 KiB беттерімен 16 TiB құрайды.