Localhost a zewnętrzna baza

0

Witam,

Napotkałem na taki oto dzisiaj problem. Moja aplikacja bazuje głównie na bazie danych i pobiera dość spore ilości zamówień z niej, a dokładniej z dwóch sklepów. Sprawa wygląda tak, że do tej pory wszystko robiłem na localhoście, umieściłem tam bazy i na nich testowałem. Wszystko działało fajnie sprawnie.

Dziś natomiast podłaczyłem się z bazami, które są w firmie (dostęp poprzez VPN). Efekt - baaaardzo wolne działanie. Musze odczekać dobre kilkanaście sekund zanim pobiorą się wszstkie dane, gdzie na localhoscie trwało to mniej niż sekundę. Czy to normalne? Gdy to zobaczyłem to obawiam się że mam strasznie zrypaną optymalizację, chociaż wątpię w to, żeby aż taka różnica była przez to. Co o tym myślicie? Może to ten cały VPN tak obciąza, że jest taki wolny dostęp?

0

to co tam pobierasz?
nie ma sensu pobierać listy tysięcy zamówień jeżeli użytkownik i tak przejrzy tylko kilkanaście
zazwyczaj szuka konkretnego zamówienia więc z bazy trzeba pociągnąć tylko jeden rekord

natomiast jeżeli chcesz robić jakieś statystyki to zazwyczaj robi się hurtownię danych i przetwarzanie danych na serwerze bazodanowym. Gotowy raport jest do wyświetlenia powiedzmy raz dziennie

0

Mam podział za zamówienia niezrealizowane, zrealizowane i anulowane. Tych niezrealizowanych jest mało. Ale zreazliwanych już trochę jest i trochę to trwa. Ale tu już nawet nie chodzi o ilość, bo na localhoscie śmiga. Tylko czy VPN aż tak bardzo to wszystko spowalnia?

0
XardasLord napisał(a):

Ale zreazliwanych już trochę jest i trochę to trwa.

Trochę to jest ile? 100k, 1kk, 10kk ?

0
Vardamir napisał(a):

Trochę to jest ile? 100k, 1kk, 10kk ?

Aż tyle to nie :P Prawie 2000

Dodam może informacje, które mogą być przydatne:
Rozmiar jednej bazy - 9MB
Rozmiar drugiej bazy - 6MB
Ilość zwracanych rekordów w moim zapytaniu - +-2000
Ping przez VPN - 70-180ms

2
XardasLord napisał(a):

Rozmiar jednej bazy - 9MB
Rozmiar drugiej bazy - 6MB
Ilość zwracanych rekordów w moim zapytaniu - +-2000
Ping przez VPN - 70-180ms

baza 100 GB jest uważana za małą - 9MB to można w całości pobrać na dysk przy uruchomieniu

ilość zwracanych rekordów jest problemem - 2000 rekordów to trochę dużo - jeszcze podaj rozmiar pojedynczego rekordu
załóżmy że jeden rekord ma 200 bajtów (opis, komentarze, nazwiska, parę liczb 8 bajtowych jeśli to zamówienie) to daje prawie +- 0,5 MB do przesłania przez Internet. Upload zazwyczaj ma się gorszy niż download i bywa że łącze 100 Mbps dl ma 0,5 Mbps uploadu - wtedy te 0,5 MB będzie się przesyłać przez 8 sekund
Jeżeli zapytań jest więcej to ping też może mieć znaczenie, ale zazwyczaj wysyła się jedno zapytanie więc nie powinno być z tym problemu

Dorób stronicowanie, wyszukiwarkę do swoich danych. Nikt nie potrzebuje widzieć na raz 2000 rekordów
Ładowanie w tle też może uprzyjemnić pracę - ogólnie z tego co piszesz to aplikacja napisana po linii najmniejszego oporu i raczej do przepisania

0

Ogólnie sprawa wygląda tak, że po pobraniu danych z bazy, sprawdzam jeszcze za pomocą for eacha KAŻDY rekord (sprawdzam poprzez połączenie się do kolejnej bazy, bazy aplikacji, również tam na serwerze, więc tak teraz patrzę że tego jest od cholery ... ). Każdy rekord to każde nowo otwarte połączenie, pobranie wartości o ile istnieje i zamknięcie. I tak dla każdego rekordu. I to zapewne tyle czasu zajmuje... A sprawdzam to ponieważ zamówienia te powiązane są właśnie z tą inną bazą (po prostu sprawdzam kto dane zamówienie obsłużył, w wielkim skrócie).

EDIT:
Długi czas oczekiwania (około 20 sekund) pojawia się przy takiej sytuacji dla ~400 rekordów

1

Najwięcej czasu zapewne zajmuje otwieranie i zamykanie połączeń. Zrób to na jednym połączeniu.

1
somekind napisał(a):

Najwięcej czasu zapewne zajmuje otwieranie i zamykanie połączeń. Zrób to na jednym połączeniu.

Rzeczywiście, zrobiłem teraz po prostu trochę inaczej, mam jedno zapytanie w którym przypisuję sobie do listy to co mi potrzeba z bazy. I potem już tylko na datagridview operuje i na tej liście, a nie na bazie :) Super sprawa i od razu meega postęp czasowy

1 użytkowników online, w tym zalogowanych: 0, gości: 1