Come aggiungere un blocco di dati a dimensione fissa a un file e assicurarti che questo blocco non venga frammentato su disco?

0

Quindi voglio capire come funziona l'implementazione DBMS

Per fare un esempio:

MySQL implementa ogni tabella con le proprie pagine, che sono 16KB

quindi ogni tabella è un file, ed è un multiplo di 16 KB, considerando quanto è grande e quindi quante pagine ha bisogno

Ora leggo da qualche parte che queste pagine non vengono frammentate, quindi la mia domanda è: COME?

in che modo gli sviluppatori DBMS dicono al sistema operativo che "ho appena aggiunto un dato di 16KB (pagina) a questo file, ma rendi questa pagina non frammentata"

scusa se si tratta di un duplicato, ho cercato e non ho trovato alcuna domanda correlata, inoltre diciamo che O.S è Windows o Linux

il mio punto è che il sistema operativo memorizza i file in base a blocchi 4KB e può frammentare alcuni file quando vengono superati e il DBMS utilizza pagine da 16 KB, la mia domanda è come implementano tale DBMS in modo che le pagine da 16 KB aggiunte i file tabella non vengono frammentati? quando aggiungo un dato da 16 KB a un file, per impostazione predefinita è riservato e non verrà mai frammentato? (in pratica come riservano un disco da 16 KB sul disco e si assicurano che non si frammenti?)

se puoi dare un esempio in qualsiasi lingua su come è fatto questo tipo di accodamento, io sono Ok, non sto cercando una lingua specifica, voglio solo sapere come è fatta

Inoltre, non sto chiedendo alcun database specifico, tutti i database relazionali usano queste pagine.

ANCHE Sto prendendo in considerazione la frammentazione all'interno di un'immagine del disco o dell'immagine di memoria , non sono sicuro che queste immagini siano logiche o cosa, così quando prendo l'immagine di quella cartella del database, o il suo processo in memoria, queste pagine non sono frammentate, come?

    
posta OneAndOnly 20.12.2018 - 15:00
fonte

2 risposte

1

Non lo fai. Almeno nel senso di accesso al disco fisico.

Potrebbe esserci un modo per piattaforme particolari per allocare più blocchi contigui (ad esempio chiederli tutti in una volta sola), ma non importa se sono o non sono fisicamente adiacenti. L'OS presenta tutti i file come logicamente sequenze di byte contigue.

    
risposta data 20.12.2018 - 15:45
fonte
0

I dischi rigidi sono piuttosto complessi, specialmente ora sono giorni in cui possono avere diversi livelli di memorizzazione nella cache nella memoria a stato solido. I blocchi particolarmente attivi in un file potrebbero non essere mai scritti sul disco rigido e risiedere permanentemente nella memoria a stato solido.

Se stai ottimizzando l'I / O sequenziale, non preoccuparti. Il sistema operativo e l'hardware sono già molto più avanti di te, qualsiasi azione tu esegua probabilmente rallenterà il processo. L'unica eccezione è la concatenazione di numerosi piccoli file insieme, nel qual caso dovresti considerare questo come più vicino al caso I / O casuale.

Se si sta ottimizzando l'I / O casuale, prestare attenzione alla dimensione del blocco del dispositivo. Come le pagine di memoria, questa è la più piccola unità di lettura / scrittura che il dispositivo eseguirà. Progetta le tue strutture dati per rispettare quel confine e co-localizza quanti più dati rilevanti all'interno di quei blocchi il più possibile, evitando al contempo la frammentazione dei dati attraverso i limiti dei blocchi. In questo caso non usare lo spazio perché è troppo piccolo per memorizzare qualcosa di utile / rilevante non è un peccato, ma una virtù.

    
risposta data 21.12.2018 - 05:35
fonte

Leggi altre domande sui tag