Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

.NET, koncept rada sa bazama

[es] :: .NET :: .NET Desktop razvoj :: .NET, koncept rada sa bazama

[ Pregleda: 1747 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6279

Sajt: pedja.supurovic.net


+1571 Profil

icon .NET, koncept rada sa bazama02.01.2009. u 11:22 - pre 186 meseci
"Ceo zivot" ozbiljne aplikacije radim u Delphi-ju. Sada treba da radim jedan projekat u C# na .NET.

Dosta mi je tesko da svarim .NET logiku rada sa bazama. Mislim, nisam glup, razumem sta je nekonektovan i konektovan rezim, ali meni treba da napravim apliakciju koja radi na klasican nacin sa "zivim" (konkurentnim pristupom bazi sa vise radnih stanica u lokalnoj mrezi.

Nikako ne mogu da uklavirim kako se to radi. Moze li neko da mi u kracim crtama rasvetli stvar?

Dakle, zahtev je prilicno jednostavan: na tri racunara u mrezi treba da se vrti isti program povezan na jednu bazu, i kada neko na jednom racunaru unese neki podatak ta izmena treba da se odmah vidi na drugim racunarima i obrnuto.

Takodje, posto se radi o nekim tabelama koje imaju ogroman broj podataka, ne zelim da se svi podaci prebace na klijenta pa da on tada sa njima barata, vec da klijent uzme sa servera samo onoliko podataka koliko mu je potrebno da ih prikaze (recimo u gridu) a ako korisnik skroluje grid da po potrebi ucitava ostale slogove.

Nekim tabelema je primarni kljuc autoincrement i treba da, kada neko unese novi slog, taj slog dobije kljuc u skladu sa onim sto se unosi i na drugim racunarima, a ne neki interni.

 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: .NET, koncept rada sa bazama02.01.2009. u 13:01 - pre 186 meseci
Ne brini, nisi poludeo, jednostavno to ne moze Sa prelaskom iz ADO u ADO.NET ukinut je dinacki client pesimistic kurzor. Microsoft je zakljucio da ti, ja, pera, zika i mika nemamo pojma o programiranju i ukinuo nam je mehanizam kojim smo mogli da kocimo bazu Sto je najgore u pravu su, lose odradjeni dinamicki kurzori su glavna prepreka skaliranju aplikacije kako vertikalno tako i horizontalno i uzrocnik mnogih deadlock situacija. Mene je to uzasno nerviralo u pocetku ali se brzo naviknes, a za ono malo situacija gde mi je trebao pesimistic locking koristio sam stored procedure.

Citat:
Dakle, zahtev je prilicno jednostavan: na tri racunara u mrezi treba da se vrti isti program povezan na jednu bazu, i kada neko na jednom racunaru unese neki podatak ta izmena treba da se odmah vidi na drugim racunarima i obrnuto.

Generalno ne postoji efikasan nacin da emuliras dinamicki kurzor u .NETu, jedini nacin je da periodicno ucitavas nove/promenjene podatke koristeci timestamp kolonu i mergujes sa radnim dataset-om ako je npr MAX(timestampcol)>tvogmaxucitanog, glavno pitanje medjutim je koliko ti je automatski reload vazan? Sve .NET komponente se uglavnom baziraju na tome da rade sa offline podacima na koje su bindovani i samim tim su veoma 'liberalne' u svom pristupu podacima, tj nista ne kesiraju vec uvek vuku podatke iz izvora, sto bi za dinamicke kurzore znacilo drastican pad performansi i jos gori locking nightmare.
Izuzev povratka na ADO nema nacina da ovo odradis automatski i osudjen si na disconected optimistic concurrency.

Citat:
Takodje, posto se radi o nekim tabelama koje imaju ogroman broj podataka, ne zelim da se svi podaci prebace na klijenta pa da on tada sa njima barata, vec da klijent uzme sa servera samo onoliko podataka koliko mu je potrebno da ih prikaze (recimo u gridu) a ako korisnik skroluje grid da po potrebi ucitava ostale slogove.

Ovo mozes da izvedes i kroz dodatne select komande u dataadapteru, a ako koristis Linq to SQL vec imas podrsku za to kroz Skip() i Take() metode koje rade savrseno. Poenta je da imas formiran SELECT koji parametrizovano ucitava podatke od do nekog kriterijuma, mada je implementacija ovoga u gridu iskreno mucenje. Ja npr za te svrhe koristim 3rd party 'huge dataset' proizvode, narodski poznatije kao 'virtual mode datasets'. Kosta nesto para ali radi posao npr koristio sam ga za prozor u tabelu sa nesto malo jace od 1.8mil redova i radilo je ultra brzo i ucitavalo samo one podatke koji se prikazuju i sve je izgledao "dinamicki" iako je u pozadini dataset odradjivao on-demand offline ucitavanje.

Citat:
Nekim tabelema je primarni kljuc autoincrement i treba da, kada neko unese novi slog, taj slog dobije kljuc u skladu sa onim sto se unosi i na drugim racunarima, a ne neki interni.

Linq to SQL i EF to resavaju automatski u pozadini, na DataSet-u se to resava tako ste se na ID polju postavi seed i increment na -1, tako da ce novi redovi u DS-u dobijati kljuceve -1, -2, itd i nece se klati sa realnim kljucevima iz tabele, a kad se uradi insert adapter ce ignorisati ID polje i posle inserta ce ucitati novokreirani red koji ima novi realni ID.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Djoks
Djordje Najdanovic
Software Developer
Azalea Maritime

Član broj: 1630
Poruke: 268
78.155.41.*

Sajt: www.azalea-maritime.com


Profil

icon Re: .NET, koncept rada sa bazama03.01.2009. u 11:04 - pre 186 meseci
Citat:
Predrag Supurovic:Dakle, zahtev je prilicno jednostavan: na tri racunara u mrezi treba da se vrti isti program povezan na jednu bazu, i kada neko na jednom racunaru unese neki podatak ta izmena treba da se odmah vidi na drugim racunarima i obrnuto.

Takodje, posto se radi o nekim tabelama koje imaju ogroman broj podataka, ne zelim da se svi podaci prebace na klijenta pa da on tada sa njima barata, vec da klijent uzme sa servera samo onoliko podataka koliko mu je potrebno da ih prikaze (recimo u gridu) a ako korisnik skroluje grid da po potrebi ucitava ostale slogove.

Nekim tabelema je primarni kljuc autoincrement i treba da, kada neko unese novi slog, taj slog dobije kljuc u skladu sa onim sto se unosi i na drugim racunarima, a ne neki interni.


Došlo doba da se .NET proba. ;)

Od izlaska SQL Servera 2005 na raspolaganju imaš: "query notification" gdje klijent biva obaviješten kada nastane kritična promjena podataka u bazi na serveru. Dakle - klijent učita određeni dio podatka u keš, prikazuje podatke na ekranu i ne zahtijeva učitavanje novih podataka u keš dok se nije desila promjena u bazi (bez obzira odakle ona došla).

Ovo je zgodno za, recimo, aplikacije koje barataju podacima sa berze u "realnom vremenu".

Imaš primjer za implementaciju na: http://www.simple-talk.com/sql...g-sql-2005-query-notification/

Kroz SQL Server Notification Servis možeš, takođe, biti obaviješten i kada (recimo): cijena proizvoda X premaši Y i sl. Baci oko na: http://technet.microsoft.com/en-us/library/aa226909(SQL.80).aspx

Što se tiče drugog dijela pitanja - već imaš podršku za to. Iz baze se u grid učita minimalno neophodan dio podataka da bi se grid ispunio, i kako se pomjeraš kroz grid - iz baze se dinamički učitava ono što treba da se prikaže na ekranu. Wizard će te sam dovesti do ove tačke kroz LINQ to SQL -> GridControl.

Ako imaš zaista ogroman broj podataka kojim barataš u gridu, i ako korisnik treba da vrši filtriranje/sortiranje/uređivanje podataka kroz grid - onda razmisli o kontrolama tipa Devexpress xtra Grid koje su optimizovane za "Server Mode" režim (primjer: http://tv.devexpress.com/XtraGridLinqServerMode02.movie ).
 
Odgovor na temu

perun85
Republika Srpska

Član broj: 185562
Poruke: 116
79.143.174.*



Profil

icon Re: .NET, koncept rada sa bazama04.01.2009. u 20:15 - pre 186 meseci
Moje pitanje je vezano za autoincrement ID polje u tabeli.

Za cuvanje podataka u aplikaciji koristim strongly typed DataSet u kome imam dve tabele Racun i Stavke. Ove tabele su povezane preko kolone idRacuna. Pri snimanju podataka u DataSet dolazi do problema. Posto se podaci ne snimaju odmah u bazu, ne znam kako da referenciram odredjenu stavku na odredjeni red u tabeli racun. Ukoliko bi se taj racun stampao, ne bi bio poznat ni njegov redni broj u bazi u datom trenutku, sto naravno predstavlja problem. Kojim mehanizmom se resavaju slicni problemi u .NETu?

[Ovu poruku je menjao perun85 dana 05.01.2009. u 18:31 GMT+1]
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: .NET, koncept rada sa bazama

[ Pregleda: 1747 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.