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.
database
windows
linux
operating-systems
Pratik
źródło
źródło
Odpowiedzi:
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 tę 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 )
źródło
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.
źródło
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ą:
źródło
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 ...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:
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)
Źródło: docs.oracle.com
Zgodnie z dokumentacją system plików powinien mieć możliwość korzystania z systemu Linux w przejrzysty sposób
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.
źródło
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.
źródło