2011-09-05 15 views
7

Mam dużą bazę klientów, zaimplementowaną w serwerze sql 2005. Każdy klient ma szerokość i długość geograficzną, reprezentowaną jako Decimal(18,15). Najważniejszą wyszukiwane w bazie próbuje znaleźć wszystkich klientów bliskie pewnym miejscu tak:Jak dobry jest typ danych geograficznych w serwerze sql 2008?

(Addresses.Latitude - @SearchInLat) BETWEEN -1 * @LatitudeBound AND @LatitudeBound) 
AND ((Addresses.Longitude - @SearchInLng) BETWEEN -1 * @LongitudeBound AND @LongitudeBound) 

Tak, jest to bardzo prosta metoda. @LatitudeBound i @LongitudeBound to tylko liczby, które służą do wycofania wszystkich klientów w prostokącie otaczającym punktu @SearchInLat, @SearchInLng. Po uzyskaniu wyników na komputerze-kliencie niektóre wyniki są odfiltrowywane, więc istnieje krąg ograniczający, a nie prostokąt. (Robi się to na komputerze klienckim, aby uniknąć obliczania pierwiastków kwadratowych na serwerze.)

Ta metoda działa dobrze w przeszłości. Teraz jednak chcemy sprawić, by wyszukiwanie stało się bardziej interesujące - na przykład zwiększenie liczby wyników może być bardziej przewidywalne lub aby użytkownik dynamicznie zwiększył rozmiar promienia wyszukiwania. Aby to zrobić, szukałem możliwości ugprading do serwera sql 2008, z jego Geograficznym typem danych, indeksami przestrzennymi i funkcjami odległościowymi. Moje pytanie brzmi: jak szybko są te?

Zaletą prostego zapytania, które mamy w danym momencie, jest to, że jest bardzo szybki i nie wymaga dużej wydajności, co jest bardzo ważne, ponieważ jest bardzo często nazywane. Jak szybko zapytanie oparte na czymś takim:

SearchInPoint.STDistance(Addresses.GeographicPoint) < @DistanceBound 

Być przez porównanie? Czy indeksy przestrzenne działają dobrze i czy szybkość STD jest szybka?

Odpowiedz

8

Jeśli posługujesz się tylko zwykłą parą Lat/Lng, tak jak opisujesz, a wszystkie twoje działania są prostą weryfikacją, to prawdopodobnie Twoja zamiar nie zyska zbyt wiele na zwiększeniu prędkości dzięki użyciu Geometry Type.

Jednakże, jeśli chcesz uzyskać więcej przygód, jak to określisz, to zamiana na użycie typów geometrii otworzy przed Tobą cały świat nowych możliwości, a nie tylko dla wyszukiwań.

Na przykład (w oparciu o projekt, nad którym pracuję) można (jeśli są to dane z Wielkiej Brytanii) pobrać definicje wielokątów dla wszystkich miast/wsi/miast dla danego obszaru, a następnie wykonać odnośniki do wyszukiwania w konkretne miasto, lub gdybyś miał mapę drogową, możesz znaleźć klientów, którzy mieszkali przy głównych trasach dostawczych, autostradach, drogach pierwotnych wszelkiego rodzaju rzeczy.

Można również wykonać bardzo fantazyjne raportowanie, wyobrazić sobie mapę miast, w której każdy kontur został naniesiony na mapę, a następnie zacieniowany kolorem, aby pokazać gęstość klientów w danym obszarze, a prosta geometria SQL łatwo zwróci liczyć prosto z bazy danych, aby wykreślić tego rodzaju informacje.

Następnie śledzenie, nie wiem, jakie dane obsługujesz lub dlaczego masz klientów, ale jeśli dostarczenie czegokolwiek, podanie współrzędne furgonetki dostawczej, powie ci, jak blisko jest do danego klient.

Pytanie dotyczy STDistance szybko? cóż, trudno to powiedzieć naprawdę, myślę, że lepszym pytaniem jest "Czy to jest szybkie w porównaniu do .....", trudno powiedzieć tak lub nie, chyba że masz coś, z czym można to porównać.

Spatial Indexes to jeden z głównych powodów przenoszenia danych do geograficznie świadomej bazy danych, która jest zoptymalizowana pod kątem uzyskania najlepszych wyników dla danego zadania, ale jak w przypadku każdej bazy danych, jeśli utworzysz złe indeksy, otrzymasz złą wydajność .

Generalnie powinieneś zdecydowanie zauważyć wzrost prędkości, ponieważ matematyka w sortowaniu i indeksowaniu jest bardziej świadoma celu danych, a nie tylko jest dość liniowa w działaniu, jak normalny indeks.

Pamiętaj również, że im mocniejszy jest serwer SQL, tym lepsze wyniki uzyskasz.

Ostatnim punktem, o którym należy wspomnieć, jest zarządzanie danymi, jeśli korzystasz z bazy danych obsługującej GIS, to otwiera to drogę do użycia pakietu GIS, takiego jak ArcMap lub MapInfo, do zarządzania, poprawiania i wizualizowania danych, co oznacza poprawki są bardzo łatwe do zrobienia poprzez wskazanie, kliknięcie i przeciągnięcie.

Moja rada brzmi: utworzyć tabelę obok siebie do istniejącej, sformatowaną dla operacji przestrzennych, a następnie napisać kilka zapisanych procesów i wykonać kilka testów czasowych, zobaczyć, który z nich wychodzi najlepiej. Jeśli masz znaczny wzrost tylko na podstawowych operacjach, które wykonujesz, to tylko na uzasadnienie, jeśli jest prawie równa, to twoja decyzja naprawdę zależy od tego, jaką nową funkcjonalność chcesz osiągnąć.

Powiązane problemy