Prosta, plikowa baza danych

0

Witam,

potrzebuje zaprojektować plikową bazę danych z banalnym SZBD w C.

Baza danych to chyba dużo powiedziane, potrzebuje mieć 3 tabele zapisane do pliku z możliwością dodawania,usuwania,modyfikacji,wyszukiwania danych rekordów z mojego programu.

Moje założenia to:
-stała struktura - na stałe zdefiniowana lista kolumn wraz z ich długościami(stałymi)
-limit rekordów na tabele - powiedzmy 10.000

I teraz tak.
Pierwsza myśl -> zapisywanie jak leci z separatorami końca rekordu i wyszukiwanie po całym pliku.
Jednak to jest za brzydkie, za mało optymalne.

Druga myśl -> zapisywanie jak leci z separatorami + plik indeksowy gdzie będą zapisywane identyfikatory rekordów + offsety w pliku z danymi do nich. Fajne, ale co jeśli będziemy chcieli wyszukiwać nie tylko po ID ale także po którejś kolumnie? Wtedy dla tej kolumny musiałby być kolejny plik indeksowy itd.

Moje pytanie do Was.
Jak wybrać złoty środek między optymalizacją operacji na danych a skomplikowaniem struktury plików?
Projekt do którego to potrzebuje ma za zadanie pokazanie możliwości mechanizmów dostępu do plików systemie LINUX, baza danych jest tylko narzędziem do tego. Nie mniej jednak chciałbym żeby była ona w miarę sprawnie napisana.

0

tak jak opisałeś w 2 pkt zbudowane są np. pliki DBF + indeksy w plikach NTX. Jest to chyba najprostsza z możliwych dróg. Dodatkowo rekordów z pliku się fizycznie nie usuwa tylko oznacza jako usunięte (np. dodatkowe pole w rekordzie)

0

" -stała struktura - na stałe zdefiniowana lista kolumn wraz z ich długościami(stałymi)" - czyli chcesz zastosować rekordy stało pozycyjne? Jeśli nie to proponuję pomyśleć o tym.
Przykład. Kolumna 1 zawiera zawsze 20 znaków, nawet jeśli jest pusta to wstawiasz tam np. spacje. Dzięki temu każdy rekord ma dokładnie taką samą długość. Więc offset, to tak naprawdę dł. rekordu * (pozycja w pliku - 1).

"co jeśli będziemy chcieli wyszukiwać nie tylko po ID ale także po którejś kolumnie? Wtedy dla tej kolumny musiałby być kolejny plik indeksowy " - dokładnie tak. Pamiętaj że modyfikując dane musisz wiedzieć jakie indeksy przebudować. Zależy czy twoje indeksy będą tylko na jednej tabeli, czy mogą być złożone - na kilku tabelach.
Z drugiej strony jeśli masz rekordy stałopozycyjne to łatwo przeszukiwać po dowolnej kolumnie, bo łatwo dotrzeć do jej wartości, która zawsze będzie na początek rekordu + offset kolumny. Więc właściwie przy liczbie rekordów do 10k można przeszukiwać taki plik w locie, bez konieczności budowania dodatkowego pliku indeksującego. Oczywiście przez to zawsze przeszukasz cały plik. Ale to tylko zadanie akademickie i jeśli operacja potrwa krótko, to można nie komplikować sobie życia dodatkowymi plikami indeksów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1