Wygląda na to, że podjąłeś ważną, krótkoterminową decyzję techniczną dotyczącą przechowywania danych dla swojej aplikacji - zdecydowałeś się napisać niestandardowe narzędzie do zarządzania magazynem danych.
Siedzisz na kontinuum, z opcjami poruszania się w obu kierunkach.
W dłuższej perspektywie prawdopodobnie (prawie, ale nie w 100% na pewno) wpadniesz w kłopoty i lepiej będzie skorzystać z istniejących rozwiązań do przechowywania danych. Istnieją specyficzne, bardzo częste, przewidywalne problemy z wydajnością, z którymi będziesz musiał sobie poradzić, i lepiej jest korzystać z istniejących narzędzi, niż tworzyć własne.
Wygląda na to, że napisałeś (małą) niestandardową bazę danych, wbudowaną i bezpośrednio wykorzystywaną przez twoją aplikację. Zakładam, że polegasz na systemie operacyjnym i systemie plików do zarządzania faktycznym zapisywaniem i odczytywaniem dysku oraz traktowaniem kombinacji jako magazynu danych.
Kiedy robić to, co zrobiłeś
Siedzisz w dogodnym miejscu do przechowywania danych. Magazyn danych systemu operacyjnego i systemu plików jest niezwykle wygodny, dostępny i przenośny na wiele platform. Ta kombinacja istnieje już od tak dawna, że masz pewność, że będziesz obsługiwany i uruchomisz aplikację na prawie każdej standardowej konfiguracji wdrażania.
Jest to również łatwa kombinacja do pisania kodu - interfejs API jest dość prosty i podstawowy, a do jego działania potrzeba stosunkowo niewielu wierszy kodu.
Ogólnie rzecz biorąc, idealnie jest robić to, co zrobiłeś, gdy:
- Prototypowanie nowych pomysłów
- Budowanie aplikacji, których skalowanie i wydajność jest mało prawdopodobne
- Ograniczone przez nietypowe okoliczności, takie jak brak zasobów do zainstalowania bazy danych
Alternatywy
Jesteś na kontinuum opcji i możesz stąd iść w dwóch kierunkach, co uważam za „w dół” i „w górę”:
Na dół
Jest to najmniej prawdopodobna opcja do zastosowania, ale jest tutaj ze względu na kompletność:
Możesz, jeśli chcesz, zejść na dół , to znaczy całkowicie ominąć system operacyjny i system plików i naprawdę pisać i czytać bezpośrednio z dysku. Ten wybór jest zwykle istotny tylko w przypadkach, w których wymagana jest ekstremalna wydajność - pomyśl na przykład o minimalnym / małym odtwarzaczu MP3 , bez wystarczającej ilości pamięci RAM dla w pełni funkcjonalnego systemu operacyjnego lub czegoś takiego jak Wayback Machine , która wymaga niewiarygodnie wydajnej masy operacje zapisu danych (większość sklepów danych kompromisuje wolniejsze zapisy w celu szybszych odczytów, ponieważ jest to o wiele bardziej powszechny przypadek użycia dla prawie wszystkich aplikacji).
W górę
Jest tu kilka podkategorii - nie są one jednak do końca ekskluzywne. Niektóre narzędzia obejmują oba, zapewniając pewne funkcje w każdym, niektóre mogą całkowicie przełączyć się z pracy w jednym trybie do pracy w drugim, a niektóre można nakładać na siebie, zapewniając różne funkcje dla różnych części aplikacji.
Bardziej wydajne magazyny danych
Być może będziesz musiał przechowywać coraz większe ilości danych, wciąż polegając na własnej aplikacji do zarządzania złożonością manipulacji danymi. Dostępna jest cała gama sklepów z kluczowymi wartościami, z różnym zakresem obsługi powiązanych funkcji. Narzędzia NoSQL należą do tej kategorii, podobnie jak inne.
Jest to oczywista ścieżka do zwiększenia, gdy następujące elementy opisują twoją aplikację:
- Niezwykle ciężki jest odczyt
- Nie masz nic przeciwko zamianie wyższej wydajności na niższe (krótkoterminowe) gwarancje spójności (wiele oferuje „ostateczną spójność”).
- „Bezpośrednio” zarządza większością manipulacji danymi i brakiem spójności (w praktyce prawdopodobnie najpierw użyjesz narzędzia innej firmy, ale ostatecznie wprowadzisz to do swojej aplikacji lub do niestandardowej pisemnej warstwy pośredniej) .
- Chcesz masowo skalować ilość przechowywanych danych i / lub zdolność do ich przeszukiwania, przy „względnie prostych” wymaganiach dotyczących manipulacji danymi.
Jest tu trochę miejsca na poruszanie się - możesz wymusić lepszą spójność odczytu, dla wolniejszych odczytów. Różne narzędzia i opcje zapewniają api do manipulacji danymi, indeksowania i inne opcje, które mogą być mniej lub bardziej odpowiednie do łatwego pisania konkretnej aplikacji. Więc jeśli powyższe punkty prawie całkowicie opisują twoją aplikację, możesz być „wystarczająco blisko”, aby pracować z bardziej wydajnym rozwiązaniem do przechowywania danych.
Dobrze znane przykłady: CouchDB , MongoDB , Redis , rozwiązania do przechowywania w chmurze, takie jak Microsoft Azure , Google App Data Store i ECE Amazon.
Bardziej złożone silniki do manipulacji danymi
Rodzina aplikacji do przechowywania danych „SQL”, a także wiele innych, lepiej opisać jako narzędzia do manipulacji danymi niż zwykłe silniki pamięci. Zapewniają one szeroki zakres dodatkowych funkcji, poza przechowywaniem danych, a często nawet więcej niż to, co jest dostępne po stronie sklepu z kluczowymi wartościami. Będziesz chciał pójść tą ścieżką, gdy:
- Absolutnie musisz mieć spójność czytania, nawet jeśli oznacza to, że podejmiesz wydajność.
- Chcesz efektywnie wykonywać bardzo złożone operacje na danych - pomyśl o bardzo złożonych operacjach JOIN i UPDATE, kostkach danych i segmentowaniu itp.
- Nie przeszkadza ci kompromis w zakresie wydajności (wymuszone, stałe formaty przechowywania danych, takie jak tabele, których nie można łatwo i / lub skutecznie zmienić).
- Masz zasoby, aby poradzić sobie z często bardziej złożonym zestawem narzędzi i interfejsów.
Jest to bardziej „tradycyjny” sposób myślenia o bazie danych lub magazynie danych, który istnieje już od dłuższego czasu - więc jest tu wiele rzeczy do zrobienia i często jest dużo komplikacji. Jest to możliwe, choć wymaga pewnej wiedzy i wiedzy oraz pozwala budować proste rozwiązania / unikać dużej złożoności - najprawdopodobniej jednak będziesz używać narzędzi i bibliotek innych firm do zarządzania większością z nich.
Dobrze znanymi przykładami są MySQL , SQL Server , baza danych Oracle i DB2 .
Zlecić pracę na zewnątrz
Istnieje kilka nowoczesnych narzędzi i bibliotek innych firm, które współdziałają między narzędziami do przechowywania danych a aplikacją, aby pomóc Ci zarządzać złożonością.
Próbują początkowo zabrać większość lub całość pracy związanej z zarządzaniem magazynami danych i manipulowaniem nimi, a idealnie pozwalają na płynne przejście do złożoności tylko wtedy, gdy jest to wymagane. Jest to aktywny obszar przedsiębiorczości i badań, z kilkoma ostatnimi wynikami, które są natychmiast dostępne i przydatne.
Dobrze znanymi przykładami są narzędzia MVC ( Django , Yii ), Ruby on Rails i Datomic . Trudno tu być uczciwym, ponieważ istnieją dosłownie dziesiątki narzędzi i bibliotek, które działają jak opakowania wokół interfejsów API różnych magazynów danych.
PS: jeśli wolisz filmy wideo niż tekst, możesz obejrzeć niektóre filmy związane z bazą danych Richa Hickeya; robi dobrą robotę, wyjaśniając większość myślenia związanego z wyborem, projektowaniem i używaniem magazynu danych.