Dlaczego Windows / Linux nie używa relacyjnych baz danych (RDBMS)?

32

Dlaczego Windows / Linux nie używa relacyjnych baz danych ( RDBMS )?

Wiem, że używają systemów plików do przechowywania wszystkich danych, ale czy nie uważasz, że bardziej wydajne jest korzystanie z baz danych, takich jak my w witrynach internetowych / aplikacjach internetowych?

Proszę omówić wykorzystanie systemu plików do przechowywania danych w bazie danych.

Nie jest to duplikat Kiedy należy korzystać z bazy danych zamiast analizować dane z pliku tekstowego? Mówię tylko w kontekście systemów operacyjnych i pytanie to jest uogólnione.

Pratik
źródło
32
System plików to baza danych.
20
Ponieważ systemy plików są niezbędne do wdrożenia baz danych.
Kilian Foth,
16
Windows używa bazy danych, nazywa się to „Rejestr”. Czy masz na myśli „relacyjną bazę danych”? To inne pytanie.
Doc Brown
6
@ gnasher729 System plików jest bardzo szczególnym rodzajem bazy danych i jako taki jest dobry tylko dla określonych rodzajów danych. Inne rodzaje danych są lepiej obsługiwane z różnymi rodzajami baz danych (np. Relacyjnymi).
6
@KilianFoth, niezupełnie. Możesz pisać na surowej partycji dysku (która nie jest porównywalna z plikiem systemu operacyjnego).
Paul Draper,

Odpowiedzi:

60

Obecnie większość systemów zarządzania bazami danych (np. PostGreSQL , MongoDB itp.) Wewnętrznie przechowują swoje dane w plikach systemu operacyjnego (w przeszłości niektóre DBMS korzystały bezpośrednio z surowych partycji dysku).

Na najnowszych komputerach wciąż korzystających z obracających się dysków twardych dysk jest tak wolny - w stosunku do procesora lub pamięci RAM - że dodanie kilku warstw oprogramowania nie ma znaczenia. Technologia SSD może to nieco zmienić, a niektóre systemy plików są zoptymalizowane pod kątem dysków SSD.

Pliki są obecne w większości systemów operacyjnych ogólnie ze względów historycznych i społecznych (w szczególności kompilatory C i większość narzędzi - edytorów, konsolidatorów - chcą plików, więc jest problem z kurczakiem i jajami), a ponieważ istnieje wiele bardzo dobrych plików wdrożenia systemu .

BTW, niektóre niezbędne urządzenia systemowe mogą korzystać z baz danych. Na przykład w systemie Linux PAM można skonfigurować tak, aby korzystał z informacji w bazach danych (ale w praktyce jest to rzadko wykonywane). Ponadto niektóre serwery pocztowe mogą przechowywać niektóre lub większość swoich danych w bazach danych (np. Exim ).

Pliki mają nieco niższe abstrakty niż bazy danych, więc mogą być łatwiejsze do wdrożenia (jako systemy plików i warstwa VFS w jądrze Linuksa) i szybsze w użyciu. W szczególności operacje na plikach są znacznie bardziej ograniczone niż operacje na bazach danych. W rzeczywistości możesz zobaczyć pliki lub systemy plików jako niektóre bardzo ograniczone bazy danych!

Możesz zaprojektować system operacyjny bez żadnych plików , ale z kilkoma innymi ortogonalnymi maszynami do utrzymywania trwałości (np. Jeśli każdy proces będzie trwały, wtedy nie dbasz wyraźnie o pamięć, ponieważ system operacyjny zarządza trwałymi zasobami). Dokonano tego w kilku akademickich systemach operacyjnych (1) (a także w maszynach Smalltalk i Lisp z lat 80., w jakiś sposób w IBM System i , znany również jako AS / 400 , oraz w niektórych projektach zabawek powiązanych z osdevem), ale kiedy projektujesz swój system operacyjny w ten sposób, nie możesz wykorzystać wielu istniejących narzędzi (np. musisz też zrobić kompilator i interfejs użytkownika od zera, a to dużo pracy).

Zauważ, że systemy operacyjne mikrojądra mogą nie potrzebować plików dostarczanych przez warstwy jądra, ponieważ systemy plików to tylko serwery aplikacji (np. Translatory Hurd działające w przestrzeni użytkownika). Spójrz także na unikernelowe podejście w dzisiejszym MirageOS

Linux (i prawdopodobnie Windows, który czerpał większość inspiracji z VMS i Unix ) potrzebuje plików do działania. Przynajmniej program inicjujący (pierwszy program uruchamiany przez jądro) musi być plikiem wykonywalnym przechowywanym w pliku (często /sbin/init, ale może być systemowym w tych dniach), i (prawie) wszystkie inne programy są uruchamiane z execve (2) ) syscall, więc musi być przechowywany w pliku. Jednak FUSE pozwala nadać semantykę podobną do pliku rzeczom nieposiadającym pliku.

Zauważ też, że w Linuksie (a może nawet Windowsie, którego nie znam i nigdy nie użyłem) sqlite to biblioteka zarządzająca bazą danych SQL w plikach i zapewniająca API dla tego. Powszechnie wiadomo, że Android (wariant Linux) używa wielu plików sqlite (ale nadal ma system plików podobny do POSIX).

Przeczytaj także o punktach kontrolnych aplikacji (które w wielu obecnych systemach operacyjnych są zaimplementowane do zapisywania stanu procesu w plikach). Doprowadzone do skrajności, takie podejście nie musi ręcznie zapisywać plików aplikacji (a jedynie utrzymywać cały stan procesu za pomocą maszyny kontrolnej).

Właściwie interesujące pytanie brzmi: dlaczego obecne systemy operacyjne nadal używają plików, a odpowiedź jest starsza, a także z przyczyn ekonomicznych i kulturowych (niestety większość dzisiejszych języków programowania i bibliotek nadal chce plików).


Uwaga 1: trwałe systemy akademickie obejmują Lisaac i Grasshopper , ale te projekty akademickie wydają się być nieaktywne. Zajrzyj również na http://tunes.org/ ; jest nieaktywny, ale odbyło się wiele dyskusji na takie tematy.

Uwaga 2: pojęcie pliku zmieniło się z biegiem czasu (spójrz na odpowiedź na temat moich pierwszych doświadczeń programistycznych): pierwszy MSDOS na komputerach IBM z lat 80. (bez katalogów!), VMS - na Vaxen z 1978 r. - (miał oba stałe zapisy pliki i pliki sekwencyjne, z prymitywnym systemem wersjonowania), komputery mainframe z lat 70. ( IBM / 370 z OS / VS2 MVS ) miały zupełnie inne pojęcie plików i systemów plików (w szczególności dlatego, że w tym czasie stosunek czasu dostępu do dysku twardego do czas dostępu do pamięci rdzenia wynosił kilka tysięcy - więc w tym czasie dysk działał stosunkowo szybciej niż dzisiaj, nawet jeśli dzisiejsze dyski są absolutnieszybciej niż w poprzednim stuleciu, dziś współczynnik szybkości procesora / dysku wynosi około miliona; ale teraz mamy dyski SSD). Ponadto pliki są mniej (lub nawet nie) przydatne, gdy pamięć jest trwała (jak w bębnie magnetycznym CAB500 , lata 60. i przyszłe komputery korzystające z MRAM )

Basile Starynkevitch
źródło
9
Warto również zauważyć, że niektóre systemy plików mają wiele funkcji RDBMS. Na przykład metadane pliku (szczególnie metadane rozszerzone) w systemie BeFS są indeksowane drzewami B +, a menedżer plików BeOS miał silnik wyszukiwania podobny do SQL, który przeszukiwał indeksowane metadane w celu znalezienia plików.
greyfade
2
Nie ośmielę się umieścić ich w mojej odpowiedzi, ale blog tunes.org i J.Pitrat może poszerzyć twoje poglądy na temat oprogramowania i systemów operacyjnych.
Basile Starynkevitch
4
@greyfade: System plików to obiektowa baza danych. Żadne znane mi systemy plików nie mają możliwości odpowiadania na zapytania relacyjne (np. Pliki z czasami modyfikacji w określonym zakresie). Musisz to zrobić, sprawdzając czas modyfikacji wszystkich plików i filtrując się. Niektóre systemy plików działają przyzwoicie, gdy są używane bezpośrednio jako baza danych obiektów (przechowują miliony bardzo małych plików, gdzie kluczem jest nazwa pliku), ale inne radzą sobie z takim obciążeniem.
Peter Cordes,
3
@PeterCordes: BeFS to zrobił. Ponieważ wszystkie metadane były indeksowane drzewem B +, obsługiwały zapytania o zakres, symbole wieloznaczne, sprzężenia i inne zabawne rzeczy. Pamiętam, że Microsoft robił to samo w WinFS.
greyfade,
4
PalmOS był jednym z głównych systemów operacyjnych, który nie miał systemu plików. Zamiast tego miał relacyjną bazę danych, która została zaimplementowana bezpośrednio w pamięci RAM / flash (pierwotny sprzęt nie używał pamięci flash jak dzisiaj iPhone'y, ale używał statycznej pamięci RAM zasilanej bateryjnie zarówno dla pamięci RAM, jak i dysku).
slebetman
23

Chociaż jest to oparte na opiniach, myślę, że to tylko kolejny artefakt historyczny. Wczesne systemy operacyjne wykorzystywały prostą konstrukcję systemu plików dla wydajności, która była dość silnie powiązana z charakterystyką sprzętu dostępnego w tamtym czasie i odtąd było tak samo. Trudno jest zmienić stare interfejsy API do odczytu / zapisu plików na bardziej transakcyjne interfejsy API zapytań / wstawień po ich ustanowieniu.

Wszystkie obecne systemy plików muszą być kompatybilne wstecz z tymi starymi interfejsami API.

Microsoft pomyślał o zastąpieniu systemu plików systemem opartym na RDBMS w rozwoju Longhorn . To była zbyt duża zmiana, aby mogli się wycofać, ale widzisz, że ich wysiłki są kontynuowane w postaci Windows Search (gdzie RDBMS służy do przechowywania kopii metadanych) i funkcji, takich jak system Filestream w SQL Server (gdzie tabela bazy danych danych pliku jest udostępniana systemowi operacyjnemu jako zwykły katalog umożliwiający zarówno Eksploratorowi Windows dostęp do danych, jak i zapytania SQL tych samych danych).

Inne systemy operacyjne mają systemy plików RDBMS. AS / 400 posiadały je, chociaż nigdy się o nich nie dowiedziałem; Pamiętam, jak dziwnie to wtedy wyglądało). Myślę, że inne systemy mainframe mają takie samo podejście.

gbjbaanb
źródło
1
Jeśli pamięć działa, być może myślisz o programie DB2 UDB w systemie OS / 400, znanym również jako i5 / OS (teraz nazywanym po prostu „IBM i”): publib.boulder.ibm.com/iseries/v5r2/ic2924/info/rzamb/…
Brian Cline
1
Tak, byłoby dobrze POCZĄTEK TRANSAKCJI / ZEZWOLIĆ na uprawnienia do plików zamiast robić „znajdź za pomocą -exec”. Podniesienie prymitywnego systemu plików niskiego poziomu do administrowania jest przypadkowe i powinno przebiegać zgodnie z planszą. „System plików” jako właściwy system pamięci masowej i zarządzania metadanymi (choć interpretacja treści bajtu powinna pozostać w warstwie aplikacji, w przeciwnym razie wystąpią bóle głowy)? Tak, chcemy!
David Tonhofer
12

Prawdziwym powodem jest brak takiej potrzeby. Nakładanie warstw na bazy danych na plikach, zamiast ich scalania, obsługuje przynajmniej większość sytuacji, a także scalone rozwiązanie o znacznie zmniejszonej złożoności. W niektórych sytuacjach, o których wspominali inni, nałożyliśmy także warstwowe pliki na bazy danych (takie jak struktury uprawnień). W takim przypadku baza danych zarządzająca tymi uprawnieniami jest znacznie prostsza niż komercyjny RDBMS.

Zaletą jest ich łączenie, ale jak dotąd było ich niewiele i wystarczająco dużo, aby ruch rozwijał się powoli. Zastanów się, jak rzadko ludzie mówią: „Daj mi trzecią kolumnę każdej faktury otrzymanej od 2010 r. I zsumuj je” lub „nie pozwól mi usunąć tego pliku, dopóki nie usunę go z programu Excel arkusz kalkulacyjny również ”.

Systemy plików mają kilka zalet w stosunku do relacyjnych baz danych, które je utrzymują:

  • Są o wiele prostsze. Jest to wielka sprawa podczas ładowania komputera. Nawet na Androidzie , gdzie mają RDBMS do przechowywania, mają zwykłe stare obrazy do zarządzania początkowym procesem ładowania.
    • Łatwiej jest zdefiniować ich ograniczenia. W nieograniczonej maszynie RDBM zapewniają dość dużą moc. Jednak w świecie systemów plików istnieje wiele ograniczeń, które wynikają z prób szybkiego działania, gdy są bezpośrednio ułożone na wirującym dysku. Trudniej jest udowodnić, że zapytanie RDBMS nie przekracza tych ograniczeń, niż zapewnia takie same gwarancje dla systemu plików.
  • Obsługują struktury hierarchiczne lepiej. W wielu przypadkach przechowywanie plików w formie hierarchicznej jest nadal naturalne. W RDBMS jest to szczególny przypadek. Systemy plików optymalizują się w tym specjalnym przypadku, RDBMS nie.
  • Niezawodność. O wiele łatwiej jest udowodnić, że dwie warstwy działają niezależnie, niż udowodnić, że jeden gigantyczny system działa idealnie. Macierze RAID , bezpieczne dzienniki w przypadku awarii zasilania i inne zaawansowane funkcje są łatwiejsze do wdrożenia w warstwie poniżej warstwy zajmującej się takimi ograniczeniami jak ACID lub klucze obce.
Cort Ammon - Przywróć Monikę
źródło
1
niezawodność: możesz uruchomić DB na macierzy RAID, tak jak możesz uruchomić system plików na urządzeniu RAID, a nie bezpośrednio przy użyciu dysku. Kronikowanie należy jednak wykonać w systemie plików / DB (chyba że zamiast tego chcesz zapewnić gwarancje poprawności, wyłączając buforowanie zapisu i nigdy nie zmieniając kolejności operacji wejścia / wyjścia, tj sync. Trybu). +1 dla wszystkich innych punktów, szczególnie. szybka heirarchiczna wydajność, w której mnóstwo rzeczy w jednym podkatalogu nie spowalnia wydajności w innym podkatalogu. Chyba że każdy katalog lub plik jest innym stołem ...
Peter Cordes
niezawodność: systemy operacyjne z serii IBM i zostały zaprojektowane tak, aby były bardziej niezawodne, niż można sobie wyobrazić, zaprojektowane do użytku w stylu mainframe. Hierarchie istnieją tylko z powodu ograniczeń systemu plików, dlatego MS chce później wyszukiwać i wykonywać operacje DB na istniejącym systemie plików. Spójrz na Gmaila jako przykład, jak możesz mieć hierarchię bez korzystania z hierarchii!
gbjbaanb
3

Myślę, że inne odpowiedzi dostarczają szerokiego spektrum powodów, dla których systemy operacyjne nie polegają na relacyjnych bazach danych wewnętrznie / wyłącznie, dlatego podzielę się interesującą informacją, na którą kiedyś natknąłem się.

Najwyraźniej istnieją technologie, które pozwalają montować relacyjne bazy danych jako systemy plików, gdy ich użycie jest uzasadnione. Przykładem jest Oracle DBFS (system plików bazy danych) . Ten fragment dokumentu wyjaśnia całkiem dobrze uzasadnienie:

System plików bazy danych (DBFS) wykorzystuje funkcje bazy danych do przechowywania plików oraz zalety bazy danych w efektywnym zarządzaniu relacyjnymi danymi w celu wdrożenia standardowego interfejsu systemu plików dla plików przechowywanych w bazie danych. Dzięki temu interfejsowi przechowywanie plików w bazie danych nie jest już ograniczone do programów specjalnie napisanych do użycia BLOBi CLOBinterfejsów programistycznych. Do plików w bazie danych można teraz uzyskać przejrzysty dostęp za pomocą dowolnego programu systemu operacyjnego (OS), który działa na pliki.

Rozwiązanie zapewnia zestaw interfejsów (klienci wiersza poleceń, biblioteki kodów) dla danych LOB przechowywanych w tabelach bazy danych. Można tego użyć w systemach operacyjnych Windows i Linux (choć o ile wiem, poziom integracji między nimi jest różny)

Komponenty Oracle DBFS

Źródło: docs.oracle.com

Zgodnie z dokumentacją system plików powinien mieć możliwość korzystania z systemu Linux w przejrzysty sposób

W systemie Linux dbfs_clientma również interfejs montowania, który wykorzystuje FUSEmoduł jądra systemu plików w przestrzeni użytkownika ( ) do implementacji punktu montowania systemu plików, który zapewnia przejrzysty dostęp do plików przechowywanych w bazie danych i nie wymaga zmian w jądrze systemu Linux. Odbiera standardowe wywołania systemu plików z FUSEmodułu jądra i tłumaczy je na wywołania OCI do procedur PL / SQL w DBFS Content Store .

Dlatego odpowiedź na twoje pytanie brzmi: ogólnie rzecz biorąc, nie ma powodu, aby system operacyjny używał relacyjnej bazy danych jako systemu plików (aw przypadku podstawowych komponentów systemu operacyjnego byłoby to faktycznie kłopotliwe). Jednocześnie można to zrobić, gdy wymaga tego jakiś problem.

toniedzwiedz
źródło
2

Główną funkcją każdego systemu operacyjnego jest ułatwianie interakcji między aplikacjami, sprzętem i użytkownikami.

Więc ... dlaczego system operacyjny Windows / Linux nie korzysta z relacyjnych baz danych (RDBMS)? Jest to pytanie o biblijnych proporcjach, ale krótka odpowiedź brzmi: nie ma żadnej realnej korzyści z zastosowania złożonej struktury, takiej jak rdbms jako system plików.

„Relacyjny” to słowo operacyjne w „Relacyjnej bazie danych”, a większość danych przechowywanych w systemie plików nie jest powiązana z innymi danymi. Systemy plików są na ogół implementowane jako ograniczone bazy danych, tylko nie relacyjne.

Nik Pfirsig
źródło
Być może lepszym pytaniem byłoby - dlaczego aplikacje potrzebują baz danych zamiast po prostu przechowywać dane w plikach? Nigdy nie znalazłem satysfakcjonującej odpowiedzi na to pytanie. Wszystkie domniemane zalety relacyjnej bazy danych można uzyskać za pomocą pliku sustem
Sridhar Sarnobat