Jak najlepiej określić, kiedy należy użyć bazy danych?

13

Karierę programistyczną rozpocząłem od programowania stron internetowych przy użyciu PHP i MySQL. Przyzwyczaiłem się do wykorzystywania db do przechowywania większości danych dynamicznych, a także niektórych danych ustawień / parametrów. Czasami będzie dużo danych, a innym razem wpisów w tabelach będzie niewiele. Wydało mi się to po prostu naturalne i, o ile wiem, jest to mniej lub bardziej akceptowalne podejście do tworzenia stron internetowych. (Proszę popraw mnie jeżeli się mylę...)

Zajmuję się teraz aplikacjami komputerowymi, a moją naturalną skłonnością jest ponowne wykorzystanie bazy danych do przechowywania wielu informacji, które zostaną wygenerowane podczas korzystania z aplikacji. Jednak, o ile wiem, nie widzę aplikacji (których używam) bardzo często korzystających z bazy danych. [EDYCJA: Od tego czasu zauważono, że było to błędne założenie, ponieważ wiele aplikacji korzysta z lekkich dbs wbudowanych w sam program.] Jaki jest tego powód? W którym momencie należy wykorzystać db? Czy istnieją jakieś standardy w tej sprawie? Jakie są również powody, dla których NIE należy używać bazy danych do tworzenia aplikacji komputerowych?

Kenneth
źródło
2
„Jednak, o ile wiem, nie widzę aplikacji (których używam) często używających bazy danych”? Oparty na czym? Jeśli korzystali z SQLite, jak moglibyście stwierdzić, czy korzystali z bazy danych?
S.Lott
Właśnie dlatego powiedziałem, o ile wiem, że mogłem się mylić. Pomyślałem, że mogą być aplikacje używające osadzonych baz danych ... Czy aplikacje używające dbs są dość powszechne?
Kenneth
@Kenneth: Proszę Google za osadzone bazy danych, takie jak SQLite. Jest wiele. Są szeroko stosowane. AFAIK, iOS Apple używa go do całej trwałości. Proszę Google.
S.Lott,
2
Ja dużo Google. Czasami jednak nic nie zastępuje doświadczonych opinii, których nie zawsze można znaleźć w Google.
Kenneth
1
Myślę, że te komentarze są wystarczające do skorygowania błędnego założenia. Przepraszam za błąd. Czuję, że używam zdrowej mieszanki googlowania i zadawania pytań. Czasami nie ma substytutu dla ostatniego IMHO. Teraz mój Google będzie lepiej ukierunkowany i bardziej produktywny.
Kenneth

Odpowiedzi:

4

jeśli twoja aplikacja jest zorientowana na dokument, przechowuj rzeczy w pliku dokumentu

jeśli aplikacja zajmuje się bardziej uporządkowanymi danymi, zbyt wiele dla pojedynczego dokumentu (np. dokumentu XML), skorzystaj z bazy danych

Steven A. Lowe
źródło
7

System baz danych jest tradycyjnie postrzegany jako stosunkowo ciężka usługa - której niekoniecznie trzeba było instalować na każdym komputerze klienckim. Właściwie to byłem w sytuacjach (tworzenie aplikacji GUI na komputery, w których trzeba było zapisać dużo danych), w których prawdziwy system DB byłby „idealnym” rozwiązaniem - ale ponieważ w tamtych czasach jedyne dostępne bazy danych były stosunkowo ciężkie, zamiast tego poszliśmy z płaskimi plikami danych.

Mimo że obecnie istnieje kilka lżejszych baz danych, jest to nadal ważny argument przeciwko bazom danych po stronie klienta. Wyobraź sobie prostą małą aplikację komputerową (na przykład prostą zabawkę lub grę komputerową), która musi przechowywać kilkadziesiąt ustawień i parametrów. Wygląda na to, że ktoś instaluje MySQL tylko po to, by uruchomić twoją aplikację.

W przypadku tworzenia stron internetowych serwer jest oczywiście zapleczem, w którym posiadanie bazy danych jest czymś oczywistym. na przykład. Użytkownicy nie muszą się martwić o zainstalowanie bazy danych na swoim końcu.

Stoły Bobby'ego
źródło
Więc zalecamy, aby nie używać bazy danych dla samodzielnych aplikacji, chyba że duże ilości danych naprawdę to uzasadniają?
Kenneth
jakie są twoje przemyślenia na temat używania lekkich baz danych ... tak samo jak baz danych w pełnej skali?
Kenneth
1
@Kenneth: Powiedziałbym „to zależy”. Jeśli aplikacja wymaga dużych ilości danych tabelarycznych, które naprawdę wymagają bycia w odpowiedniej bazie danych, argument może być wystarczająco silny, aby dostarczyć aplikację z lekką bazą danych. Ale jeśli jest to po prostu rodzaj danych konfiguracyjnych / ustawień, to prawdopodobnie przesada.
Tabele Bobby'ego
5

Aplikacje komputerowe utrzymują swój stan podczas działania. Podczas gdy tworzenie stron internetowych zwykle nie. Więc chociaż może być konieczne zapisanie ustawienia użytkownika w bazie danych między ładowaniami stron, w aplikacji komputerowej po prostu przechowujesz je w pamięci. To znacznie zmniejsza zapotrzebowanie na tego rodzaju trwałe przechowywanie. Jeśli chcesz przechowywać preferencje między zastosowaniami, możesz zapisać je wszystkie w jednym pliku lub umieścić je w innym miejscu, jak rejestr systemu Windows.

Biorąc to pod uwagę, systemy baz danych są dość często używane w aplikacjach komputerowych. Na długo przed pojawieniem się w Internecie aplikacje komputerowe zostały połączone z DBMS. Przede wszystkim dla aplikacji, które nie są oparte na dokumentach. Chociaż w dzisiejszych czasach, przy lepszej dostępności lekkich silników, linie nieco się zacierają. Na przykład używam baz danych SQLite jako dokumentów w kilku moich aplikacjach.

Grandmaster B.
źródło
+1 Jeśli nie masz skomplikowanych problemów związanych z trwałością, takich jak wiele użytkowników, wiele lokalizacji, jednoczesne blokowanie aktualizacji, tradycyjna baza danych może być nadmierna. Jeśli dane są dość statyczne (mogą rosnąć lub dołączać się do nich, ale nie ewoluować ani nie być aktualizowane), a rywalizacja / konkurencja nie jest częsta ani przewrotna (skutki uboczne / wrażenia użytkownika związane z oczekiwaniem na zwolnienie blokady nie jest nie do przyjęcia, biorąc pod uwagę kompromisy w zakresie wydajności i złożoności), możesz nie potrzebować bazy danych.
JustinC 23.03.11
4

Jedną z rzeczy, które możesz chcieć sprawdzić, są lekkie bazy danych, które nie wymagają faktycznej działającej usługi bazy danych. np. na froncie Microsoft jest SQL Server Compact , który jest bezpłatny, wymaga tylko jednego pliku dla bazy danych i niektórych bibliotek DLL dodanych do Twojej aplikacji, a z perspektywy dewelopera zachowuje się tak samo jak „prawdziwy” SQL Server.

Jestem przekonany, że istnieją podobne opcje na innych platformach.

Carson63000
źródło
1
Bardzo podobny przykład po stronie Java to Derby. Myślę, że są też inni.
jprete
1
Wygląda na to, że może to być idealne rozwiązanie ... Naprawdę lubię korzystać z baz danych! lol
Kenneth
Czy są wady używania lekkich baz danych?
Kenneth
@Kenneth: Zwiększają instalację i mogą zwiększyć bazę kodów. Jest to jednak o wiele mniej niż instalacja całego serwera bazy danych na kliencie, co zwykle odbywa się tylko wtedy, gdy aplikacja jest rozproszona i potrzebuje bardziej rozbudowanej bazy danych. Berkeley DB jest jednym z najbardziej powszechnie stosowane.
Orbling
inną opcją jest SQLite, który jest znacznie lżejszy zarówno na pamięci RAM, jak i na dysku i nie ma żadnych arbitralnych ograniczeń. Nic dziwnego, że jest używany przez wszystkie smartfony i przeglądarki internetowe spoza MS.
Javier
2

W aplikacjach internetowych ważne jest przechowywanie dowolnego trwałego stanu w scentralizowanym magazynie. Ponieważ aplikacja internetowa jest zwykle pierwszym wąskim gardłem, ważne jest, aby móc ją rozpowszechniać bez pytania, która kopia zawiera dane (zasada „Shared Nothing”). Nie tylko baza danych, ale memcachedsystemy kolejkowe istnieją z tego samego powodu.

Aplikacje komputerowe nie mają tego samego celu skalowalności. Zazwyczaj większość danych jest przechowywana lokalnie na każdej stacji roboczej. Udostępnianie danych to w większości przypadków inny problem. Eliminuje to jeden ważny powód korzystania z bazy danych.

Aplikacje GUI mogą mieć także złożone dokumenty, które mogą być traktowane jako złożona sieć obiektów w pamięci. Znormalizowanie struktury w relacyjny schemat DB może znacznie zwiększyć złożoność problemu, czasem łatwiej jest po prostu serializować całość w jednym strumieniu. Wiele platform OOP zawiera tylko niektóre udogodnienia.

Mimo to, czynienie przechowywanych dokumentów czytelnymi za pomocą narzędzi spoza głównej aplikacji jest dużą zaletą w wielu przypadkach, więc albo używając formatów czytelnych dla ludzi (XML, JSON, YAML, itp.), Lub plik zip łączący kilka prostszych elementów, staje się coraz więcej i bardziej powszechne.

Z tego samego powodu kolejnym świetnym rozwiązaniem jest użycie wbudowanej biblioteki bazy danych (BDB, Tokyo Cabinet, SQLite, MS-SQL * server Compact itp.).

Javier
źródło
1

Bazy danych mogą być przesadzone, ale zwykle nie muszą . Bardzo proste programy po prostu ich nie potrzebują. Jeśli twój dokument może załadować się do pamięci w trywialny sposób i pozostać tam bez problemów, tak naprawdę nie potrzebujesz go dla wielu programów.

Na przykład rozważ:

#include "superheader.h"

int main()
{
    int row=2, column=2;
    DatabaseType db;
    db.ConnectTo("programDB", "user", "pass");
    db.setTable("messages");
    string hello_world=db.fetch(row, column);
    cout<<hello_world;
    return 0;
}

Cóż, to zbyt uproszczone, ale oczywiście to po prostu za dużo. Nie ma sensu mieć takiego poziomu zarządzania danymi w „Hello World”

Zazwyczaj podstawową zasadą jest używanie bazy danych, jeśli masz wiele zestawów danych, szczególnie jeśli są one wyjątkowo różne LUB używanie bazy danych, jeśli ilość danych jest dość duża . Zasadniczo bazy danych są związane z pewnym narzutem, ale jest wiele takich, które tak naprawdę nie mają wiele. Na przykład małe, lekkie bazy danych w pamięci są czasem przydatne w przypadku małych projektów z intensywnym przetwarzaniem, harmonogramem lub dużą ilością dynamicznych zmian danych.

Istnieją różne style kodowania, wiele razy nie ma nic złego w bazie danych, ale większość z nas po prostu nie posunie się tak daleko do podstawowych zadań. Są jeszcze inne czasy, gdy odpowiednia baza danych zapewnia korzyści w zakresie wydajności. Staraj się szczególnie rozumieć różnice w tym, gdzie będą dane, jak długo będą one dostępne i co je zmieni w trakcie ich trwania.

Garet Claborn
źródło
1

Korzystanie z bazy danych jest zawsze właściwe, a dzięki implementacjom SQLite praktycznie dla każdego języka nieużywanie jednego języka jest po prostu złym podejmowaniem decyzji projektowych. Jedynym powodem, dla którego nie należy go używać, jest programowanie osadzone lub inny rodzaj programowania nieaplikacyjnego. Kwerendowanie danych i ustawień za pomocą języka deklaratywnego, takiego jak SQL, jest o wiele bardziej naturalne niż przechodzenie do plików płaskich lub innych obiektów w pamięci z konieczną składnią. Co więcej, oddziela operacje danych od innych kodów aplikacji, co w dłuższej perspektywie czyni kod bardziej modułowym i łatwym w utrzymaniu.

davidk01
źródło