Le sfide della rimozione / modifica delle voci da un database situato nella memoria persistente

-1

Sto implementando il mio semplice database con l'archiviazione su disco e non sono sicuro di come modificare e eliminare le voci.

Il problema è che quando si elimina un record dalla posizione arbitraria all'interno di un file, viene lasciato un "buco". Quando inserisci una nuova voce, puoi o meno essere in grado di collegarlo alla buca. La modifica di una voce sul posto può essere possibile se il nuovo valore è più piccolo, lasciando un altro buco. Oppure il nuovo potrebbe essere più grande, quindi è necessario inserirlo altrove e cancellare quello vecchio. Un altro buco.

Se implementato in questo modo, il file di database inizia a sembrare un formaggio svizzero dopo un po '. La soluzione ovvia è di eseguire l'ottimizzazione di tanto in tanto per compattare il file, ma è un compito noioso e non banale da implementare. Ad esempio, se il file è molto più grande della quantità di RAM, e devi attentamente manipolare i record nel file.

La mia domanda è: ci sono altri approcci alla gestione dei file di archiviazione del database? E in che modo i grandi sistemi di gestione dei database memorizzano i dati sullo storage persistente? Come affrontano questi problemi?

Ho provato su Google ma non ho ricevuto molte informazioni, probabilmente perché non conosco nemmeno le parole chiave giuste.

    
posta Violet Giraffe 20.08.2018 - 22:44
fonte

2 risposte

3

L'approccio che descrivi è lo stesso utilizzato, ad esempio, da SQL Server. Con il tempo, il file di dati cresce e devi eseguire un piano di manutenzione per riduci spostando le pagine dalla fine del file al suo inizio. L'unica differenza è che stai parlando di records , mentre la solita nozione è quella di pages .

Allo stesso modo, molti file system hanno una nozione di frammentazione , che può essere risolta eseguendo una deframmentazione su base regolare.

Nota che:

  • Se stai creando il tuo database personale per scopi di apprendimento e la complessità sembra troppo complicata, allora forse puoi lasciarlo da solo e concentrarti sulle cose che sono divertenti per il tuo progetto di apprendimento. Lascia che il file cresca nel tempo, non è come se ti aspettassi di archiviare terabyte di dati in un sistema di database fatto in casa comunque.

  • Se stai creando il tuo database perché pensi di poter fare un lavoro migliore rispetto a tutti i prodotti software di database esistenti, allora potresti voler riconsiderare la tua scelta. Nota che se i database relazionali non soddisfano le tue esigenze, potresti utilizzare meglio altri tipi di database: quelli che memorizzano i record, quelli gerarchici, gli archivi di valori-chiave, ecc.

risposta data 20.08.2018 - 23:30
fonte
0

are there other approaches to database storage file management?

Non effettivamente cancella i record. Solo contrassegna come eliminati, quindi i tuoi "DBMS" ignorano quelli "contrassegnati". Ovviamente, questo significa che i tuoi tavoli diventano "frammentati", con un sacco di "buchi" che salti costantemente mentre provi a leggere quelli utili. Per contrastare questo, sono necessari processi di manutenzione che riscrivono il file, rimuovendo in realtà tutti i record morti.

Postgres implementa qualcosa di simile a questo nel suo processo VACUUM.

Cercare di lavorare con qualsiasi risorsa condivisa (file) in una modalità multiutente e multi-thread è spaventoso. Ecco un'alternativa possibile, su piccola scala, se ti senti davvero a battere il tuo file system:

Si potrebbe giocare con un'implementazione di "File per Record". Invece di provare a gestire un file condiviso contenente molti record, è possibile inserire ciascun (e ogni) record in un file proprio (una tabella è, quindi, rappresentata da una directory).

Vuoi cancellare un record? Elimina il file corrispondente.

And how do the big database management systems store the data on persistent storage? How do they deal with these problems?

Ogni DBMS memorizza le cose in modo diverso e ognuna ha il suo modo di affrontare questi problemi ... ma i loro proprietari sono non molto probabilmente a darti capitolo e versi su come si comportano.

    
risposta data 21.08.2018 - 13:29
fonte

Leggi altre domande sui tag