Nie powinno ci to zająć dużo czasu, jeśli faktycznie napiszesz to w seplenie. Napisałem prosty mechanizm bazy danych w Lisp około popołudnia. Oto przykład jak to wygląda:
(select movies (<= 1990 year 2000) (member director '(terry-gilliam tim-burton)))
tutaj „wybierz” jest makro. Skanuje predykaty, które za nim podążają, dla symboli, które są nazwami pól i łączy je z polami w bazie danych. Następnie zapisuje funkcję, która wiąże te pola z wartościami rekordu przekazanego do funkcji i filtruje tabelę za pomocą tej funkcji. Makro rozwija się do czegoś takiego:
(flet ((filter (item)
(let ((year (movie-year item))
(director (movie-director item)))
(and (<= 1990 year 2000)
(member director '(terry-gilliam tim-burton))))))
(loop for item in movies
if (filter item) collect item))
Fajną rzeczą robią to w ten sposób (w rzeczywistości w Lisp, a nie tylko przy użyciu składni Lisp-podobnego) jest to, że można dostać kompilację za darmo.W moim systemie powyższy kod nie jest interpretowany przez silnik bazy danych, w rzeczywistości jest to skompilowana część programu (nie można tego zrobić w C, teraz możesz?). W rezultacie jest szybki, mimo że sam kod bazy danych (kod dla "wybierz" i definicje tabel) ma tylko kilka wierszy. Baza danych jest całkowicie rezydentna, ale nie ma znaczenia ... można po prostu zmienić makro, aby pomieścić zewnętrzne bazy danych, a nawet napisać, że używają indeksów. To było wystarczająco dobre dla projektu, nad którym pracowałem, więc nie dodałem indeksów ani niczego nadzwyczajnego.
Moją ulubioną częścią jest to, że choć zachowuje całą zwięzłość SQL, kod nie różni się od kodu wokół niego, ponieważ to wszystko jest Lisp. Możesz wprowadzić zmienne do wyszukiwanego hasła bez obawy o ich cytowanie.
Ekosystem systemu MySQL i Storage Engine jest następujący: Storage Engine to warstwa, która znajduje się bezpośrednio nad macierzystym systemem plików. Wyższe warstwy składają się z parsera zapytań SQL, optymalizatora, pamięci podręcznej zapytań itd. Wbudowana architektura silnika pamięci masowej MySQL została zaprojektowana w taki sposób, że mechanizm przechowywania danych jest warstwą separującą między rodzimym urządzeniem (-ami) pamięciowym a twoim wyższe warstwy, takie jak klient MySQL. –