Jak bazy danych działają wewnętrznie? [Zamknięte]

80

Pracuję z bazami danych od kilku lat i chciałbym myśleć, że jestem dość kompetentny w ich używaniu. Jednak ostatnio czytałem o prawie nieszczelnych abstrakcji Joela i zdałem sobie sprawę, że chociaż mogę napisać zapytanie, aby uzyskać z bazy danych prawie wszystko, czego chcę, nie mam pojęcia, jak baza danych faktycznie interpretuje zapytanie. Czy ktoś zna jakieś dobre artykuły lub książki, które wyjaśniają, jak wewnętrznie działają bazy danych?

Niektóre konkretne rzeczy, które mnie interesują, to:

  • Co właściwie robi baza danych, aby dowiedzieć się, co pasuje do instrukcji select?
  • W jaki sposób baza danych interpretuje złączenie inaczej niż zapytanie z kilkoma instrukcjami „gdzie klucz1 = klucz2”?
  • Jak baza danych przechowuje całą swoją pamięć?
  • Jak przechowywane są indeksy?
Bonnici
źródło
Jeśli jest to serwer SQL, gorąco polecam serię Inside Microsoft SQL Server 2005 (prasa firmy Microsoft), w szczególności Storage Engine i Querying… Odpowiada na wszystkie pytania i wiele więcej. Niektóre z tych blogów mogą Cię zainteresować: Craig Freedman Kalen Delaney Warto również zasubskrybować SQLServerCentral ..
Gulzar Nazim
Spróbuj tego pliku db.cs.berkeley.edu/papers/fntdb07-architecture.pdf i WikiPedia. To trochę obszerny temat i modele takie jak RDBMS, FLATFILE itp. Parser jest naprawdę jednym z najważniejszych elementów. Dzięki
Saif Khan
2
Od 2015 roku jest taki artykuł, który wydaje się całkiem niezły.
Piovezan
Wewnętrzna architektura baz danych jest skomplikowana W TYM ARTYKULE wyjaśniono szczegółowo działanie serwera mysql i silników pamięci masowej.
shashwat srivastava

Odpowiedzi:

83

Co właściwie robi baza danych, aby dowiedzieć się, co pasuje do instrukcji select?

Mówiąc szczerze, to kwestia brutalnej siły. Po prostu czyta każdy rekord kandydata w bazie danych i dopasowuje wyrażenie do pól. Tak więc, jeśli masz „select * from table, gdzie name = 'fred'”, dosłownie przechodzi przez każdy rekord, pobiera pole „name” i porównuje je z „fred”.

Teraz, jeśli pole „table.name” jest indeksowane, baza danych (prawdopodobnie, ale niekoniecznie) użyje najpierw indeksu do zlokalizowania rekordów kandydatów, do których ma zastosować właściwy filtr.

Zmniejsza to liczbę rekordów kandydatów, do których ma zostać zastosowane wyrażenie, w przeciwnym razie wykona to, co nazywamy „skanowaniem tabeli”, tj. Przeczyta każdy wiersz.

Zasadniczo jednak lokalizowanie rekordów kandydatów jest niezależne od tego, w jaki sposób stosuje rzeczywiste wyrażenie filtru i, oczywiście, można wykonać kilka sprytnych optymalizacji.

W jaki sposób baza danych interpretuje złączenie inaczej niż zapytanie z kilkoma instrukcjami „gdzie klucz1 = klucz2”?

Cóż, złączenie służy do utworzenia nowej „pseudo tablicy”, do której stosowany jest filtr. Masz więc kryteria filtru i kryteria łączenia. Kryteria łączenia są używane do budowania tej „pseudo tabeli”, a następnie filtr jest stosowany względem niej. Teraz, gdy interpretujemy sprzężenie, znowu jest to ten sam problem, co w przypadku filtra - brutalne porównania siły i odczyty indeksów w celu zbudowania podzbioru dla „pseudo tabeli”.

Jak baza danych przechowuje całą swoją pamięć?

Jednym z kluczy do dobrej bazy danych jest sposób, w jaki zarządza ona swoimi buforami we / wy. Ale w zasadzie dopasowuje bloki RAM do bloków dysku. Dzięki nowoczesnym menedżerom pamięci wirtualnej prostsza baza danych może prawie polegać na maszynie wirtualnej jako na menedżerze bufora pamięci. Wysokiej klasy DB robią to wszystko samodzielnie.

Jak przechowywane są indeksy?

B + Drzewa zazwyczaj powinieneś to sprawdzić. To prosta technika, która istnieje od lat. Jego korzyść jest wspólna z większością każdego zrównoważonego drzewa: spójny dostęp do węzłów oraz wszystkie węzły liści są połączone, dzięki czemu można łatwo przechodzić od węzła do węzła w kolejności kluczy. Dzięki indeksowi wiersze można traktować jako „posortowane” pod kątem określonych pól w bazie danych, a baza danych może wykorzystać te informacje do optymalizacji. Różni się to od, powiedzmy, używania tablicy skrótów dla indeksu, która pozwala tylko szybko dostać się do określonego rekordu. W B-Tree można szybko dotrzeć nie tylko do konkretnego rekordu, ale także do punktu na posortowanej liście.

Rzeczywista mechanika przechowywania i indeksowania wierszy w bazie danych jest bardzo prosta i dobrze zrozumiana. Gra zarządza buforami i konwertuje SQL na wydajne ścieżki zapytań, aby wykorzystać te podstawowe idiomy przechowywania.

Następnie istnieje cała złożoność wielu użytkowników, blokowanie, rejestrowanie i złożoność transakcji na szczycie idiomu przechowywania.

Will Hartung
źródło
8
Chciałem tylko powiedzieć, że to naprawdę interesująca i pomocna odpowiedź. Czy gdzieś pisałeś obszerniej na ten temat?
Nathan Long
to pomoże mi dowiedzieć się, jak właściwie działa baza danych
Adzimzf
„wtedy baza danych (prawdopodobnie, ale niekoniecznie) użyje najpierw indeksu do zlokalizowania rekordów kandydatów, aby zastosować właściwy filtr” w jakich przypadkach indeks nie jest używany, jeśli jest dostępny i dlaczego?
Satyendra Kumar
1
@SatyendraKumar to zależy od różnych rzeczy, ale w końcu jeśli optymalizator (na podstawie statystyk itp.) Zdecyduje, że wynikiem zapytania z indeksu będzie duża część wierszy tabeli, taniej jest zignorować zamiast tego indeks i skanowanie tabeli. Indeks obejmuje wiele losowych operacji we / wy, a to ma swój koszt. Ostatecznie ten koszt jest wyższy niż zwykłe skanowanie tabeli. Zarządzanie takimi rzeczami to tylko jeden aspekt procesu strojenia bazy danych i optymalizacji zapytań.
Will Hartung
4
  • Co właściwie robi baza danych, aby dowiedzieć się, co pasuje do instrukcji select?

    Bazy danych używają indeksów (patrz poniżej)

  • W jaki sposób baza danych interpretuje złączenie inaczej niż zapytanie z kilkoma instrukcjami „gdzie klucz1 = klucz2”? Operacje łączenia można przetłumaczyć na operacje drzewa binarnego poprzez scalenie drzew.

  • Jak baza danych przechowuje całą swoją pamięć?

    pliki mapowane w pamięci, aby uzyskać szybszy dostęp do ich danych

  • Jak przechowywane są indeksy?

    Wewnętrzne bazy danych współpracują z B-drzewami do indeksowania.

Należy to wyjaśnić bardziej szczegółowo na Wikipedii.

http://en.wikipedia.org/wiki/B-tree

http://en.wikipedia.org/wiki/Database

Peter Parker
źródło
1

Oprócz czytania pouczające może być użycie narzędzi bazy danych do zbadania planu wykonania używanego przez bazę danych w zapytaniach. Oprócz uzyskania wglądu w to, jak to działa, możesz eksperymentować z technikami optymalizacji zapytań z lepszą pętlą sprzężenia zwrotnego.

Dozorca więzienny
źródło
0

Saif, doskonały link. Omówienie z lotu ptaka, które obejmuje większość tematów i zawiera szczegółowe informacje na temat wdrożeń określonych dostawców.

Podjąłem trzy próby napisania wyjaśnienia, ale to naprawdę zbyt duży temat. Przeczytaj artykuł o Hellersteinie (ten na serwerze berkeley, z którym łączył się Saif), a następnie zapytaj o szczegóły.

Warto zauważyć, że tylko podzbiór „znanych dobrych pomysłów” jest zaimplementowany w danym DBMS. Na przykład SQLite nie wykonuje nawet połączeń mieszających, wykonuje tylko zagnieżdżone pętle (potwierdzenie !!). Ale z drugiej strony jest to łatwo osadzalny dbms, który działa bardzo dobrze, więc jest coś do powiedzenia o braku złożoności.

Nauczenie się, w jaki sposób DBMS gromadzi statystyki i jak używa ich do konstruowania planów zapytań, a także nauczenie się, jak czytać plany zapytań w pierwszej kolejności, jest nieocenioną umiejętnością - jeśli musisz wybrać jeden temat „wewnętrzne bazy danych” do uczyć się, uczyć się tego. To zrobi wielką różnicę (i już nigdy nie napiszesz przypadkowo produktu kartezjańskiego ... ;-)).

SquareCog
źródło
0

Jeśli chcesz dowiedzieć się więcej szczegółów, polecam pobranie źródeł sqlite i przyjrzenie się, jak to robi. Jest kompletny, choć nie w skali większych baz danych open source i komercyjnych. Jeśli chcesz dowiedzieć się więcej szczegółów, polecam The Definitive Guide to SQLite, który jest nie tylko świetnym wyjaśnieniem sqlite, ale także jedną z najbardziej czytelnych książek technicznych, jakie znam. Jeśli chodzi o MySQL, możesz się dowiedzieć z MySQL Performance Blog, a także z książki O'Reilly High Performance MySQL (V2), której blog jest jednym z autorów.

dajobe
źródło