[MSSQL 2000 / MSDE] Select na podstawie TimeStampa
Grzegorz Danowski - 26-01-2006 11:01
[MSSQL 2000 / MSDE] Select na podstawie TimeStampa
Witam!
Projektuję w tej chwili mały system dla przedstawicieli handlowych. Z uwagi na specyfikę pracy handlowca będzie on umożliwiał prace w trybie offline. Chciałbym też, by aktualizacja danych w trakcie połączenia z serwerem centralnym była jak najkrótsza. Aby to zrealizować planuję wykorzystać w selektach wartości pola timestamp, czyli chciałbym, by aplikacja pobierała z serwera tylko te rekordy, których timestamp jest większy od maksymalnej wartości timestamp w DataTable aplikacji klienckiej. Czy takie podejście wiążę się z jakimkolwiek ryzykiem? Na razie nie chciałbym rozważać usuwania rekordów (być może zamiast usuwania, będzie pole z informacją o unieważnieniu rekordu).
Pozdrawiam Grzegorz
=?iso-8859-2?Q?Pawe=B3_Filipiak?= - 26-01-2006 11:01
"Grzegorz Danowski" <gdn__na@serwerze__poczta.onet.pl> wrote in message news:dr8gg4$cka$1@inews.gazeta.pl... [...] > selektach wartości pola timestamp, czyli chciałbym, by aplikacja pobierała > z > serwera tylko te rekordy, których timestamp jest większy od maksymalnej > wartości timestamp w DataTable aplikacji klienckiej. > Czy takie podejście wiążę się z jakimkolwiek ryzykiem? Raczej nie ma ryzyka, timestamp, ze względu na swoją "systemowość" jest pewny. Jedyne sam zapewnić to pobieranie timestampu referencyjnego, czyli "bieżącego" w chwili pobrania danych. Albo max(...) z timestamp każdej tabeli albo @@dbts
> Na razie nie chciałbym rozważać usuwania rekordów (być może zamiast > usuwania, będzie pole z informacją o unieważnieniu rekordu). Na usuwanie niestety nie ma łatwego rozwiązania, tak jak dla insert/update. Unieważnianie poniekąd obchodzi problem, ale pamiętaj, że wówczas liczba wierszy będzie ciągle przyrastać - oszacuj, kiedy przekroczy rozsądne wartości.
-- pozdrawiam, Paweł Filipiak
Grzegorz Danowski - 26-01-2006 11:01
Użytkownik "Paweł Filipiak" <pfilipiak@poczta.fm> napisał w wiadomości news:dr8q2j$nam$1@atena.e-wro.net... (...) >> chciałbym, by aplikacja pobierała z >> serwera tylko te rekordy, których timestamp jest większy od maksymalnej >> wartości timestamp w DataTable aplikacji klienckiej. >> Czy takie podejście wiążę się z jakimkolwiek ryzykiem?
> Raczej nie ma ryzyka, timestamp, ze względu na swoją "systemowość" jest > pewny. Jedyne sam zapewnić to pobieranie timestampu referencyjnego, czyli > "bieżącego" w chwili pobrania danych.
Aplikacja kliencka będzie miała w pobranych danych także kolumnę z timestampem, więc z pobraniem timestampa referencyjnego nie powinno być problemu.
>> Na razie nie chciałbym rozważać usuwania rekordów (być może zamiast >> usuwania, będzie pole z informacją o unieważnieniu rekordu).
> Na usuwanie niestety nie ma łatwego rozwiązania, tak jak dla > insert/update. Unieważnianie poniekąd obchodzi problem, ale pamiętaj, że > wówczas liczba wierszy będzie ciągle przyrastać - oszacuj, kiedy > przekroczy rozsądne wartości.
Usuwanie rekordów powinno być sporadyczne (baza potencjalnych klientów), gdy jednak liczba takich przypadków stanie się problemem, to rekordy te zostaną fizycznie usunięte, a handlowcy skasują wszystkie pliki offline i ponownie zaimportują wszystkie swoje dane (już bez unieważnionych rekordów).
Pozdrawiam Grzegorz
=?iso-8859-2?Q?Pawe=B3_Filipiak?= - 26-01-2006 11:01
Użytkownik "Grzegorz Danowski" <gdn__na@serwerze__poczta.onet.pl> napisał w wiadomości news:dr8v6n$si5$1@inews.gazeta.pl... [...] > Aplikacja kliencka będzie miała w pobranych danych także kolumnę z > timestampem, więc z pobraniem timestampa referencyjnego nie powinno być > problemu.
timestamp ma 8 bajtów, więc jeżeli chcesz maksymalnie ograniczyć przepływ danych staraj się nie pobierać go z każdym rekordem. Oczywiście to już w ramach skrajnej optymalizacji, ale jeżeli napiszesz kilkadziesiąt zapytań postaci select *... ich późniejsze przerabianie na niezbędną listę kolumn może być mało przyjemnie - warto pomysleć o tym wcześniej. Chyba, że takie oszczędności są pomijalne w Twoim rozwiązaniu. No i w takiej sytuacji aplikacja kliencka musi wyliczyc max timestampa, tak, aby następne zapytanie wybrało tylko nowo dodane/zmodyfikowane rekordy - może warto zrzucić to liczenie na bazę.
Generalnie rozwiązanie z timestamp-em może bardzo przyspieszyć ładowanie danych, uzywałem z powodzeniem dla list "wolnozmiennych" - kontrahenci, indeksy materiałowe. Liczba rekordów była rzędu kliku tysięcy, ale dzienne zmiany stosunkowo niewielkie - kilka, kilkanaście góra. Klienci podłączali się do bazy przez najróżniesze łącza, czasami każdy bajt był na wagę policzalnych sekund.
-- pozdrawiam, Paweł Filipiak, gg 2791867
Grzegorz Danowski - 26-01-2006 11:01
Użytkownik "Paweł Filipiak" <pfilipiak@poczta.fm> napisał w wiadomości news:43d87d8a$1@news.home.net.pl... > [...] >> Aplikacja kliencka będzie miała w pobranych danych także kolumnę z >> timestampem, więc z pobraniem timestampa referencyjnego nie powinno być >> problemu. > > > timestamp ma 8 bajtów, więc jeżeli chcesz maksymalnie ograniczyć przepływ > danych staraj się nie pobierać go z każdym rekordem. Oczywiście to już w > ramach skrajnej optymalizacji, ale jeżeli napiszesz kilkadziesiąt zapytań > postaci > select *... ich późniejsze przerabianie na niezbędną listę kolumn może być > mało przyjemnie - warto pomysleć o tym wcześniej. Chyba, że takie > oszczędności są pomijalne w Twoim rozwiązaniu.
Dzięki za radę, zastanowię się nad tym pomysłem. Pozdrawiam Grzegorz
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Zdalny =?ISO-8859-2?Q?dost=EAp_do_MSSQL_bez_zarz=B1dzani?==?ISO-8859-2?Q?a?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
[MSSQL 2k] - jak =?ISO-8859-2?Q?pod=B3=B1czy=E6_serwer_na_?==?ISO-8859-2?Q?porcie_innym_ni=BF_1433=3F?=
MSSQL Express czy Oracle Express
MSSQL 2005 i uruchamianie procedury o =?ISO-8859-2?Q?okre=B6lone?==?ISO-8859-2?Q?j_godzinie?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
[MSSQL 2K] =?ISO-8859-2?Q?Wp=B3yw_ustawie=F1_regionalnych_?==?ISO-8859-2?Q?serwera_na_zapytania?=
Pobierananie danych z innej bazy danych w MSSQL
Migracja MSSQL 2005 CTP na 2005 Express
MSSQL , funkcja pobierajaca sama date (bez czasu) w funkcji
zanotowane.pldoc.pisz.plpdf.pisz.plmelooonka.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|