Spiegazione semplificata, concettuale, non specifica del database:
Quando si conosce in anticipo la lunghezza massima possibile del record, è possibile trovare la fine del record/l'inizio del record successivo a tempo costante. Questo perché quella posizione è calcolabile usando una semplice addizione, molto simile all'indicizzazione di array. Immagina che io stia usando int
s come puntatori a record e che la dimensione del record è una costante intera definita da qualche parte. Quindi, per passare dalla posizione del record corrente a quella successiva:
int current_record = /* whatever */;
int next_record = current_record + FIXED_RECORD_SIZE;
Ecco fatto!
In alternativa, quando si utilizzano record e campi con terminazione di stringhe (o delimitati in altro modo), è possibile immaginare che il campo/record successivo venga trovato da una scansione a tempo lineare, che deve esaminare ogni carattere fino a trovare il delimitatore. Come prima,
char DELIMITER = ','; // or whatever
int current_record = /* whatever */;
int next_record = current_record;
while(character_at_location(next_record) != DELIMITER) {
next_record++;
}
Questa potrebbe essere una versione semplificata o ingenua dell'implementazione nel mondo reale, ma l'idea generale è ancora valida:non puoi eseguire facilmente la stessa operazione a tempo costante e, anche se fosse a tempo costante, è improbabile che sia veloce come eseguire una singola operazione di aggiunta.