Efektīvi atrodiet datu bāzēs funkcionālās atkarības

Funkcionālo atkarību atrašana datos tiek izmantota dažādās datu analīzes jomās: datubāzu pārvaldībā, datu attīrīšanā, datubāzu reversajā inženierijā un datu izpētē. Mēs jau esam publicējuši rakstus par pašām atkarībām. raksts Anastasija Birillo un Ņikita Bobrovs. Šoreiz Anastasija, šī gada Datorzinātņu centra absolvente, dalās ar šī pētniecības projekta attīstību, kuru viņa aizstāvēja centrā.

Efektīvi atrodiet datu bāzēs funkcionālās atkarības

Uzdevuma atlase

Studējot CS centrā, es sāku padziļināti pētīt datubāzes, īpaši meklējot funkcionālās un diferenciālās atkarības. Šī tēma bija saistīta ar manu universitātes studiju darbu, tāpēc, strādājot pie tā, sāku lasīt rakstus par dažādām atkarībām datubāzēs. Es uzrakstīju apskatu par šo jomu — vienu no saviem pirmajiem. raksti angļu valodā un iesniedzu to SEIM-2017 konferencei. Es biju sajūsmā, kad tas tika pieņemts, un nolēmu iedziļināties šajā tēmā. Pati koncepcija nav jauna — tā pastāv jau kopš 90. gs. deviņdesmitajiem gadiem —, taču tā joprojām tiek pielietota daudzās jomās arī mūsdienās.

Otrajā semestrī centrā es uzsāku pētniecības projektu, lai uzlabotu algoritmus funkcionālo atkarību atrašanai. Es pie tā strādāju kopā ar Ņikitu Bobrovu, Sanktpēterburgas Valsts universitātes maģistrantu, JetBrains Research.

Funkcionālo atkarību meklēšanas skaitļošanas sarežģītība

Galvenā problēma ir skaitļošanas sarežģītība. Iespējamo minimālo un netriviālo atkarību skaits ir ierobežots no augšas ar Efektīvi atrodiet datu bāzēs funkcionālās atkarībasKur Efektīvi atrodiet datu bāzēs funkcionālās atkarības — tabulas atribūtu skaits. Algoritmu izpildes laiks ir atkarīgs ne tikai no atribūtu skaita, bet arī no rindu skaita. 20. gs. 90. gados algoritmi federālo likumu noteikšanai tipiskā galddatorā varēja apstrādāt datu kopas, kas saturēja līdz 20 atribūtiem un desmitiem tūkstošu rindu, pat vairākas stundas. Mūsdienu algoritmi, kas darbojas uz vairāku kodolu procesoriem, aptuveni vienā laikā nosaka atkarības datu kopām, kas sastāv no simtiem atribūtu (līdz 200) un simtiem tūkstošu rindu. Tomēr ar to nepietiek: šāds laiks nav pieņemams lielākajai daļai reālās pasaules lietojumprogrammu. Tāpēc mēs izstrādājām pieejas esošo algoritmu paātrināšanai.

Kešatmiņas shēmas nodalījumu krustošanai

Raksta pirmajā daļā mēs izstrādājām kešatmiņas shēmas algoritmu klasei, izmantojot nodalījumu krustošanās metodi. Atribūta nodalījums ir sarakstu kopa, kur katrs saraksts satur rindu numurus ar vienādām vērtībām dotajam atribūtam. Katru šādu sarakstu sauc par klasteri. Daudzi mūsdienu algoritmi izmanto nodalījumus, lai noteiktu, vai pastāv atkarība, proti, tie ievēro šādu lemmu: Atkarība Efektīvi atrodiet datu bāzēs funkcionālās atkarības tiek saglabāts, ja Efektīvi atrodiet datu bāzēs funkcionālās atkarības. Šeit Efektīvi atrodiet datu bāzēs funkcionālās atkarības Nodalījumu apzīmē ar , un tiek izmantots nodalījuma lieluma jēdziens — klasteru skaits tajā. Algoritmi, kas izmanto nodalījumus, atkarības kreisajā pusē pievieno papildu atribūtus, ja atkarība tiek pārkāpta, un pēc tam to pārrēķina, veicot nodalījuma krustošanās operāciju. Rakstos šī operācija tiek saukta par specializāciju. Tomēr mēs esam atzīmējuši, ka nodalījumus atkarībām, kas tiks saglabātas tikai pēc vairākām specializācijas kārtām, var aktīvi atkārtoti izmantot, kas var ievērojami samazināt algoritmu darbības laiku, jo krustošanās operācija ir dārga.

Tāpēc mēs piedāvājām heiristiku, kuras pamatā ir Šenona entropija un Džini nenoteiktība, kā arī mūsu pašu metrika, ko saucam par inverso entropiju. Tā ir neliela Šenona entropijas modifikācija un palielinās, palielinoties datu kopas unikalitātei. Piedāvātā heiristiku var raksturot šādi:

Efektīvi atrodiet datu bāzēs funkcionālās atkarības

Šeit Efektīvi atrodiet datu bāzēs funkcionālās atkarības — nesen aprēķinātā sadalījuma unikalitātes pakāpe Efektīvi atrodiet datu bāzēs funkcionālās atkarībasUn Efektīvi atrodiet datu bāzēs funkcionālās atkarības ir atsevišķu atribūtu unikalitātes pakāpju mediāna. Visi trīs iepriekš aprakstītie rādītāji tika pārbaudīti kā unikalitātes rādītāji. Var arī atzīmēt, ka heiristikā ir iekļauti divi modifikatori. Pirmais norāda, cik tuvu pašreizējais nodalījums atrodas primārajai atslēgai, un ļauj labāk kešatmiņā saglabāt nodalījumus, kas atrodas tālāk no kandidāta atslēgas. Otrais modifikators uzrauga kešatmiņas aizņemtību, tādējādi veicinot papildu nodalījumu pievienošanu kešatmiņai, ja ir pieejama vieta. Šīs problēmas veiksmīga risināšana ļāva PYRO algoritmam paātrināties par 10–40 % atkarībā no datu kopas. Ir vērts atzīmēt, ka PYRO algoritms šajā jomā ir visveiksmīgākais.

Zemāk redzamajā attēlā parādīti piedāvātās heiristiskās metodes piemērošanas rezultāti, salīdzinot ar pamata kešatmiņas pieeju, kuras pamatā ir monētu mešana. X ass ir logaritmiska.

Efektīvi atrodiet datu bāzēs funkcionālās atkarības

Alternatīvs veids, kā uzglabāt starpsienas

Pēc tam mēs piedāvājām alternatīvu metodi nodalījumu glabāšanai. Nodalījumi ir klasteru kopums, no kuriem katrs glabā kortežu numurus ar identiskām vērtībām noteiktiem atribūtiem. Šie klasteri var saturēt garas kortežu numuru secības, piemēram, ja tabulas dati ir sakārtoti. Tāpēc mēs piedāvājām saspiešanas shēmu nodalījumu glabāšanai, proti, vērtību intervālu glabāšanu nodalījumu klasteros:

$$display$$pi(X) = {{underbrace{1, 2, 3, 4, 5}_{Pirmais~intervāls}, underbrace{7, 8}_{Otrais~intervāls}, 10}}\ downarrow{Saspiešana}\ pi(X) = {{underbrace{$, 1, 5}_{Pirmais~intervāls}, underbrace{7, 8}_{Otrais~intervāls}, 10}}$$display$$

Šī metode spēja samazināt atmiņas patēriņu TANE algoritma izpildes laikā par 1 līdz 25 %. TANE algoritms ir klasisks algoritms loģisko zonu meklēšanai; tā darbības laikā tas izmanto nodalījumus. Praktiskiem nolūkiem TANE algoritms tika izvēlēts, jo intervālu glabāšanas ieviešana bija ievērojami vienkāršāka nekā, piemēram, PYRO, lai novērtētu piedāvātās pieejas iespējamību. Rezultāti ir parādīti zemāk esošajā attēlā. X ass ir logaritmiska.

Efektīvi atrodiet datu bāzēs funkcionālās atkarības

Konference ADBIS-2019

Pamatojoties uz pētījuma rezultātiem, es publicēju rakstu 2019. gada septembrī. Viedā kešatmiņa efektīvai funkcionālo atkarību noteikšanai 23. Eiropas datubāzu un informācijas sistēmu attīstības konferencē (ADBIS-2019) darbu atzinīgi novērtēja Bernhards Tālheims, ievērojama persona datubāzu jomā. Pētījuma rezultāti veidoja pamatu manai disertācijai maģistra programmā Sanktpēterburgas Valsts universitātes Matemātikas un mehānikas fakultātē, kuras laikā abas piedāvātās pieejas (kešatmiņa un saspiešana) tika ieviestas abos algoritmos: TANE un PYRO. Rezultāti parādīja, ka piedāvātās pieejas ir universālas, jo abi algoritmi demonstrēja ievērojamu atmiņas patēriņa samazinājumu un ievērojamu izpildes laika samazinājumu.

Avots: www.habr.com

Pievieno komentāru