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.

Author: Will, 2009-06-27

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.

Http://sqlite.org/

 49
Author: Robert Harvey,
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.

 23
Author: A.Rashad,
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

 11
Author: djna,
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

 8
Author: michael aubert,
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).

 7
Author: Juergen,
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:

 7
Author: a_m0d,
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.

 6
Author: nightingale2k1,
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!

 3
Author: ,
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:50:17

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.

 1
Author: sud03r,
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