Czy korzystanie z serwera bazy danych ma sens, jeśli aplikacja działa tylko lokalnie?

41

Widziałem niektóre aplikacje, które są w zasadzie aplikacjami działającymi lokalnie w systemie (więc nie mają zbyt dużej komunikacji w sieci). Aplikacje te wydają się zależeć od serwerów baz danych w celu przechowywania ich danych.

Przykładem aplikacji jest Amarok (popularny odtwarzacz muzyki w systemie Linux). Nie wiem, czy nadal to robią, ale pamiętam, że był czas, kiedy instalacja Amaroka oznaczała, że ​​musisz zainstalować serwer MySQL i cały czas działać w tle.

Jaka jest zaleta korzystania z serwera do lokalnej pamięci masowej w porównaniu z użyciem mniejszego wbudowanego rozwiązania SQL, takiego jak sqlite? Mówię ogólnie o oprogramowaniu aplikacyjnym, niekoniecznie amaroku (to był tylko przykład). Czy istnieją sytuacje, w których korzystanie z serwera bazy danych ma sens w porównaniu z osadzoną bazą danych?

9a3eedi
źródło
4
Posiadanie bazy danych może być bardzo ważne. Posiadanie bazy danych w procesie lub oddzielnej bazy danych procesu jest wyborem / szczegółem implementacji.
9000
2
Rozumiem, że. Pytanie dotyczy raczej tego, dlaczego miałbyś wybrać oddzielną bazę danych procesów (jak serwer mysql) zamiast bazy danych w trakcie przetwarzania (jak SQLite) dla aplikacji lokalnych.
9a3eedi

Odpowiedzi:

29

SQLite oferuje całkiem dobre podsumowanie, kiedy go użyć, czy nie, w porównaniu z alternatywami:

https://www.sqlite.org/whentouse.html

Ta linia podsumowania bardzo dobrze opisuje przypadek użycia SQLite:

SQLite nie konkuruje z bazami danych klient / serwer. SQLite konkuruje z fopen ().

Artykuł rozszerza się na ten temat. Zawiera także sekcję „Sytuacje, w których klient / serwer RDBMS może działać lepiej”. W skrócie są to:

  • Aplikacje klient / serwer : wielu użytkowników w sieci.
  • Witryny o dużej objętości : albo intensywnie pisz, albo intensywnie czytaj, aby wymagać dzielenia na fragmenty.
  • Bardzo duże zbiory danych : większe niż można rozsądnie przechowywać na jednym dysku.
  • Wysoka współbieżność : w szczególności współbieżne zapisy.
Denis de Bernardy
źródło
@ 9a3eedi: w rzeczywistości wśród tych czterech punktów nie ma żadnego, który opisywałby scenariusz z pełnym serwerem bazy danych w połączeniu z pamięcią lokalną (zwłaszcza dwa pierwsze są dokładnie przeciwne do tego) - więc czy mógłbyś oświecić nas, dlaczego wybrałeś to? odpowiedź, choć nie pasuje do twojego pierwotnego pytania? Nawiasem mówiąc, podałem tę odpowiedź z dokładnie tego powodu.
Doc Brown
@DocBrown: Szczególne przypadki, w których powinieneś używać RDBMS klienta / serwera to [patrz odpowiedź]; do wszystkiego innego SQLite działa dobrze. Nie jestem pewien, co tam jest niejasne, więc możesz edytować odpowiedź, jeśli uważasz, że jest potrzebna.
Denis de Bernardy,
Pierwotne pytanie dotyczyło konkretnych przypadków, w których baza danych ac / s ma sens, jeśli aplikacja wykonuje tylko czynności lokalnie (cytowanie z tytułu) lub użycie serwera do przechowywania lokalnego (cytowanie z tekstu pytania). Cztery powyższe scenariusze są dokładnie przeciwne do tego (pierwsze dwa) lub bardzo mało prawdopodobne lub rzadkie jako scenariusze „lokalne” (drugie dwa). To, co napisałeś, nie jest złe, ale nie pasuje do pytania.
Doc Brown
@DocBrown - i krótka odpowiedź brzmi: nie ma sensu, chyba że masz do czynienia z dużymi zbiorami danych lub potrzebujesz równoczesnych zapisów. (Lub, z oczywistych powodów, potrzebując czegoś, czego nie oferuje SQLite.) Ponownie, możesz swobodnie edytować odpowiedź, jeśli ten punkt jest dla ciebie niejasny.
Denis de Bernardy,
Cóż, jeśli naprawdę uważasz, że ta lista jest kompletna (a więc podaj ukryte oświadczenie, że w przypadku lokalnego scenariusza użycie serwera DB C / S nie ma żadnego sensu), to nie zgadzam się i nie sądzę, żebym mógł poprawić twoją odpowiedź dodając wyjaśnienia.
Doc Brown
28

Nawet w przypadku pojedynczego systemu z jednym użytkownikiem „prawdziwy” serwer bazy danych ma sens:

  1. Wykorzystuje znajomy język ( SQL ). SQLite używa SQL, ale niektóre wbudowane bazy danych (np. Baza danych obiektów , NoSQL ) nie używają SQL. Te mają wyższą krzywą uczenia się, ponieważ są mniej powszechne.
  2. Zapewnia integralność referencyjną, ograniczenia, wyzwalacze itp., Których produkty takie jak SQLite mogą nie zapewniać lub przynajmniej nie dostarczają w pełni.
  3. Dzięki celowaniu w prawdziwą bazę danych dla wielu użytkowników, zgodną z ACID , aplikacja ma możliwość pracy w scenariuszu dla jednego użytkownika / jednej stacji roboczej lub jako aplikacja hostowana dla wielu użytkowników przy użyciu tej samej bazy kodów .
  4. Użytkownik ma możliwość badania danych offline przy użyciu standardowych narzędzi (np. SQL Developer, MySQL Workbench, SQL Server Management Studio), ładowania lub tworzenia kopii zapasowych danych przy użyciu tych narzędzi itp. Chociaż jest to możliwe z wieloma osadzonymi bazami danych różnych typów, ludzie mogą być bardziej zaznajomieni z tymi narzędziami ze świata baz danych C / S.

Podstawową wadą jest konieczność instalowania i utrzymywania oprogramowania serwera bazy danych, które jest nieco skomplikowane dla użytkowników nietechnicznych (a nawet wielu użytkowników technicznych). Systemy operacyjne takie jak Linux ułatwiają to: Mam PostgreSQL i MySQL na moim systemie Linux. Zainstalowałem aplikacje, które się do nich przyłączyły, z niewielką lub żadną interakcją z mojej strony.

Doktor Brown
źródło
9
W rzeczywistości istnieje jeden system bazy danych (a mianowicie Sybase SQL Anywhere) z pełną obsługą SQL, integralnością referencyjną, ACID, procedurami składowanymi, które nie wymagają konfiguracji serwera ani instalacji jako usługi, gdy są uruchomione w konfiguracji lokalnej (choć może to być konfiguracja środowiska dla wielu użytkowników). Nie znam żadnego innego systemu baz danych o tych właściwościach, jeśli ktoś je zna, byłbym zainteresowany.
Doc Brown
3
@DocBrown IIRC MS SQLServer Compact oferuje to w postaci dll, chociaż LocalDB jest prawdopodobnie lepszym wyborem - nie wymaga instalacji jako usługi, ale wymaga uprawnień administratora.
gbjbaanb
5
Aby dodać do dyskusji na temat poprawności wad - oprócz SQLite, o którym ciekawie wspomniano już w odpowiedzi, wiele baz danych innych niż SQL i systemów podobnych do baz danych, np. OrientDB, Solr i inne, ma dedykowane wsparcie osadzania .
mikołak
14
SQLite zapewnia integralność referencyjną (choć musi być włączona) i podstawowe ograniczenia. Jest również znacznie szybszy niż większość serwerów, jeśli jest właściwie używany. Jego główną wadą w porównaniu z serwerem jest to, że jest on jednym pisarzem.
Jan Hudec
2
@DocBrown: osadzona baza danych Firebird zapewnia pełne wsparcie SQL, w tym integralność referencyjną, gwarancje ACID, przechowywane procesy i wyzwalacze. Nie obsługiwał wielu współbieżnych połączeń z osadzoną bazą danych i nie jestem pewien, czy to ograniczenie jest nadal stosowane, czy nie, ale cały zestaw funkcji SQL istnieje.
Mason Wheeler,
21

Myślę, że ma to związek z bezwładnością.

Amarok opiera się na XMMS, który pochodzi z 1997 roku. Aby mieć dobre możliwości bazy danych, musiałeś użyć serwera, ponieważ był on o wiele potężniejszy niż rozwiązania oparte na plikach, które w żadnym wypadku nie miały dobrych możliwości bazy danych.

Nadchodząca i zyskująca popularność dobrych lokalnych osadzonych baz danych, takich jak SQLlite, jest czymś całkiem nowym.

Pieter B.
źródło
Z tego co pamiętam, AmaroK 1 (który mógł być oparty na XMMS) nie zależał od serwera bazy danych. To Amarok 2, który został wydany wraz z KDE4, wprowadził tę zależność, a wtedy bardzo dziwne było to, że wymagałyby ode mnie instalacji MySQL i utrzymania go w tle
9a3eedi
10

Najważniejszą cechą wyróżniającą jest współbieżność .

Jeśli masz tylko jedną aplikację, która działa w jednym wystąpieniu dla użytkownika, rozwiązanie osadzone (bez względu na to, czy jest to sqlite, czy jakaś pamięć obiektowa) jest zwykle OK.

Jeśli jednak masz wiele instancji, które muszą jednocześnie manipulować bazą danych, musisz mieć serwer do jej synchronizacji. SQLite pozwala tylko na jeden zapis na raz, w całej bazie danych, podobnie jak większość innych wbudowanych rozwiązań. Jeśli masz nawet wiele aplikacji, prawdopodobnie potrzebujesz bardziej szczegółowej specyfikacji ograniczeń, na którą wbudowane rozwiązania na ogół nie pozwalają.

Jan Hudec
źródło
5

Wiele innych odpowiedzi mówi o zaletach współbieżności, ale także ponieważ baza danych działa jako serwer, baza danych może uruchamiać zadania bez konieczności uruchamiania aplikacji. Może to być konserwacja, kopie zapasowe, synchronizacja z innym serwerem lub dowolne zaplanowane zadanie.

Jeśli uważasz, że Twoja aplikacja może zmienić się w aplikację typu klient / serwer, możesz zacząć od korzystania z RDBMS od samego początku zamiast przenosić go później.

Nie mam pojęcia, czy podany przykład wykorzystuje to, czy nie.

JeffO
źródło
2

O ile nie korzystasz z systemu osadzonego z małą ilością pamięci i procesorem, nie sądzę, że działanie serwera w tle wyrządzi ci jakąkolwiek krzywdę.

Lokalne działanie serwera bazy danych jest w porządku. Baza danych ma na celu dostęp do danych i manipulowanie nimi. Dostęp do sieci to plus, który może, ale nie musi być potrzebny. Istnieją narzędzia inżynieryjne i naukowe, które to umożliwiają.

Powiedz, że używasz danych w lokalnej aplikacji. Dlaczego nie powinieneś korzystać z bazy danych? w przeciwieństwie do czego?

cauchy
źródło
Gdybym miał wdrożyć aplikację dla zwykłych użytkowników (powiedzmy odtwarzacz muzyki taki jak AmaroK), pomyślałbym, że zainstalowanie serwera MySQL i uruchomienie go w tle to trochę za dużo wymagania systemowe i będzie czymś, co użytkownicy zrobiliby nie jak. Ale myślę, że to zależy od aplikacji. Jest to przeciwieństwo używania czegoś takiego jak SQLite.
9a3eedi
2

Zależy to od abstrakcji danych i ogólnej przestrzeni aplikacji, wymagań w zakresie zarządzania dostępem, planowanej inwestycji w utrzymanie danych, pilności wymaganego prototypu, gdzie jesteś na krzywej uczenia się itp.

Jeśli chcesz zapewnić ściśle zintegrowaną bazę danych do aplikacji, która nie wymaga dostępu z innych aplikacji, tworząc wyspy wbudowanej bazy danych. Przykładem może być implementacja Web Storage Mozilla Firefox z SQLite.

Jeśli potrzebujesz jeszcze większej wydajności przy ograniczonej ilości danych, lepiej wybrać wybór baz danych w pamięci.

Z drugiej strony, jeśli masz wiele aplikacji uruchamiających wiele zapytań o te same dane, a to wymaga lepszej struktury przechowywania danych w celu optymalizacji wydajności, wymagany jest scentralizowany system DBMS. Absolutnie wolę to do badań naukowych, gdy wymaga ogromnej ilości danych i gdzie czas odpowiedzi na zapytanie znacząco wpłynie na ogólne wrażenia użytkownika.

W przypadku Amaroka, jak sądzę, był to wybór DBMS typu open source, zanim wybrali ścieżkę osadzonych baz danych.

Jeśli masz pod ręką określoną definicję systemu, łatwiej będzie ważyć minusy i zalety.

V / r, Umut

Umut Kahramankaptan
źródło