2010-04-15 12 views
51

Mam pytanie dotyczące baz danych i do jakiego momentu warto nurkować w jednym. Jestem przede wszystkim inżynierem wbudowanym, ale piszę aplikację, używając Qt do interfejsu z naszym kontrolerem.W jakim momencie warto korzystać z bazy danych?

Jesteśmy w dziwnym miejscu, w którym mamy wystarczającą ilość danych, aby można było wdrożyć bazę danych (około 700+ produktów i rośnie), aby zarządzać wszystkim, ale nie jestem pewien, czy warto teraz pracować z. Nie mam problemów z implementowaniem GUI z plikami generowanymi z Excela i parsowanymi, ale robi się nudny i trudny do śledzenia nawet ze skryptami VBA. Bawiłem się, konwertując nasze dane na coś łatwiejszego w zarządzaniu po stronie aplikacji z Microsoft Access i które wydaje się działać dobrze. Jeśli to się uda, jestem tylko o krok (lub kilka) od korzystania z bazy danych SQL i korzystania z biblioteki Qt, aby uzyskać do niej dostęp i ją zmodyfikować.

Nie mam dużego doświadczenia w zarządzaniu danymi na tym poziomie. Jakie są więc rzeczywiste zalety korzystania z bazy danych, jeśli takie są w tym przypadku? Zdaję sobie sprawę, że wiele z tego może być bardzo specyficznych dla aplikacji, ale pomocne mogą być ogólne pomysły i sugestie dotyczące tego, jak zagłębiać się w linię programową wbudowaną/aplikacyjną.

Nie chodzi o umieszczenie bazy danych w projekcie osadzonym. Nie jest to również aplikacja typu biznes, w której powszechnie stosowane są większe bazy danych. Projektuję GUI dla pojedynczego użytkownika na pulpicie, aby połączyć się z mikrokontrolerem w celu monitorowania i konfiguracji.


Postanowiłem pójść z SQLite. Możesz zrobić kilka bardzo interesujących rzeczy z danymi, których tak naprawdę nie rozważałem przy pierwszym uruchomieniu tego projektu.

+21

Zawsze korzystam z bazy danych - ta, której szukasz, to prawdopodobnie SQLite na http://www.sqlite.org/. –

+0

Czy czytasz i piszesz lub po prostu czytasz dane? –

+0

Czytając i zapisując, użyje GUI do ustawienia i konfiguracji kontrolera, a także do monitorowania danych w czasie rzeczywistym, gdy kontroler działa. – radix07

Odpowiedz

38

Baza danych jest opłacalne, gdy:

  1. Aplikacja ewoluuje w pewnym postaci danych napędzane wykonanie.
  2. Projektowanie czasu i projektowanie rozbudowy zewnętrznych struktur przechowywania danych o strukturach .
  3. wymiana danych między aplikacjami lub organizacji (w tym indywidualne osób)
  4. danych jest już krótka i proste.
  5. Dane Powielanie

Evolution Data Driven Wykonanie
Gdy dane zmienia ale wykonanie nie jest to oznaką danych napędzane programie lub części programu są dane napędzany. Zestaw opcji konfiguracyjnych jest znakiem funkcji opartej na danych, ale cała aplikacja może nie być sterowana danymi. W każdym przypadku baza danych może pomóc w zarządzaniu danymi. (Biblioteka lub aplikacja do obsługi baz danych nie musi być ogromna jak Oracle, ale może być szczupła i ma sens jak SQLite).

Projekt & rozwój struktur danych zewnętrznych
pytania delegowania przepełnienie stosu o serializacji lub przekształcania drzew i list użycie plików jest dobrym wskaźnikiem program ukończył do korzystania z bazy danych. Ponadto, jeśli spędzasz jakąś ilość czasu, projektowanie algorytmów do przechowywania danych w pliku lub projektowanie danych w pliku to dobry czas na zbadanie wykorzystania bazy danych.

Udostępnianie danych
czy aplikacja jest udostępnianie danych z innej aplikacji, innej organizacji lub innej osoby, baza danych może pomóc. Korzystając z bazy danych, łatwiej jest osiągnąć spójność danych. Jednym z głównych problemów w badaniu problemu jest to, że zespoły nie używają tych samych danych. Klient może użyć jednego zestawu danych; zespół walidacyjny inny i program korzystający z innego zestawu danych. Baza danych ułatwia porównywanie danych i umożliwia jednostkom korzystanie z tych samych danych.

Dane zespolone
Programy rozpoczynają się od małych tabel z zakodowanymi danymi. Zmienia się to w wykorzystanie dynamicznych danych z mapami, drzewami i listami. Czasami dane rozwijają się z prostych dwóch kolumn do 8 lub więcej. Teoria baz danych i bazy danych mogą ułatwić złożoność organizacji danych. Niech baza danych będzie martwić się zarządzaniem danymi i zwolnieniem aplikacji oraz czasu rozwoju. W końcu sposób zarządzania danymi nie jest tak ważny, jak jakość danych i ich dostępność.

danych Powielanie
Często, gdy dane rośnie, jest coraz większa atrakcją dla zduplikowanych danych. Bazy danych i teoria bazy danych mogą zminimalizować duplikację danych. Bazy danych można skonfigurować tak, aby ostrzegały przed duplikacjami.

Przejście do korzystania z bazy danych ma wiele czynników, które należy wziąć pod uwagę. Niektóre obejmują, ale nie są ograniczone do: złożoności danych, powielania danych (w tym części danych), terminów projektów, kosztów opracowania i problemów licencyjnych. Jeśli twój program może działać wydajniej z bazą danych, zrób to. Baza danych może również oszczędzać czas opracowywania (i pieniądze). Istnieją inne zadania, które Ty i Twoja aplikacja możesz wykonywać, niż zarządzać danymi. Zostaw zarządzanie danymi do ekspertów.

+1

Chciałabym móc faworyzować tę odpowiedź ... głównie dlatego, że jest tak ogólna. Nie jestem deweloperem per se, ale mogę użyć tej odpowiedzi, aby pomóc mi zrozumieć, kiedy korzystanie z bazy danych byłoby dobrym pomysłem. Dobrze powiedziane. –

4

Zalecam wprowadzenie bazy danych w aplikacji, aplikacja zyska elastyczność i będzie łatwiejsza w utrzymaniu i ulepszeniu dzięki nowym funkcjom w przyszłości.
Zacznę od lekkiego pliku opartego na bazie danych, takiego jak Sqlite.
z dobrze zaprojektowany db musisz:

  1. Zmniejszone nadmiarowość danych
  2. Większa integralność danych
  3. Lepsza ochrona danych

Last but not least, przy użyciu bazy danych pozwoli Ci zaoszczędzić od Excel import/aktualizacja/eksport Hell!

2

Kiedy masz dużo danych, nie wiesz, jak zostaną wykorzystane w przyszłości.

Na przykład możesz chcieć dodać bazę danych SQLite w aplikacji wbudowanej, która wymaga rejestracji statystyk, na które nie masz pewności, w jaki sposób będzie używana. Później wysyłasz pełną bazę danych do wstrzyknięć w większym na centralnym serwerze i dane te można łatwo wykorzystać, korzystając z żądań.

W rzeczywistości, jeśli celem aplikacji jest "zbieranie danych", posiadanie bazy danych jest koniecznością.

+0

Czasami lepiej jest zrzucić dane po prostu i zbudować bazę danych w innym systemie, który nie ma silnych ograniczeń czasowych. –

3

Widzę sporo wymagań, które dobrze spełniły bazy danych:

1). Zapytania ad hoc. Znajdź wszystkie {X} spełniające kryteria Y

2).Dane o strukturze, która może skorzystać z normalizacji - uwzględnianie wspólnych wartości w osobnych "tabelach". Możesz zaoszczędzić miejsce i zmniejszyć możliwość niespójności w ten sposób. Gdy to zrobisz, te zapytania ad-hoc zaczną być naprawdę przydatne.

3). Duże wolumeny danych. Profesjonalna baza danych bardzo dobrze radzi sobie z dobroczynnym korzystaniem z resoruców, sprytnymi pytaniami i strategiami stronicowania. Próba napisania tych rzeczy jest prawdziwym wyzwaniem.

Najwyraźniej nie potrzebujesz tego ostatniego, ale dwa pozostałe mogą dotyczyć Ciebie.

3

Powody przy użyciu bazy danych:

  • Jednoczesne pisze. Łatwo uzyskać współbieżność w bazach danych
  • Łatwe wysyłanie zapytań. Zapytania SQL są zazwyczaj bardziej zwięzłe niż kod proceduralny do wyszukiwania danych. AKTUALIZACJE, INSERT INTO mogą również wykonywać wiele rzeczy z bardzo małą ilością kodu
  • Integralność. Ograniczenia są bardzo łatwe do zdefiniowania i wymuszane bez pisania kodu. Jeśli masz nie-zerowe ograniczenie, możesz być pewny, że wartość nie będzie pusta, nie musisz nigdzie zapisywać sprawdzeń. Jeśli masz obce ograniczenie klucza, nie będziesz mieć "zwisających referencji".
  • Wydajność na dużych zbiorach danych. Indeksowanie jest bardzo proste, aby dodać do bazy danych SQL

przyczyny nie przy użyciu bazy danych:

  • To wydaje się być dodatkową zależność (choć istnieją bardzo lekki databases- lubię H2 dla Java, na przykład)
  • Dane niezbyt dobrze pasują do schematu relacyjnego. Rzeczy, które są zasadniczo mapami klucz/wartość. XML (chociaż bazy danych często obsługują XPath itp.).
  • Czasami pliki są wygodniejsze. Można je zmieniać, scalać, edytować za pomocą zwykłego edytora tekstu itp. Czasami arkusze kalkulacyjne mogą być bardziej praktyczne (nie trzeba budować edytora - można użyć arkusza kalkulacyjnego)
  • Twoje dane już są gdzieś w innym przypadku
+0

"AKTUALIZACJE, INSERT INTO mogą również wykonywać wiele rzeczy z bardzo małym kodem". A GROUP BY jest praktycznie absurdem, zakładając, że to, co się dzieje, jest tym, czego chcesz :-) –

-2

"W jakim momencie warto korzystać z bazy danych?"

Jeśli i kiedy masz dane do zarządzania?

1

Aby dodać wartość ujemną: nie nadaje się do przetwarzania w czasie rzeczywistym z powodu niedeterministycznego opóźnienia. Byłoby jednak dość obszerne do wyszukiwania i ustawiania parametrów operacyjnych, na przykład podczas uruchamiania. Nie umieszczałbym dostępu do baz danych na krytycznych ścieżkach czasowych.

1

Nie potrzebujesz bazy danych, jeśli masz kilka tysięcy wierszy w jednej lub dwóch tabelach do obsługi w aplikacji pojedynczego użytkownika (dla punktu osadzenia).

Jeśli jest to dla wielu użytkowników (dostęp równoległy, blokowanie) lub potrzeby transakcji, zdecydowanie należy rozważyć bazę danych. Obsługa złożonych struktur danych w znormalizowanych tabelach i utrzymanie integralności, lub ogromna ilość danych byłaby kolejnym wskazaniem, że powinieneś użyć bazy danych.

1

Wygląda na to, że aplikacja działa na komputerze stacjonarnym i po prostu komunikuje się z urządzeniem wbudowanym.

Jako takie korzystanie z bazy danych jest znacznie bardziej realistyczne.Używanie jednego na osadzonej platformie jest znacznie bardziej złożonym problemem.

Na pulpicie wykorzystuję bazę danych, gdy istnieje potrzeba ciągłego przechowywania nowych informacji i potrzeby ich wydobycia w sposób relacyjny. To, czego nie używam baz danych, to przechowywanie statycznych informacji, informacji, które czytałem raz podczas ładowania i to wszystko. Wyjątkiem jest sytuacja, gdy aplikacja ma wielu użytkowników i istnieje potrzeba przechowywania tych informacji dla poszczególnych użytkowników.

To brzmi dla mnie jak zbieranie informacji z urządzenia wbudowanego, przechowywanie go w jakiś sposób, a następnie używanie go później do wyświetlenia za pośrednictwem GUI.

Jest to dobry przypadek użycia bazy danych, zwłaszcza jeśli można tak zaprojektować system, aby istniał demon do gromadzenia danych, który zarządza ciągłą komunikacją z urządzeniem wbudowanym. Ta aplikacja może następnie zapisać dane w bazie danych. Po uruchomieniu GUI można wyodrębnić dane do wyświetlenia.

Korzystanie z bazy danych ułatwi także rozwijanie GUI, jeśli konieczne będzie wyświetlanie różnych widoków, takich jak "pokaż mi wszystkie wpisy między 2 datami". W bazie danych po prostu pytasz o poprawne wartości do wyświetlenia za pomocą odpowiedniego zapytania SQL, a GUI wyświetla to, co wróci, pozwalając oddzielić wiele "logiki biznesowej" od GUI.

2

Nie zapominaj, że odpowiednia baza danych może się różnić w zależności od wymagań (i nie zapominaj, że plik tekstowy może być używany jako baza danych, jeśli wymagania są wystarczająco proste - na przykład pliki konfiguracyjne to tylko specyficzny rodzaj bazy danych). Takie parametry mogą być:

  • liczba rekordów
  • wielkość elementów danych
  • sposób baza danych muszą być współdzielone z innymi urządzeniami? Jednocześnie?
  • jak złożone są relacje między różnymi danymi
  • to tylko baza danych do odczytu (utworzona w czasie kompilacji i niezmieniona, na przykład)?
  • czy baza danych musi być aktualizowana przez wiele podmiotów jednocześnie?
  • Czy potrzebujesz obsługi złożonych zapytań?

Dla bazy danych zawierającej 700 pozycji, może być odpowiednia tablica posortowana w pamięci załadowana z pliku tekstowego. Ale mogłem również zobaczyć potrzebę osadzonej bazy danych SQL lub może mieć dane żądania kontrolera z bazy danych przez połączenie sieciowe w zależności od tego, jakie są różne wymagania (i ograniczenia zasobów).

8

To, co opisujesz, nie brzmi jak typowa aplikacja biznesowa, a wiele z zamieszczonych tutaj odpowiedzi zakłada, że ​​jest to rodzaj aplikacji, o której mówisz, więc pozwól, że przedstawię inną perspektywę.

To, czy korzystasz z bazy danych dla 700 pozycji, zależy w dużej mierze od natury danych.

Powiedziałbym, że około 90% czasu w tej skali, będziesz korzystać z bazy danych lekkiego jak SQLite, pod warunkiem, że:

  1. Dane mogą potencjalnie rosnąć znacznie większe niż to, co opisujesz,
  2. dane mogą być udostępniane przez więcej niż jednego użytkownika,
  3. być może trzeba uruchomić kwerendy danych (które nie sądzę, robisz teraz), a
  4. dane można łatwo opisać d w formie tabeli.

Pozostałe 10% czasu, Twoje dane będą wysoce uporządkowany, hierarchiczny, oparty na obiektach, a nie starannie dopasować do modelu tabeli bazy danych lub tabeli programu Excel. W takim przypadku rozważ użycie plików XML.

Wiem, że twórcy instynktownie lubią wyrzucać bazy danych przy podobnych problemach, ale jeśli obecnie korzystasz z danych Excela do projektowania interfejsów użytkownika (lub wyświetlania ustawień konfiguracyjnych), zamiast wyświetlać rekord klienta, XML może być lepiej dopasowany. XML jest bardziej ekspresyjny niż Excel lub tabele bazy danych i można go łatwo manipulować za pomocą prostego edytora tekstu.

Analizatory składni XML i łączniki danych dla języka C++ to easy to find.

1

Mamy również do czynienia z podobną sytuacją. Mamy zestaw danych pochodzących z różnych konfiguracji testowych, a obecnie jest on pakowany w arkusze Excela, przetwarzane przy użyciu Perla lub VBA.

Okazało się, że ta metoda miała wiele problemów:

i. Zarządzanie danymi za pomocą arkuszy Excela jest dość kłopotliwe. Po pewnym czasie masz dużo arkuszy Excela i nie ma łatwego sposobu na pobranie wymaganych danych z niego.

ii. Ludzie zaczynają wysyłać arkusze Excela tam iz powrotem, aby komentować i przeglądać wiadomości e-mail. E-mail staje się podstawowym trybem zarządzania komentarzami związanymi z danymi. Komentarze te są tracone w późniejszym czasie i nie ma możliwości odzyskania ich.

iii. Tworzy się wiele kopii plików, a zmiany w jednej kopii nie są odzwierciedlane w drugiej - nie ma wersji.

Jest tak z tych samych powodów, dla których zdecydowaliśmy się przejść do rozwiązania opartego na bazie danych i aktualnie nad nim pracujemy. Pozwól mi podsumować, co próbujemy zrobić:

i. Baza danych znajduje się na centralnym serwerze dostępnym przez komputer we wszystkich konfiguracjach testowych.

ii. Wszystkie dane trafiają do tymczasowej lokalizacji (lokalny dysk twardy w plikach) natychmiast po wygenerowaniu. Z plików jest on przekazywany do bazy danych przez proces działający w tle (więc nawet jeśli występuje problem z siecią, dane będą obecne w lokalnym systemie plików).

iii.Posiadamy aplikację internetową, która pozwala użytkownikom logować się i uzyskiwać dostęp do danych w żądanym formacie. Portal pozwoli im dodawać komentarze, generować różnego rodzaju raporty, dzielić się nimi z innymi użytkownikami po sprawdzeniu itp. Będzie również miał możliwość eksportu danych do arkusza Excela, na wypadek, gdyby trzeba go było zabrać ze sobą.

Poinformuj, czy można to lepiej wdrożyć.

2

Nie ma konkretnego punktu, w którym baza danych jest warta zachodu. Zamiast tego zwykle zadaję następujące pytania:

  • Czy ilość danych wykorzystywanych przez aplikację/powoduje wzrost?
  • Czy górny limit wzrostu tych danych jest nieznany (lub niejasny)?
  • Czy aplikacja będzie potrzebowała agregować lub filtrować te dane?
  • Czy możliwe są przyszłe zastosowania danych, które obecnie mogą nie być oczywiste?
  • Czy wydajność pobierania i/lub przechowywania danych jest ważna?
  • Czy jest (lub może być) wielu użytkowników aplikacji, którzy udostępniają dane?

Jeśli odpowiem "Tak" większości z tych pytań, prawie zawsze wybieram bazę danych (w przeciwieństwie do innych opcji, takich jak pliki XML/ini/CSV/Excel/tekstowe lub system plików).

Ponadto, jeśli aplikacja będzie miała wielu użytkowników, którzy mogą jednocześnie uzyskać dostęp do danych, pochylę się w stronę pełnego serwera bazy danych (MySQL, SQl Server, Oracle itp.).

Ale często w przypadku pojedynczego użytkownika (lub małej współbieżności) lokalna baza danych, taka jak SQLite, nie może być pokonana pod względem przenośności i łatwości wdrażania.

Powiązane problemy