Jak napisać prosty silnik bazy danych [zamknięty]
Jestem zainteresowany poznaniem, jak działa silnik bazy danych (tj. jego wnętrze). Znam większość podstawowych struktur danych nauczanych w CS (drzewa, tabele hashowe, listy itp.) oraz całkiem dobre zrozumienie teorii kompilatora (i zaimplementowałem bardzo prosty interpreter), ale nie rozumiem jak się zabrać za pisanie silnika bazy danych. Szukałem tutoriali na ten temat i nie mogłem znaleźć żadnego, więc mam nadzieję, że ktoś inny wskaże mi właściwy kierunek. Zasadniczo chciałbym uzyskać informacje na temat:
- jak dane są przechowywane wewnętrznie (np. jak są reprezentowane tabele, itd.)
- jak silnik znajduje potrzebne dane (np. Uruchom zapytanie SELECT)
- jak dane są wstawiane w sposób szybki i wydajny
I wszelkie inne tematy, które mogą być z tym związane. Nie musi to być baza danych na dysku - nawet baza danych w pamięci jest w porządku (jeśli jest łatwiejsza), ponieważ chcę tylko nauczyć się zasad za nim.
Wielkie dzięki za pomoc.
9 answers
Jeśli jesteś dobry w czytaniu kodu, studiowanie SQLite nauczy Cię całego boatload o projektowaniu baz danych. Jest mały, więc łatwiej jest zawinąć głowę. Ale jest też profesjonalnie napisana.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-27 05:56:25
Odpowiedź na to pytanie jest ogromna. spodziewaj się, że praca doktorska będzie miała odpowiedź 100% ;) ale możemy myśleć o problemach jeden po drugim:
Jak przechowywać dane wewnętrznie: powinieneś mieć plik danych zawierający obiekty bazy danych i mechanizm buforowania, aby załadować dane w centrum uwagi i niektóre dane wokół niego do pamięci RAM Załóżmy, że masz tabelę z niektórymi danymi, utworzymy format danych do konwersji tej tabeli do pliku binarnego, zgadzając się na definicję kolumny ogranicznik i ogranicznik wiersza i upewnij się, że taki wzór ogranicznika nigdy nie jest używany w samych danych. tzn. jeśli wybrałeś na przykład, aby oddzielać kolumny, powinieneś zweryfikować dane, które umieszczasz w tej tabeli, aby nie zawierały tego wzorca. możesz również użyć nagłówka wiersza i nagłówka kolumny, określając rozmiar wiersza i wewnętrzny numer indeksujący, aby przyspieszyć wyszukiwanie, a na początku każdej kolumny, aby mieć długość tej kolumny / Adam (Film) / / 1 / / 1 POBox 456" możesz mieć to jak Adam1111123 ABC Street POBox 456
-
Jak szybko znaleźć przedmioty spróbuj użyć hashowania i indeksowania, aby wskazać dane przechowywane i buforowane na podstawie różnych kryteriów w tym samym przykładzie można posortować wartość pierwszej kolumny i zapisać ją w osobnym obiekcie wskazującym na id wiersza elementów posortowanych Alfabetycznie, i tak dalej
-
Jak przyspieszyć Wstaw dane Wiem z Oracle jest to, że wstawiają dane w tymczasowe miejsce zarówno w pamięci RAM, jak i na dysku i robią sprzątanie okresowo, silnik bazy danych jest zajęty cały czas optymalizując swoją strukturę, ale jednocześnie nie chcemy tracić danych w przypadku awarii zasilania czegoś takiego. więc staraj się przechowywać dane w tym tymczasowym miejscu bez sortowania, Dołącz oryginalną pamięć, a później, gdy system jest wolny, wykorzystaj indeksy i wyczyść obszar tymczasowy, gdy done
Powodzenia, świetny projekt.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-27 06:09:36
Są książki na ten temat dobrym miejscem na początek byłyby systemy bazodanowe: Pełna książka autorstwa Garcia-Molina, Ullman i Widom
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-02 15:45:51
Proponuję skupić się na www.sqlite.org
Jest nowy, mały (kod źródłowy 1MB), open source (więc możesz sam to rozgryźć)...
Książki zostały napisane o tym, jak to jest realizowane:
Http://www.sqlite.org/books.html
Działa na różnych systemach operacyjnych zarówno dla komputerów stacjonarnych, jak i telefonów komórkowych, więc eksperymentowanie jest łatwe, a nauka o nim będzie przydatna teraz i w przyszłości.
Ma nawet przyzwoity społeczność tutaj: https://stackoverflow.com/questions/tagged/sqlite
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:29
SQLite był już wspominany, ale chcę coś dodać.
Osobiście wiele się nauczyłem studiując SQlite. Ciekawostką jest to ,że nie przechodziłem do kodu źródłowego (choć krótko zajrzałem). Wiele się nauczyłem czytając materiały techniczne i szczególnie patrząc na wewnętrzne polecenia, które generuje. Posiada własny interpreter oparty na stosie i możesz odczytać wygenerowany przez niego Kod p poprzez użycie explain. W ten sposób można zobaczyć, jak różne konstrukcje są przetłumaczone na silnik niskopoziomowy (to zaskakująco proste-ale to także tajemnica jego stabilności i wydajności).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-27 09:02:06
Ok, znalazłem stronę, która ma pewne informacje na temat SQL i implementacji - trochę trudno jest link do strony, która zawiera wszystkie tutoriale, więc linkuję je jeden przez jeden:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-30 07:13:34
Być może nauczysz się z HSQLDB . Myślę, że oferują małą i prostą bazę danych do nauki. możesz spojrzeć na kody, ponieważ jest to open source.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-27 06:02:58
Jeśli interesuje Cię MySQL, proponuję również stronę wiki , na której znajdują się informacje o tym, jak działa MySQL. Możesz też rzucić okiem na zrozumienie wewnętrznych elementów MySQL.
Możesz również rozważyć użycie interfejsu innego niż SQL dla Twojego silnika bazy danych. Proszę spojrzeć na Apache CouchDB . To, co można nazwać, system bazodanowy zorientowany na dokumenty.
Powodzenia!
Nie jestem pewien, czy pasowałby do Twoich wymagań, ale zaimplementowałem prostą bazę danych zorientowaną na pliki z obsługą simple (SELECT, INSERT , UPDATE
) używając Perla.
To, co zrobiłem, to zapisałem każdą tabelę jako plik na dysku i wpisy z dobrze zdefiniowanym wzorem i manipulowałem danymi za pomocą wbudowanych narzędzi linuksowych, takich jak awk i sed. aby zwiększyć wydajność, często dostępne dane były buforowane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-27 07:27:49