== Вовед === Општа Цел Оваа фаза има цел да имплементира партиционирање на клучни табели во AirportDB базата на податоци за да се подобрат перформансите на системот, олесни одржувањето на податоците и овозможи поефикасно процесирање на големи волумени на податоци кои се типични за авиоиндустрија. === Зошто Партиционирање? '''Специфични предизвици на AirportDB:''' * Континуиран раст на податоци за летови (секојдневно се додаваат нови летови) * Историски податоци што се акумулираат со години (weatherdata) * Честа потреба за пристап до актуелни податоци, додека стари податоци се ретко користат * Сезонски query-ја (пребарување на летови по датум, сезона, временски услови) '''Очекувани придобивки:''' * Подобрени Перформанси * Полесно Одржување * Скалабилност == Анализа на AirpotdDB табели '''Анализа:''' * Табелата '''airline''' не треба да биде партиционирана затоа што содржи мал број податоци и нема потреба од подобрување на перформанси преку партиционирање. * Табелата '''airplane_type''' не треба да се партиционира затоа што содржи мал број статични записи и нема практична добивка од партиционирање. * Табелата '''airplane''' не треба да биде партиционирана затоа што содржи ограничен број редови, нема колона погодна за партиционирање и не би се добила никаква подобрување во перформансите. * Табелата '''airport_geo''' е lookup табела и треба да остане непартиционирана. * Табелата '''airport_reachable''' има специфична, ограничена намена и мала големина. Партиционирањето би додало административен товар без вистинска корист за перформансите. * Табелата '''airport''' не треба да биде партиционирана затоа што содржи ограничен број статични записи и нема колона погодна за поделба на податоците по партиции. * Табелата '''booking''' е добар кандидат за партиционирање бидејќи може да содржи огромен број на редови со тек на време. Партиционирањето би помогнало за подобри перформанси и полесно управување со историски податоци — особено ако се воведе колона со датум за да се партиционира по време. Но не може да биде партиционирана во MySQL затоа што содржи foreign keys(flight_id, passenger_id). Иако има голем обем на податоци и би имало смисла логички, ограничувањата на MySQL не дозволуваат партиционирање на такви табели. * Табелата '''employee''' не треба да биде партиционирана затоа што содржи релативно мал број записи, нема природен критериум за поделба на партиции и партиционирањето не би донело никакво подобрување на перформансите. * Табелата '''flight_log''' има голем обем на податоци и би била идеална за партиционирање по log_date. Меѓутоа, бидејќи содржи foreign key (flight_id), MySQL не дозволува партиционирање, така што во пракса оваа табела не може да се партиционира додека постои foreign кey. * Табелата '''flight''' не треба да се партиционира бидејќи има foreign keys кон airline или airplane, бидејќи MySQL не дозволува партиционирање со foreign keys. Ако ги нема или се отстранат, партиционирањето по departure би имало смисла за големи обеми на летови. * Табелата '''flightschedule''' не треба да се партиционира бидејќи има мал обем на податоци, нема соодветна временска колона за логично партиционирање, и партиционирањето не би донело значителна предност при перформансите. * PASSANGER * Табелата '''passengerdetails''' не треба да се партиционира бидејќи бројот на редови е мал, нема соодветна колона за ефективно партиционирање и партиционирањето би ја зголемило сложеноста без реална корист. * Табелата '''weatherdata''' е совршен кандидат за партиционирање - има голем раст, временска природа, чести временски пребарувања и нема foreign key ограничувања. '''Визуелен приказ:''' * Со [[span(style=color: #FF0000, '''црвена боја''')]] се означени табелите каде што нема потреба од партиција. * Со [[span(style=color: #FFFF00, '''жолта боја''')]] се означени табелите каде што треба да има партиција но поради рестрикции од MYSQL неможе да се оствари. * Со [[span(style=color: #00FF00, '''зелена боја''')]] се означени табелите каде што треба да има партиција. * Со [[span(style=color: #0000FF, '''плава боја''')]] се означени табелите каде што треба да има партиција доколку бројот на записи надмине >1 милион. [[Image(Partitioning Tables (1).png)]] == Имплементација == Тестирање и Перформанси == Предности и Недостатоци == Заклучок и Препораки