Muszę się nauczyć, jak działają bazy danych, aby móc je efektywniej wykorzystywać, a moim sposobem uczenia się jest robienie.
Chcę stworzyć własny system bazy danych. Nie mam na myśli tworzenia pseudo-bazy danych, która użyłaby zapytania do parsowania plików; byłby to po prostu interfejs systemu plików z językiem zapytań. Mówię o rzeczywistej strukturze silnika bazy danych. A ponieważ to, co mam na myśli, nie jest ani oparte na relacjach, ani na dokumentach (jest „zorientowane na węzły”, jeśli to w ogóle istnieje), potrzebowałbym dowolnego zasobu, aby był jak najbardziej abstrakcyjny i na najwyższym poziomie.
Jak więc mógłbym to zrobić? Jakie zasoby / tutoriale / książki mogę przeczytać, aby zrozumieć?
Język nie ma najmniejszego znaczenia. Najlepiej byłoby, gdyby kod był pseudo-kodem ilustrującym pojęcie, niepowiązanym z konkretnym językiem, ale cokolwiek by to zrobiło. Nie byłem w stanie znaleźć niczego w tej sprawie w Google (ponieważ jestem tak niepiśmienny w tym temacie, może po prostu nie wpisuję właściwego wyszukiwania).
Jeśli takie zasoby nie są dostępne, myślę, że coś o tym, jak stworzyć klienta, byłoby przynajmniej krokiem we właściwym kierunku.
źródło
I studied open-source DBs, but their codebase is too huge
: Jeśli coś takiego jak redis lub flockdb jest zbyt duże, aby je czytać, nie rozumiem, jak poradzisz sobie z pisaniem lub własną bazą danych.Odpowiedzi:
Zacznij tutaj. Podczas pracy ze złożoną aplikacją, taką jak baza danych (nawet prosta baza danych jest złożoną aplikacją), powinieneś zapoznać się z historią domeny i właściwą terminologią oraz mieć przynajmniej bardzo wysoki poziom wiedzy o architekturze. Możesz zacząć od artykułu w Wikipedii na temat bazy danych . Spędziłem kilka dni czytając wszystkie artykuły na temat powiązanych pojęć i różnych typów baz danych.
Następnie wybierz Relacyjny lub NoSQl. Jeśli wybierzesz NoSQL, powinieneś wybrać jeden typ NoSQL. To niezwykle ważne, nie znajdziesz żadnych dokumentów architektonicznych omawiających wszystkie różne rodziny baz danych. Tak naprawdę nie ma znaczenia, który wybierzesz, po prostu wybierz jeden i trzymaj się go.
Tak, robi to (niestety), ponieważ po wybraniu rodziny baz danych powinieneś zacząć eksplorować kod z baz danych open source tej rodziny. Istnieje kilka ogólnych wskazówek na temat tego, czego szukać:
Kilka pasujących przykładów:
Zdobądź źródło, skompiluj je i baw się nim. Nie musisz przesyłać poprawek ani czegokolwiek innego, po prostu zapoznaj się z kodem i wprowadzaj niewielkie zmiany tu i tam, aby zobaczyć, co się stanie. Jest to proces przyrostowy, im więcej się nim bawisz, tym łatwiej będzie zrozumieć, co robi kod. Jeśli pierwszy wybrany projekt wydaje się niezwykle trudny do zrozumienia, przejdź do następnego.
Inną świetną opcją byłoby skoncentrowanie się na budowie silnika dla MySQL, jak sugeruje @NB we wcześniejszej odpowiedzi .
Jeśli osiągniesz punkt, w którym możesz zrobić coś pożytecznego z bazą kodu, zaangażuj się w społeczność projektu, to najłatwiejszy sposób na znalezienie bardziej szczegółowych zasobów na temat pojęć.
A potem wreszcie zacznij pracować nad bazą danych. Na początku możesz po prostu napisać bardzo pomniejszonego klona kodu, który eksplorujesz. To nie musi być oryginalne, całkiem sporo świetnych projektów powstało jako klony lub widelce.
Jest całkiem sporo książek:
I kilkaset innych, a także mnóstwo prac naukowych, które można łatwo prześledzić za pośrednictwem Google. Najpierw musisz zdefiniować, co chcesz zrobić, a następnie wyszukać książkę. Zaangażowanie się w społeczność innych autorów baz danych pomoże również zawęzić listę książek i być może uzyskać znacznie lepsze sugestie niż powyższe.
Powodzenia! Po zakończeniu oczekuję komentarza z linkiem do Twojego repozytorium. A jeśli nigdy nie skończyłeś, upewnij się, że zostawiłeś komentarz przypominający mi, że wciąż nie skończyłem kompilatora, który zacząłem pisać w 2001 roku.
źródło
I'm expecting a comment with a link to your repository when you're done
: z całą pewnością! Jeszcze raz dziękuję Tobie i wszystkim innym, to było naprawdę podnoszące na duchu.Powinieneś to po prostu zrobić i przestać myśleć za dużo. Cieszy proces uczenia się i entuzjazm to prezenty.
Pytanie innych, czy to dobry pomysł, z pewnością nie jest dobrą strategią . Gdybym słuchał wszystkich żab, nadal pracowałbym dzisiaj w Ikea, pchając wózek z parkingu do magazynu.
Nie musisz usprawiedliwiać się tak, jak zrobiła to Ayende w tym ciekawym poście . Pytanie brzmiało:
Jeśli czerpiesz przyjemność z tego procesu, nie martw się o cel, który już wygrałeś.
źródło
„(jest„ zorientowany na węzły ”, jeśli to w ogóle istnieje)”. - Może dlatego nie znajdujesz wiele!
Zanurz się w wersji 0.1 i zobacz, gdzie się znajdziesz. Możesz dowiedzieć się więcej, próbując wyprodukować to, czego chcesz, od pytania, co „powinieneś” zrobić. Daj mu kilka dni, a następnie sprawdź, gdzie jesteś.
Około 18 lat temu napisałem podstawowy system baz danych (dla zabawy, idź figura) z indeksami btree i nauczyłem się bardzo dużo.
źródło
MySQL ma wbudowaną strukturę silnika pamięci masowej, może być pomysł, aby sprawdzić, jak silniki są tworzone do pracy dla MySQL.
źródło
Brzmi jak świetny projekt. Najwyraźniej twoim celem nie jest stworzenie oprogramowania produkcyjnego, ale poznanie baz danych i procesu tworzenia systemu baz danych.
Nie sądzę, żebyś musiał przeprowadzić wiele badań. Wydaje się, że celem jest zdobycie doświadczenia w tworzeniu systemu baz danych opartego na węzłach.
Oto jak zacznę:
Po uruchomieniu podstaw uzyskasz lepszy wgląd w to, co trudne lub problematyczne. Następnie możesz przeprowadzić na ten temat badania, znaleźć ulepszenia i zintegrować je.
źródło
Jedynym dobrym powodem jest pisanie własnej bazy danych „aby zrozumieć, jak to wszystko działa” (ponieważ bazy danych są szalone, trudne do poprawienia i trudne do udowodnienia). Jesteś szalony, ale w dobry sposób!
Aby zobaczyć, jak to się robi, proponuję spojrzeć na SQLite. Source SQLite jest tylko około 1.3MB skompresowany, i jest to w pełni zgodne z ACID-baza danych transakcyjnych. Jest to również domena publiczna, a główny autor to miły facet, który z pewnością chętnie odpowie na twoje pytania. (Myślę, że najtrudniejsze są fragmenty, jak naprawdę przekazywać informacje na dysk; przekonanie systemów operacyjnych i sprzętu, aby przestały kłamać i naprawdę napisały transakcję TERAZ, jest zaskakująco trudne i dlatego cieszę się, że nigdy nie muszę pisać DB.)
źródło
Kupić książkę:
http://www.springer.com/computer/database+management+%26+information+retrieval/book/978-1-84628-394-9
Indeksy są obecnie najważniejszym aspektem baz danych. Studiuj alternatywy, które istnieją jak drzewa binarne.
Przeczytaj także o produkcie kartezjańskim, który jest sposobem na obliczenie złożonego łączenia.
źródło
Naucz się algebry relacyjnej.
Znajdź mały silnik DB, poznaj źródło.
Nie. Musisz nauczyć się efektywnie korzystać z bazy danych. Możesz być lepszym kierowcą, jeśli rozumiesz, jak działa Twój samochód, ale będziesz znacznie lepszym kierowcą, jeśli naprawdę skoncentrujesz się na jeździe.
Wybierz tradycyjne trasy: wybierz się na kurs, poczytaj książkę, recenzuj, zadawaj pytania, użyj indeksu luke .
źródło
Learn relational algebra.
Zakładając, że op jest zainteresowany relacyjnymi bazami danych oczywiście ...