Uproszczone, koncepcyjne wyjaśnienie niespecyficzne dla bazy danych:
Gdy z góry znana jest maksymalna możliwa długość rekordu, koniec rekordu/początek następnego rekordu można znaleźć w stałym czasie. Dzieje się tak dlatego, że ta lokalizacja jest obliczana za pomocą prostego dodawania, bardzo analogicznie do indeksowania tablicy. Wyobraź sobie, że używam int
s jako wskaźniki do rekordów, a rozmiar rekordu jest określoną gdzieś stałą liczbą całkowitą. Następnie, aby przejść z bieżącej lokalizacji rekordu do następnego:
int current_record = /* whatever */;
int next_record = current_record + FIXED_RECORD_SIZE;
To wszystko!
Alternatywnie, używając rekordów i pól zakończonych łańcuchem (lub w inny sposób rozdzielonych), można sobie wyobrazić, że następne pole/rekord jest znajdowane przez skanowanie w czasie liniowym, które musi sprawdzać każdy znak, dopóki nie zostanie znaleziony ogranicznik. Jak poprzednio,
char DELIMITER = ','; // or whatever
int current_record = /* whatever */;
int next_record = current_record;
while(character_at_location(next_record) != DELIMITER) {
next_record++;
}
Może to być uproszczona lub naiwna wersja implementacji w świecie rzeczywistym, ale ogólna idea nadal jest aktualna:nie można łatwo wykonać tej samej operacji w stałym czasie, a nawet gdyby był to stały czas, prawdopodobnie nie będzie tak szybka jak wykonanie pojedynczej operacji dodawania.