Kezdőoldal » Számítástechnika » Programozás » Az adatbázisoknál a clustered...

Az adatbázisoknál a clustered indexelés esetén az adatok, hogy vannak fizikailag tárolva?

Figyelt kérdés
Tegyük fel, hogy van egy rakat adat és az első elé be akarok szúrni egy új adatot. Akkor arrébb tolja az összes utána levőt? Az eléggé húzós...nem? Ha pedig hagy üres helyeket honnan tudja, hogy mennyit, mert hát elméletileg beszúrhatok végtelen sok adatot.
2015. nov. 11. 20:55
 1/8 Tengor ***** válasza:
Hogy szándékozol az első elé (vagy igazából bárhova) beszúrni adatot?
2015. nov. 11. 20:58
Hasznos számodra ez a válasz?
 2/8 A kérdező kommentje:

Tegyük fel, hogy van egy adatbázisom személyekkel és mindegyik személynek van egy id-ja ami szerint felépítettük az indexeket és eltároltuk az adatokat a háttértárolón. A clustered index biztosítja, hogy az adatok növekvő sorrenben vannak eltárolva fizikailag.

Pl:

id Nev

---------

12 Jancsi

18 Gyuri

19 Peti

32 Mari

45 Juli


Természetesen egy adatbázisban jóval több adat van. Na mostmár ha be akarom szúrni Katit 5-ös id-val akkor elméletileg az kell legyen az első ami maga után vonja, hogy mindegyik eddig bejegyzett személy eltolódik egyel. Ez öt név esetén tényleg nem nagy dolog de millió név esetén eléggé időigényes lehet.

A kérdésem pedig, hogy a létező adatbázis kezelő szoftverek, hogyan oldják meg ezt?

2015. nov. 11. 21:11
 3/8 Tengor ***** válasza:

Szerintem nem érted a clustered index (CI) jelentését. A CI az adat fizikai helyét jeleni és nincs köze az indexhez.

1|1|Aba

2|2|Béla

3|3|Cecil


Itt (CI|ID|Név) még egybe esik a CI és az index, ha töröljük Bélát, akkor mi történik?


1|1|Aba

2| |

3|3|Cecil

Keletkezik egy lyuk. Egyik adatbázi kezelő sem fogja átmozgatni az adatokat, hogy a lyukat betöltse, otthagyja. Jön egy új adat, 4-es ID-vel Dénes.

Ekkor az adatbázis kezelő valamilyen algoritmus (ami lehet egy beállítás is), hogy mit csinál:

A.)

1|1|Aba

2| |

3|3|Cecil

4|4|Dénes

B.)

1|1|Aba

2|4|Dénes

3|3|Cecil


Mindkét megoldásnak vannak előnyei. Az A.) gyorsabb, mert a CI szerinti utolsó helyre kell csak szúrni az adatot, nem kell keresgetni a lyukat, viszont a tábla mérete így 4, holott csak 3 adat tárolódik benne, ami viszont az A hátrányát adja.


A CI-t te nem tudod birizgálni közvetlenül.

2015. nov. 11. 21:19
Hasznos számodra ez a válasz?
 4/8 A kérdező kommentje:
De a te esetedben van üres hely. De mi van akkor ha nincs üres hely? Ahhoz, hogy megtartsa a növekvő sorrendjét csak be kell szúrjon valahova egy adatot fizikailag.
2015. nov. 11. 21:25
 5/8 A kérdező kommentje:

Talán nem itt tévedek?


Az adatok data page-ekre vannak osztva. A növekvő sorrend csak egy adott data page-en belül érvényes? Ezek a data page-ek bárhol lehetnek a háttértárolón...ami azt jelenti, hogy beszúráskor a többi data page után beszúr egy új page-et amibe bemásolja az új adatot.


Pl:

A háttértárolón:

Page1:

1. 12 Mari

2. 15 Gyuri

3 16 Peti


Page2:

1. 18 Kati

2 19 Feri

3 31 Attila


Ha be akarom szúrni mondjuk 13-al Pistát akkor létrehoz egy page3-at és azt a page 2 után helyezi el:


Page1:

1. 12 Mari

2. 15 Gyuri

3 üres


Page2:

1. 18 Kati

2 19 Feri

3 31 Attila


Page3:

1. 13 Pista

2. 16 Peti

3. üres

2015. nov. 11. 21:34
 6/8 anonim ***** válasza:

A clustered indexelés arról szól hogy kiválasztasz oszlopokat ami alapján B keresőfát építesz és fizikailag rendezve tárolod a sorokat. A B fa minden levele egy lap, a lapokon belül pedig a sorok rendezve vannak.


2 fajta töredezettséget különítünk el:

- Ha új lapokat kell beszúrni és fizikailag az új lapok nem férnek be a másik kettő közé akkor azt a legközelebbi üres helyre írja, ami miatt a lapok nem lesznek sorrendben. (külső töredezettség)

- Amikor egy adatot beszúrunk, akkor az új lapok létrehozásakor a lapokban üres hely keletkezhet. (belső töredezettség)


A töredezettség lassítja az olvasást és feleslegesen növelheti az adatbázis méretét. Egyrészről karbantartási napokon az adatbázison le szokás futtatni töredezettség mentesítést, másrészről pedig memóriába vagy SSD-be szokás cache-elni az adatbázist vagy legalább a gyakran használt adatokat, mert ha a cache-ben történik a töredezettség az nem fogja lassítani a olvasást.


Ebből adódik hogy olyan adatbázisoknál szokás használni a clustered indexelést, ahol vagy nem módosítjuk az adatbázist, vagy amikor igen akkor kizárólag az növelve a index-kulcsot.


A tudsz figyelni arra hogy ne töredezedjen nagy méretékben az adatbázis akkor sokkal gyorsabb tud lenni mint a non-clustered indexelés, viszont ha nagyon töredezik akkor lassabb lesz és nem éri meg a használata.

2015. nov. 11. 23:32
Hasznos számodra ez a válasz?
 7/8 anonim ***** válasza:

Ez még érdekes lehet:

[link]

2015. nov. 11. 23:36
Hasznos számodra ez a válasz?
 8/8 A kérdező kommentje:
Köszi...mostmár világos.
2015. nov. 12. 19:17

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!