Кіріспе

Деректер қорын индекстеу әдісі
Биттік карта индексі – биттік карталарды пайдаланатын деректер қорының ерекше индексі. Биттік карта индекстері дәстүрлі түрде төмен кардиналдылыққа ие бағаналар үшін жақсы жұмыс істейді деп есептеледі, олардың ерекше мәндерінің саны абсолютті түрде немесе деректерді қамтитын жазбалар санына қатысты шамалы болады. Төмен кардиналдылықтың ең шекті жағдайы – бульдік деректер (мысалы, қала тұрғыны интернетке қол жеткізе ала ма?), олардың тек екі мәні бар: Ақиқат және Жалған. Биттік карта индекстері биттік массивтерді (көбінесе биттік карталар деп аталады) пайдаланады және осы биттік карталармен биттік логикалық операцияларды орындау арқылы сұранымдарға жауап береді. Биттік карта индекстері мұндай деректерді сұрау кезінде басқа құрылымдарға қарағанда орын мен өнімділік бойынша маңызды артықшылықтарға ие. Олардың кемшілігі – деректері жиі жаңартылатын бағаналар үшін дәстүрлі B-ағаш индекстеріне қарағанда тиімділігі төмен. Сәйкесінше, олар көбінесе жылдам сұранысқа мамандандырылған, тек оқу режимінде жұмыс істейтін жүйелерде қолданылады, мысалы, деректер қоймалары, және жалпы алғанда онлайн транзакцияларды өңдеуге жарамсыз. Кейбір зерттеушілер биттік карта индекстері орташа немесе тіпті жоғары кардиналдылыққа ие деректер үшін де пайдалы екенін (мысалы, бірегей мәнді деректер) айтады, егер олар тек оқу режимінде қол жетімді болса, және сұранымдар AND, OR немесе XOR операторларын кеңінен пайдалана отырып, бірнеше биттік карта индекстелген бағаналарға қол жеткізеді. Биттік карта индекстері деректерді сақтау саласында үлкен фактілер кестесін жұлдыз тәрізді схемада орналастырылған кішігірім өлшемдер кестелерімен байланыстыру үшін де пайдалы.

Сығу

Тарихи себептерге байланысты биттік картаны сығыстыру және инверттік тізімді сығыстыру зерттеудің жеке бағыттары ретінде дамытылды және кейін ғана бір мәселені шешетіні анықталды. Бағдарламалық құрал биттік индекстегі әр биттік картаны сығымдап, жадты үнемдеуге мүмкіндік береді. Бұл тақырып бойынша көп жұмыс жасалды. Roaring биттік карталары сияқты ерекшеліктер болғанымен, биттік картаны сығыстыру алгоритмдері көбінесе орындалу ұзындығын кодтауды қолданады, мысалы, Byte aligned Bitmap Code, Word Aligned Hybrid code, Partitioned Word Aligned Hybrid (PWAH) сығылымы, Position List Word Aligned Hybrid, Compressed Adaptive Index (COMPAX), Enhanced Word Aligned Hybrid (EWAH) және COmpressed 'N' Composable Integer SEt (CONCISE). PLWAH биттік карталары WAH биттік карталарының 50% жад алады және логикалық операцияларда 20%-ға дейін жылдамдық ұсынады, сондай-ақ Enhanced Word Aligned Hybrid. Кесте неғұрлым үлкен болса, қатарларды сұрыптау соғұрлым маңызды. Индекстеу үшін ағынмен келетін деректерді сұрыптаудың бірдей нәтижелерін алу үшін қайта жинақтау әдістері де ұсынылған. Мысалы, C түрлі мәнді бинарлық кодтаумен log(C) биттік картаны пайдаланып кодтауға болады. Бұл биттік карталардың санын азайтады, жадты үнемдейді, бірақ кез келген сұранысқа жауап беру үшін көптеген биттік карталарға қол жеткізу қажет. Бұл базалық деректердің тік проекциясын қарау сияқты тиімді емес, сонымен қатар материалдық көрініс немесе проекциялық индекс деп те аталады. Сұраныстың (кез келген) өнімділігін, индекс көлемін және индекске күтім жасауды теңестіретін оптималды кодтау әдісін табу әлі де қиындық болып табылады. Сығымдауды ескермей, Чан мен Иоаннидис көп компонентті кодтау әдістерінің класын талдап, екі компонентті кодтау өнімділік пен индекс көлемінің қисығындағы бұрылыста орналасқанын және осылайша индекс көлемі мен сұраныс өнімділігі арасындағы ең жақсы компромисс екенін анықтады. Дегенмен, сегменттелген индекстер базалық деректерді тексермей, кейбір сұраныстарға ғана жауап бере алады. Мысалы, егер сегмент 0.1 мен 0.2 аралығын қамтыса, пайдаланушы 0.15-тен төмен барлық мәндерді сұрағанда, сегментке түскен барлық қатарлар мүмкін нəтижелер болып саналады және олардың шын мәнінде 0.15-тен төмен екенін тексеру үшін тексерілуі керек. Базалық деректерді тексеру процесі кандидатты тексеру деп аталады. Көп жағдайда кандидатты тексеруге кеткен уақыт биттік индекспен жұмыс істеуге кеткен уақыттан әлдеқайда көп. Сондықтан сегменттелген индекстер тұрақсыз өнімділік көрсетеді. Олар кейбір сұраныстар үшін өте жылдам болуы мүмкін, бірақ сұраныс сегментке дәл сәйкес келмесе, әлдеқайда баяу болады.

Тарих

Бит карта индексі туралы ұғымды алғаш рет профессор Израиль Шпиглер және Рафи Маян 1985 жылы жарияланған «Байнары деректер базаларының сақталуы және ізделінуі» атты зерттемелерінде енгізді. Бит карта индексін жүзеге асырған алғашқы коммерциялық деректер базасы – Американың Компьютерлік корпорациясының 204-моделі болды. Патрик О’Нил осы жүзеге асыру туралы 1987 жылы мақала жариялады. Бұл жүзеге асыру негізгі бит карта индексінен (құрамында сығу жоқ) және қатар идентификаторлары тізімінен (RID тізімі) тұратын гибридтік нұсқа болып табылады. Жалпы алғанда, индекс B+ ағашы ретінде ұйымдастырылған. Бағанның кардиналдығы төмен болған жағдайда, B ағашының әрбір жапырақ түйінінде RID-тің ұзын тізімі болады. Мұндай жағдайда, RID тізімдерін бит карталары түрінде көрсету үшін аз орын қажет. Әр бит карта бір ерекше мәнді көрсететіндіктен, бұл негізгі бит карта индексі болып табылады. Бағанның кардиналдығы артқан сайын, әр бит карта сиреп кетеді және бит карталарын сақтау үшін, осы мазмұнды RID тізімдері түрінде сақтағаннан гөрі дискіде көбірек орын қажет болуы мүмкін. Мұндай жағдайда, ол RID тізімдерін пайдалануға көшеді, бұл оны B+ ағаш индексіне айналдырады.