Кіріспе
Btrieve – Pervasive Software компаниясы әзірлеген деректер қоры. Btrieve архитектурасы жазбаларды басқаруды ескере отырып жасалған. Бұл Btrieve тек негізгі жазбаларды құру, деректерді алу, жазбаларды жаңарту және деректерді жою амалдарымен ғана айналысады дегенді білдіреді. MicroKernel деректер қоры қозғалтқышымен бірге ол ISAM, индекстелген реттік қол жеткізу әдісін, негізгі сақтау механизмі ретінде пайдаланады. Btrieve – деректерді ұйымдастыру үшін кілттер мен индекстерді қолданатын деректер қоры. Дегенмен, файл құрылымының өзі негізінен Btrieve-де «беттер» деп аталатын кішігірім дерек бірліктері бойынша құрылған. Btrieve-дің әртүрлі нұсқаларында құрылым өзгергенімен, файл құрылымы әлі де деректер құрайтын Btrieve файлындағы және беттердің конфигурациясын анықтайтын Файлдарды басқару жазбасы (FCR) айналасында жүреді. Тарихи тұрғыдан алғанда, Btrieve файлдағы тұрақты орындарында орналасқан «физикалық беттерді» қолданды. 6.0 нұсқасынан бастап «логикалық беттер» қолданыла бастады, олар беттерді бөлу кестелеріне (PAT) сәйкестендірілді. Бұл Btrieve-ге өздерінің жазбаларын жаңарту әдісін кейін «pre image paging» деп аталатын «shadow paging» әдісіне ауыстыруға мүмкіндік берді. Btrieve артқа қарай үйлесімділікке бағынады, өйткені Btrieve нұсқалары 6.15-ке дейін стандартты файл форматын қолданады және Btrieve 6.0 шығарылғанға дейін толық артқа қарай үйлесімді болды. Btrieve 6.0 жаңа мүмкіндіктер енгізді және озық мүмкіндіктерді енгізу үшін бағдарламалық жасақтаманың ескі нұсқаларымен үйлесімділікті бұзуға тура келді. API де кері үйлесімділік сақталды, тек бір ғана мүмкіндік (файлдарды бөлек медиаға бөлу) жойылды. Бір кезде Btrieve-дің бұрынғы бас директоры Рон Харрис «1.0 API нұсқасы 6.15 нұсқасында әлі де қолдайтынын және біз оны мәңгілікке сақтаймыз!» деп мәлімдеген.
Деректер қорының терминологиясы
Pervasive бастапқыда Btrieve-ді сипаттау үшін "навигациялық деректер қоры" терминін қолданған, бірақ кейіннен оны "транзакциялық деректер қоры" деп өзгерткен. "Навигациялық деректер қоры" терминінің қолданылуы ерекше болды, себебі навигациялық деректер қоры деректер арасында өту үшін "көрсеткіштерді" және "жолдарды" пайдаланады, ал бұл көрсеткіштер деректің өзінде сақталады. Ал Btrieve-дің негізгі құрылымы болып табылатын ISAM іздеу уақытын азайту үшін осы көрсеткіштерді сақтау үшін қосымша индекс кестесін қолданады. Осылайша, екі деректер қорының түрі әртүрлі, және Pervasive деректер қорын жіктеу үшін басқа терминология қолдануды неге бастағанын түсіндіруі мүмкін немесе түсіндірмеуі мүмкін.
Микрожелілік деректер қоры
6.15 нұсқасынан бастап Pervasive деректер қорының ядросын әзірлеушілер қолданған интерфейстен бөлудің жаңа модульдік тәсілін қолдана бастады. Олар негізгі деректер базасы операцияларын (жаңарту, жазу және жазуды жою сияқты) Btrieve және Scalable SQL модульдерінен бөліп шығарды. Micro Kernel Database Engine (MKDE) басқа функциялардан бөліну арқасында бағдарламашылар деректер қорына бірнеше тәсілмен бір уақытта қол жеткізуге мүмкіндік алды. Мысалы, бір қосымша Btrieve API арқылы құрылып, ал сол деректерге қол жеткізуі қажет басқа қосымша мүлдем басқа тәсілді, мысалы Scalable SQL-ді пайдалана алады. Жазу примитивтері осы тәсілдерден бөлінгендіктен, екі қосымша да MKDE арқылы бір деректер файлына қол жеткізе алады. Micro Kernel Database Engine микроядролық операциялық жүйе ядроларымен ешқандай байланысы жоқ.
Тінтуір
Btrieve файл форматы толығымен парақтардан тұрады, бұл қозғалтқыш I/O операциясын орындағанда жад пен сақтау құрылғысы арасында жылжытылатын деректер. 6.0 нұсқасына дейінгі нұсқалар дерек парақтарын, индекс парақтарын және файлды басқару жазбасын (FCR) ғана пайдаланды. Файлда физикалық парақтарға сілтеме жасайтын іздеу индексі болды. 6.0 нұсқасынан бастап логикалық парақтар қолданыла бастады, олар дискідегі физикалық парақтарға (файлдың белгілі бір орнындағы парақтар) беттерді бөлу кестелерінің (PAT) жиынтығы арқылы шамаланған.
Файлдарды басқару рекорды
Файлдарды басқару жазбасы (FCR) Btrieve деректер базасының файлдары туралы маңызды ақпаратты қамтиды. Ол бет өлшемін, қазіргі уақытта қолданылып жатқан беттердің санын, файлды индекстей алатын кілттердің санын, файлдағы жазбалардың санын және басқа да егжей-тегжейлі мәліметтерді сақтайды. 6.0 нұсқасынан бастап, сенімділік үшін екі FCR қолданылды. Әрбір FCR-дегі 32 биттік пайдалану санағы өрісі, қай FCR-ді қолдануға болады анықтау үшін пайдаланылады. Файлмен әрбір операция жасалған сайын бұл өріс артады. Ең жоғары пайдалану санағына ие FCR жарамды FCR болып табылады. FCR туралы Джим Кайлдың бастапқы үлгілерінде толық сипаттама бар. MKDE 8 нұсқасының енгізілуімен FCR бетінің құрылымы өзгерді. Бет өлшемі енді FCR ішінде орналасқан және бұл енді стандартты 32 биттік өріс емес. 8 нұсқадан бастап бет өлшемін есептеу үшін 0x2A офсетіндегі 32 биттік өрісті алып, 256-ға көбейту қажет.
Сурет алдындағы бетбұрыс пен көлеңкелі бетбұрыс
6.0 нұсқасына дейін жазбаларды жаңарту кезінде алдын ала кескінді беттеу қолданылды. Бұл өзгерістер енгізілгенге дейін жаңа «алдын ала кескін файлы» құруды қамтиды, содан кейін бастапқы деректер файлындағы беттер уақытша түрде осы жаңа алдын ала кескін файлына көшіріледі. Содан кейін жүйе бастапқы файлға өзгерістер енгізеді. Егер жаңарту үзіліп, бетке деректердің жартысы ғана жазылса, қозғалтқыш алдын ала кескін файлынан бастапқы деректер қорының зақымдалған бетіне бетті көшіру арқылы оны қайтаруға болады, содан кейін уақытша алдын ала кескін файлы жойылады. Алдын ала кескін файлдарына PRE кеңейтімі берілді, сондықтан жүйеде осы файлдарды табу әдетте транзакция дұрыс орындалмағанын және қалпына келтіру сәтті болмағанын көрсетеді. 6.0 нұсқасынан бастап, алдын ала кескінді беттеудің орнына көлеңкелі беттеу қолданыла бастады және ол бүгінге дейін қолданылады. Бетті уақытша файлға көшірудің орнына деректер қорының келесі бос физикалық орны табылып, бет осы орнына жазылады. Бұл бет көлеңкелі бет деп аталады, өйткені оның орналасқан жері әлі файлдың PAT-ына жазылмаған. Көлеңкелі бетті жаңарту аяқталғаннан кейін PAT жаңартылады және файлдағы келесі қолжетімді және ағымдағы физикалық беттің PAT-ына жазу тіркеледі. Дегенмен, егер көлеңкелі бетті жаңарту кезінде жүйелік қате пайда болса, PAT жаңартылмайды, сондықтан өзгеріс жойылады, себебі ағымдағы және келесі жазба PAT-та жаңартылмайды. Алдын ала кескінді беттеуден көлеңкелі беттеуге ауысу файл форматында радикалды өзгерістерге әкелді, бұл Btrieve-дің бұрынғы нұсқалары мен өнімнің 6.x нұсқасы арасындағы үйлесімділікті бұзды.
Беттерді біріктіру ретімен ауыстыру
Артқы біріктіру реті (ACS) беттері – жазбаларды әртүрлі тәртіппен сұрыптауға мүмкіндік беретін беттер. Коллация – жазбаша ақпаратты белгілі бір стандартты тәртіпке келтіру. Көбінесе бұл әліпбилік ретке келтіру деп аталады, бірақ коллация әліпби әріптерін ғана реттеумен шектелмейді. Мысалы, ACS сұрыптау ретін әріптердің регистріне сезімтал және сезімтал емес түрде сұрыптауға мүмкіндік беруі мүмкін. 6.0 нұсқасына дейін файлда тек бір ACS сақталуы мүмкін болды, бірақ 6.0 нұсқасы шыққаннан кейін бір файлға бір уақытта бірнеше ACS бетін қосуға болады.
Қосымша беттер
6.0 нұсқасынан бастап файлдарда қолданылғаннан артық физикалық беттер болуы мүмкін. Бұл көлеңкелі беттеу (shadow paging) технологиясының арқасында жүзеге асады, онда жүйедегі кейбір беттер PAT тізімінде тіркелмеген болуы мүмкін. Мұндай беттер "Артық" (Extra) беттер деп белгіленеді және жаңа беттерге орын бөлу алдында пайдаланылады.
Өзгермелі-құйрықты бөлу кестелері
Btrieve жүйесінде әрбір беттің мөлшері белгілі, бірақ жазба бет мөлшерінен үлкен болуы мүмкін. Осының салдарынан жазбалар көбінесе бөлініп, көптеген беттерге таратылуы керек. Өте үлкен жазбалар үшін жазбаны сақтау үшін жүздеген беттер қажет болуы мүмкін. Тізімдік байланыс әдісі осы бөлінуге мүмкіндік берер еді, бірақ Btrieve қозғалтқышы тізбекті жазбаларды оқуда қиындыққа тап болар еді. Сондықтан, 6.1 нұсқасынан бастап, файлда деректер жазбасын құрайтын әрбір бетке сілтемелерді сақтайтын кесте пайдаланылады. Бұл кесте өзгермелі ұзындықтағы бөлу кестесі (ОҰБК) деп аталады.
Индекстеу
Btrieve белгілі бір кесте бағандарына жазба индекстерін сақтау үшін b ағашы форматын пайдаланады. Индекс индекстелген бағандардың әрбір мәндерін сол бағандардың мәндеріне ие жолдардың бірегей идентификаторлары жиынтығымен байланыстырады, бұл индекстелген бағанды пайдаланып кестедегі жолдарды жылдам табуға мүмкіндік береді. B ағаштары – ағаш тәрізді дерек құрылымдары және жылдам деректерді алу механизмі ретінде өте тиімді. Btree-дің кемшілігі – деректерді ағашқа енгізген кезде оларды үнемі теңгерімдеу қажеттігі, сондықтан Btrieve жазба индексін тек жазбаларды енгізу және жаңарту үшін жұмсалатын уақытты қысқарту үшін btree түрінде сақтайды. Жүйедегі әрбір индекс үшін жеке b ағашы сақталады, ал түбір түйін туралы ақпарат FCR-де сақталады. Btrieve 6.x нұсқасында жаңа индекс файл құрылғанда жасалуы мүмкін, немесе файл құрылғаннан кейін қосылып не жойылуы мүмкін. Индекс беттері де қажет болған жағдайда ғана құрылады. Btrieve 6.0 нұсқасына дейін қолданыстағы негізгі индекстерді жою мүмкін емес еді, бірақ қосымша индекстер қажет болған жағдайда құрылып, жойылуы мүмкін. Btrieve индекстегі кілт мәндерінің қайталануына рұқсат береді. Btrieve қайталама кілттерді сілтемелі қайталама әдісі немесе қайталанатын қайталама әдісі арқылы өңдейді (бұл терминология 6.0 нұсқасы шыққанда қолданыла бастады). Сілтемелі қайталама әдісі екі бағытталған тізімнің басы мен соңына сілтеме жасайтын индекс бетіндегі жазба сілтемелерінің жұбын пайдаланды. Бұл тізімдегі қайталама кілттердің реті олар енгізілген ретімен сәйкес келеді дегенді білдіреді. Қайталанатын кілт әдісі бағытталған тізімді пайдаланбайды, керісінше барлық кілттерді жаңа индекс кілтін жасап және кілтінің соңына жазба сілтемесінің мекенжайын қосып бірегейлендіреді. Бұл кілт оның орналасу реті арқылы алынады дегенді білдіреді.
Файл ортақтастыру
Btrieve-ге жазбаларға қол жеткізу үшін файлдарды ортақтастыру қажет болғанда, екі түрлі файлдарды ортақтастыру режимін қолдануға болады: Single Engine File Sharing (SEFS) режимі және Multi Engine File Sharing (MEFS) режимі. SEFS тек сол қозғалтқышқа қол жеткізген клиенттерге ғана дерекқорын өзгертуге мүмкіндік берді, басқа қозғалтқышқа қол жеткізген клиенттер дерекқорға қол жеткізе алмады. MEFS әртүрлі қозғалтқыштарда жұмыс істейтін әртүрлі клиенттерге дерекқорға қол жеткізуге рұқсат береді.
Бір мезгілде жұмыс істеу
Btrieve 6.x сериясында бір мезгілдегі транзакцияларды өңдей алды. Btrieve 6.0 нұсқасынан бұрын қозғалтқыш тек файл деңгейінде немесе толықтай құлыптауды қолдана алды; ал 6.0 нұсқасынан бастап жазбаларды жеке-жеке құлыптау мүмкіндігі болды. Жазу (немесе бет) деңгейіндегі құлыптау бір мезгілдегі құлыптау деп аталды. Бұл артықшылықтары айқын болды: бірнеше клиент файлға бір уақытта қол жеткізе алады, егер олар бір жазбаны өңдеуге тырыспаса, бұл өнімділікті арттырады. Сонымен қатар, басқа клиенттер құлыпталған беттерді оқи алады және жазу транзакциясында басқа процесс құлыптаған файлға енгізілген өзгерістерді көрмейді. MEFS режимі бір мезгілдегі құлыптауды толыққанды қолдамады. Егер клиент бір мезгілдегі транзакцияны бастап, содан кейін жазбаға жазу операциясын орындауға тырысса, Btrieve қозғалтқышы файл бір мезгілдегі құлыптау қолданылып жатқан кезде де, файл құлыпталғанын көрсететін 85 кодымен жауап береді.
Жүйелік және пайдаланушы транзакциялары
Btrieve нұсқасы 6.15-тен бастап, пайдаланушы транзакцияларынан бөлек, жүйелік транзакция деп аталатын жаңа деректер базасы транзакциясы енгізілді. Пайдаланушы транзакциялары – эксклюзивті және бір мезгілде орындалатын транзакциялар, ал жүйелік транзакциялар – транзакциялық емес операциялар мен/немесе пайдаланушы транзакцияларының жиынтығы. Жүйелік транзакциялар деректерді қалпына келтіру үшін MKDE-мен ғана пайдаланылды. Егер жүйелік қате деректердің бұзылуына себеп болса, MKDE қайта іске қосылғанда, сәтсіз аяқталған жүйелік транзакцияға ие барлық файлдарды анықтап, оларды қалпына келтіруге тырысады. Дегенмен, соңғы жүйелік транзакция кері қайтарылған кезде пайдаланушы транзакциялары жоғалуы мүмкін болғандықтан, MKDE "Операцияны аяқтау" сұрауын алғанда, пайдаланушы транзакциялары бар жүйелік транзакцияларды күштеп аяқтауға мәжбүрлейтін опцияны қоюға болады.