MyISAM

Vikipēdijas lapa
Pārlēkt uz: navigācija, meklēt

MyISAM ir viens no galvenajiem (kopā ar InnoDB) MySQL DBVS glabāšanas veidiem. Tas ir balstīts uz ISAM kodu, un salīdzinājumā ar to tajā ir dažādi noderīgi papildinājumi un uzlabojumi.

MyISAM tabulas ir ideāli piemērotas izmantošanai WWW un citās vidēs, kurās dominē lasīšanas pieprasījumi. MyISAM tabulas uzrāda ļoti labus rezultātus SELECT komandām. Tas galvenokārt ir saistīts ar to, ka nav atbalsta transakcijām un ārējām atslēgām. Tomēr, pārveidojot un pievienojot ierakstus visa tabula tiek uz laiku bloķēta, un tas var radīt nopietnas aiztures pie lielām slodzēm.

Šāda veida tabulām ir izstrādāti virkne specializētu papildinājumu, kuri ļauj manipulēt ar tabulu failiem. Viena no tādām ir myisamchk programma, kas paredzēta indeksu un tabulu pārbaudei un atjaunošanai (jābūt pilnībā apstādinātiem MySQL procesiem un tāpēc tiek radīta sistēmas darbības dīkstāve; izpilde ietver sevī jauna faila radīšanu no nulles, kurā tiek ierakstīti visi nepieciešamie dati), un myisampack saspiestu tabulu veidošanai.

MyISAM tabulu failus var pārvietot starp datoriem ar dažādu arhitektūru un dažādām operētājsistēmām bez jebkādām izmaiņām. Lai to nodrošinātu, MySQL glabā visus skaitļus ar peldošo komatu IEEE formātā, bet visus veselos skaitļus - formātā ar tiešo baitu secību.

Indeksa failiem ir .MYI (MYIndex) faila nosaukuma paplašinājums. Faili ar .MYD (MYData) paplašinājumu satur datus, bet ar .frm paplašinājumu - tabulu shēmas. Ja indeksa fails kāda iemesla dēļ tiek zaudēts, programma atjauno indeksus izmantojot informāciju no .frm faila.

Pēc noklusējuma katra tabula var saturēt ne vairāk kā 32 indeksus, bet šo vērtību var palielināt līdz 64 indeksiem. Indeksi tiek veidoti kā bināri koki. Programma indeksē BLOB un TEXT tipa kolonnas, kā arī kolonnas, kuras pieļauj NULL vērtību.

MyISAM tabulās var būt fiksēti, dinamiski vai saspiesti ieraksti. Lai izveidotu saspiesta tipa tabulu ir nepieciešama myisampack programma.

Trūkumi[labot šo sadaļu | labot pirmkodu]

  • Atjaunošanas, izmantojot žurnālu neesamība (šāda funkcija eksistē visās attīstītajās DBVS).
  • Nav pieejama reģionu, kas ir mazāki par visu tabulu, bloķēšana. Noved pie mērogojamības trūkuma, kas noved pie spēcīgas veiktspējas degradācijas pie lielām slodzēm.
  • Trūkst rezerves kopiju veidošanas iespējas. mysqldump izmantošana rezerves kopiju veidošanai, patiesībā nav rezerves kopiju veidošanas programma, bet programma teksta eksportēšanai. Lai veiktu uzdevumu, vienlaikus saglabājot datu integritāti, mysqldump veic datu bāzes bloķēšanu, kā rezultātā pilnībā tiek apturēta sistēmas darbība uz visu procedūras izpildes laiku. MySQL procesa apstādināšana un kopijas veidošana ar rīku, kas paredzēts failu kopēšanai no UNIX nodrošina mazāku sistēmas dīkstāves laiku. Īpaši izdevīgi šim mērķim izmantot gzip minimālas kompresijas režīmā, kas ar mazu CPU noslodzi priekš modernām iekārtām, samazina datu apjomu un ar to paātrina darbību.
  • Vāja atlasīšanas darbība. MyISAM atlasa nepieciešamos datus izmantojot sapludināšanu ar qsort, sākotnējo nelielo reģionu sapludināšanai. Tas prasa ne tikai ļoti neoptimālas diska ievades-izveides faila izveidošanu (katrai kārtošanas operācijai veidojot divus pagaidu failus, un strādāt ar tiem izmantot neoptimālas operācijas fopen un fwrite), bet arī "sort" bufera izveidi katram MySQL klientam.

Tā kā šādu nepilnību esamība kodā ne vienmēr tiek pārbaudīta, rezultāts var būt sabrukusi MySQL datubāze. Ir vērts atzīmēt, ka adrešu kopuma radītās problēmas nav sastopamas 64 bitu operētājsistēmās, un sākot ar 2009.gadu lielākā daļa ražoto serveru ir aprīkoti ar daudz lielāku atmiņas apjomu par 4 GB, kas sekmē izmantot tieši 64 bitu sistēmas, lai gūtu maksimālu labumu no iekārtas.

Minētie defekti izpaužas pie slodzes ar vismaz 400 klientiem, veicot sarežģītus pieprasījums datu bāzēs ar 2-3 GB lielumu.

Daudz attīstītākās MySQL zema līmeņa implementācijās, piemēram, InnoDB, daudzas no šīm problēmām ir atrisinātas. Šīs problēmas var tikt atrisinātas, ja tās tiek ņemtas vērā, izstrādājot programmu, kas darbojas ar MySQL.