• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Architektura aplikacji webowej - baza danych

0 głosów
49 wizyt
pytanie zadane 18 maja w JavaScript przez niku990 Nowicjusz (120 p.)

Cześć. Planuję budowę apki internetowej pobierającej, przetwarzającej i wyświetlającej dane.  Pracowałem głównie nad małymi projektami typu CRUD itp., które nie wymagają jakiś mega zasobów. Przy obecnym projekcie natknąłem się na problem z zbyt długimi zapytaniami do bazy, ze względu na dużą ilość wierszy.

Głównie siedzę w JS, więc backend powstanie w node.js, front prawdopodobnie w next.js

Niewykluczone że projekt w przyszłości przejdzie na model komercyjny, więc nexta chciałbym użyć, aby poprawić SEO (wszystkie statyczne treści np SSG + doczytywać dynamicznie z api)

Głównym założeniem jest analiza danych ,,realtime". Przez api do bazy regularnie będzie napływać sporo danych. Problem pojawia się w chwili gdy chcę te dane przeanalizować i wyświetlić użytkownikowi.

Przykład: Tabela ma 5mln wierszy.

Użytkownik na front'endzie klika w swój profil i wybiera id innego użytkownika. Wyświetla mu się liczba relacji z danym użytkownikiem (1 relacja = 1 wiersz).

Przez api do bazy danych leci zapytanie o ilość wierszy w których id1=uzytkownik1, id2=użytkownik2. Niestety takie zapytania trwają zbyt długo. Jeśli użytkownik zmieni parametry, to znów czeka aż system to przemieli. Gdy takie zapytania równolegle wykona kilku użytkowników, to responsywność totalnie leży.

Myślałem nad małą instancję tylko do analizowania danych i wrzucania w osobną tabelę, wtedy czytanie z tego jest mega szybkie, bo mamy od razu gotowy wynik. Jednak problematyczne w tym przypadku jest to, że dane się ciągle zmieniają, po drugie, gdy np. 1000 użytkowników ma relacje każdy z każdym, to mamy ~1mln różnych relacji.

Co do baz danych, mogę skorzystać z mysql, postgre i mongodb. W optymalizację baz danych to jakoś bardzo się nie zagłębiałem, jedynie podstawowe rzeczy typu indeksowanie (sql)

Jakieś porady dotyczące architektury? jak się za to zabrać, aby nie uwalić całej wydajności na samej bazie danych. Pomijam też drogie rozwiązania typu ,,google bigtable". Jestem otwarty na wszelkie pomysły powiązane z JS (programuję w tym języku, więc np. poznanie kolejnego frameworka to nie problem), a może powinienem wybrać całkowicie inny tech stack?

2
komentarz 18 maja przez rafal.budzis Szeryf (77,170 p.)
Mogę podpowiedzieć coś więcej odnośnie wydajności MySQL Musiał byś tylko pokazać strukturę tabel. Warto też wykonać obecne zapytanie z EXPLAIN na początku. Dowiesz się co MySQL robi i czy używa indeksów. Może wystarczy dodać nowe indeksy. lub zmienić typy kolumn.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+3 głosów
1 odpowiedź 111 wizyt
0 głosów
1 odpowiedź 100 wizyt
pytanie zadane 8 stycznia 2021 w PHP przez par4agon Początkujący (430 p.)
0 głosów
1 odpowiedź 180 wizyt

88,328 zapytań

136,921 odpowiedzi

305,575 komentarzy

58,599 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...