Co jest szybsze pod względem wydajności? Utworzenie interfejsu API REST i użycie aplikacji REST API do wykonywania wszystkich interakcji z bazą danych LUB bezpośrednie zapytania do bazy danych (tj. Przy użyciu typowego obiektu używanego przez język do tworzenia zapytań do bazy danych, takiego jak JDBC dla Java)?
Sposób w jaki widzę to z REST:
- Tworzysz obiekt w kodzie, aby wywoływał metodę REST
- Wywołaj metodę http
- Kod wewnątrz interfejsu API REST odpytuje bazę danych
- Baza danych zwraca niektóre dane
- Kod API REST pakuje dane do Jsona i wysyła je do klienta
- Klient otrzymuje odpowiedź Json / XML
- Odwzoruj odpowiedź na obiekt w kodzie
Z drugiej strony, zapytanie bezpośrednio do bazy danych:
- Tworzysz obiekt za pomocą ciągu zapytania do zapytania do bazy danych
- Baza danych zwraca niektóre dane
- Odwzoruj odpowiedź na obiekt w kodzie
Czy to nie znaczy, że używanie interfejsu API REST byłoby wolniejsze? Może zależy to od typu bazy danych (SQL vs NoSQL)?
Odpowiedzi:
Po dodaniu złożoności kod będzie działał wolniej. Wprowadzenie usługi REST, jeśli nie jest wymagana, spowolni wykonanie, ponieważ system robi więcej.
Wyodrębnianie bazy danych jest dobrą praktyką. Jeśli martwisz się o szybkość, możesz zajrzeć do buforowania danych w pamięci, aby baza danych nie musiała być dotykana, aby obsłużyć żądanie.
Zanim jednak zoptymalizuję wydajność, przyjrzę się temu, jaki problem próbujesz rozwiązać i używanej architekturze, staram się wymyślić sytuację, w której opcje bazy danych byłyby dostępem bezpośrednim w porównaniu z REST.
źródło
extra work
. Ale tak naprawdę może to być szybsze przez buforowanie powtarzających się zapytań.Jeśli obawiasz się o szybkość, to tak, usługa odpoczynku będzie wolniejsza z wyżej wymienionych powodów. Jednak szybkość opisanego typu rzadko stanowi główny problem, a jeśli tak, to można go rozwiązać na inne sposoby. Przedwczesna optymalizacja jest źródłem wszelkiego zła .
Zastanów się, czy Twoim głównym celem jest interoperacyjność (mobilna, internetowa, B2B), teraz REST jest bardzo atrakcyjny, ponieważ jest niezależny od technologii.
Załóżmy, że kodujesz bazę danych. Co byś zrobił, gdybyś zmienił swój bazowy magazyn danych. Jak trudno byłoby to zrobić, jeśli jesteś ściśle związany ze sklepem?
Prawdziwa odpowiedź to zależy , ale mam nadzieję, że dałem ci kilka rzeczy do przemyślenia!
źródło
Jeśli trudno jest odpowiedzieć na to pytanie.
Prawidłowa ogólna odpowiedź powinna brzmieć: to zależy.
W twojej myśli jest błąd.
Ten błąd wynika z faktu, że nie w pełni rozumiesz REST i jego zasady. REST nie został wymyślony, ponieważ niektórzy nerdowie uważali, że fajnie (oczywiście jest) wysyłać obiekty Javascript przez HTTP za pośrednictwem drutu. Główną zaletą korzystania z HTTP jest możliwość korzystania z buforowania . Jeśli sprawisz , że wyniki będą buforowane , to do bazy danych będzie mniej żądań. I nie jest zaangażowany żaden marshalling . Odpowiedź może zostać dostarczona bezpośrednio.
O ile odpowiedź na @Klees nie jest całkiem poprawna :
W przypadku wyników z pamięci podręcznej nie ma to wpływu na twoją aplikację: dostarczanie znanych odpowiedzi na znane pytania można uzyskać za pośrednictwem odwrotnych serwerów proxy.
źródło
Wprowadzenie dodatkowej warstwy usług zawsze wiąże się z kosztami złożoności i wydajności. Istnieją pewne specyficzne rodzaje architektury, w których wprowadzenie warstwy usług wspólnych (jak API REST) może poprawić perforację ze względu na buforowanie współdzielone - ale wygląda na to, że nie jest to architektura, którą masz.
Rozważ architekturę, w której masz wiele aplikacji internetowych lub wiele aplikacji komputerowych łączących się bezpośrednio z tą samą bazą danych. Jeśli często wykonują te same zapytania, może to poprawić wydajność buforowania wyników zapytań w usłudze współdzielonej. Zwłaszcza jeśli powiesz, że setki aplikacji komputerowych uzyskują dostęp do tej samej bazy danych bezpośrednio (nie przez aplikację internetową!) I wykonują te same zapytania, może być znaczna poprawa. Jednak nawet w tej architekturze głównym powodem wprowadzenia wspólnej usługi byłyby prawdopodobnie bezpieczeństwo i abstrakcja danych, a nie wydajność.
Ale wygląda na to, że masz jedną aplikację internetową, która łączy się bezpośrednio z bazą danych. W takim przypadku nie ma korzyści z wprowadzenia dodatkowej warstwy usług. Buforowanie, abstrakcja bazy danych itp. Mogą być obsługiwane w warstwie dostępu do danych w tej samej aplikacji.
źródło
To zależy.
Oczywiście im więcej warstw w kodzie, tym wolniej. Ale ... przychodzi moment, w którym bezpośrednia kompleksowa wydajność nie ma tak dużego znaczenia, jak skalowalność. Jeśli 1 użytkownik uzyskuje dostęp do bazy danych na komputerze lokalnym, może ona działać szybko. Jeśli masz tysiąc użytkowników uzyskujących dostęp do tego samego DB na tym samym komputerze, istnieje szansa, że wszyscy się sfrustrują. Rozwiązaniem jest przeniesienie bazy danych do innej skrzynki, dodanie warstwy pośrodku i chociaż dla 1 użytkownika będzie działał wolniej, gdy tysiąc dostępu do niego, pójdzie szybciej. (to uproszczona odpowiedź, ale z zasady prawdziwa).
Istnieją inne powody, aby ukryć swoją bazę danych za warstwą warstwy środkowej, takie jak bezpieczeństwo.
źródło
Nie wiem, gdzie się zgubiłeś, ale jest całkiem jasne, że kiedy używasz interfejsu API REST, robisz dodatkowy krok, a dodatkowy krok „zawsze” oznacza wolniejszy, gdy programowanie jest zaangażowane.
Są plusy i minusy, ale jeśli możesz uzyskać dostęp do bazy danych bezpośrednio z aplikacji, zawsze lepiej jest wywoływać ją bezpośrednio zamiast używać Web API, oczywiście jeśli używasz Web API, możesz łatwo przenieść aplikację na inną platformę.
źródło
ODPOCZYNEK :
Lokalna baza danych:
TO DOSKONAŁA OGROMNA RÓŻNICA, CZĘSTO ZAPOMNIANO TE PUNKTY
źródło