Newsgroup: it.comp.lang.visual-basic
Titolo: [? lungo] Traffico di rete in un app C/S

allora...mi spiego meglio......
ho un applicazione che usava un database Access in rete LAN.......
poi ho convertito il tutto usando ADO, e facendo usare SQL Server come
database, ottimizzando alcune procedure trasferendole sul server con stored
procedure, query più veloci e così via........
fino ad oggi il mio SQL girava sempre e comunque in rete LAN, perciò non
avevo grossi problemi di velocità di rete....
adesso invece il mio SQL è installato presso un provider, perchè il database
utilizzato dal mio applicativo contiene dei dati che verranno utilizzati da
IIS,ASP e altro per creare un sito web dinamico.........
in questo modo, il sito web pubblicherà sempre dati aggiornati in tempo
reale........
il problema è questo: se si usa ADSL o bande larghe, il mio programma è
accettabile.
Quando invece si usa un modem, il traffico di rete inviato e ricevuto dal
server è molto lungo. Il salvataggio di un record, la generazione di stampe,
l'apertura di una combo-box comporta sempre e comunque un dialogo con il
server, che è tutto in Internet......
come posso "misurare" in maniera affidabile i byte ricevuti/trasmessi dal
mio app?
più che altro per cercare di capire dove sono i colli di bottiglia più
disastrosi...............
per ottimizzare ove possibile......
nel dettaglio, ad esempio, è possibile rispondere ad una domanda del
tipo:"quanti byte vengono inviati dopo un .Update del recordset?"
oppure "per riempire una combo-box, io leggo tutti i record della tabella
Anagrafica. Quanti byte vengono spediti dal server fino al mio client?"
ecco.....spero di ricevere qualche dritta in merito......
grazie a chiunque....
buon lavoro!!!
--
Damiani Liborio Igor
idam...@hotmail.com
 - 
igor.d...@light.it
http://www.igordamiani.it
ICQ : 11847262

 ha scritto nel messaggio
news:9nn48b$s2k$1...@fe2.cs.interbusiness.it...
CUT
io penso:
se hai installato il tuo db presso un provider il collo di bottiglia più
evidente può essere li...
il tuo db sarà certamente tuo... ma la macchina su cui gira sqlserv sarà
sicuramente a disposizione di altri utenti...quindi il server dovrà essere
ottimizzato molto bene fra tutti gli utenti (oltre ad essere una poderosa
macchina ...sopratutto per quanto riguarda la memoria sia ram che HD...)
altro problema è la banda che il provider ti mette a disposizione che
influenza la risposta (ma non sembra questo il caso)...quindi molto dipende
dal grado di preparazione e dalla qualità del provider...
io non credo dipenda da te...nel senso che se hai programmato in ASP il tuo
applicativo tutta l'elaborazione risiede sul server del provider...per
assurdo tutti gira ed è usufruibile anche su un 486 (se è programmato
bene!)...
scusa se mi permetto di ricordarti che il vantaggio delle stored è proprio
quello di trasferire il carico dal client al server.
Normalmente se hai tutto sul server che comunichi al client?solo le info da
visualizzare e richiedi solo i dati da aggiornare (lapalissiano!)
Non è che ti è scappato un  cursore locale(non credo comunque..)?ossia
ADUseClient ?
Credo poi che la lentezza nell'invio non sia superabile ossia:
quando invii un form contenete i tuoi dati materialmente il file deve
passare sulla rete.... e via modem il secondo dell'adsl diventa i 4 o più
dell'analogico che è molto più influenzato dell'adsl dalla linea...se i dati
sono tanti (penso ad un form di inserimento dati) spezzalo in 2-3 form
all'utente sembrerà più veloce l'introduzione.
Secondo me poi (salvo casi estremi) non è profiquo agganciare una intera
tabella ma lavorare sempre su SELECT il più possibile mirate...esempio
invece di un unico listone dei clienti un zona (frame,form,tabella) dove
cerchi i clienti,oppure tutte le lettere dell'alfabeto e clikkando su esse i
clienti che cominciano con quella lettera...sono cazzate ma accorciano in
maniera impressionante i tempi!

 ha scritto nel messaggio news:V9Gn7.168407
CUT
dimenticavo:
ciao e scusa se non ti sono stato d'aiuto nello specifico!
:-)

Allora...
Se usi windows 9X puoi usare il monitor di sistema
Se usi win2K usa l'iconcina della connessione di rete... :)
                        Ciao
                                    Allanon

 wrote in message
news:9nn48b$s2k$1...@fe2.cs.interbusiness.it...


il mio problema non è tanto nell'applicazione ASP, che deve ancora essere
creata......
quando nel programma VB già esistente.........cioè, volevo cercare di
ottimizzarlo per la Rete, visto che deve andare a colloquiare direttamente
con un server SQL in Internet.....capito?
io volevo cercare di capire quanti byte vengono spostati durante le comuni
operazioni che vengono svolte dal mio programma. Il discorso è questo.....
l'azienda per cui ho creato questo software ha un abbonamento flat ADSL con
un limite di x Mbyte al mese (che ora non ricordo). Adesso loro usano questo
abbonamento solo per navigare e per la posta elettronica.....al massimo per
scaricare qualche file dalla rete e così via.......
in un prossimo futuro invece anche il mio programma comincerà a produrre
traffico sulla rete (per i motivi che ho detto prima, cioè la presenza di un
server SQL ad un indirizzo IP fisso); però il cliente ha obiettato, nel
senso che è preoccupato che, a forza di usare il mio programma tutto il
giorno, potrebbero uscire dal limite consentito
dall'abbonamento.........capito?
allora sono alla ricerca di un sistema per valutare/testare il traffico di
rete che il mio programma produce.......
quanti byte ci vogliono per salvare un'anagrafica,
quanti byte ci vogliono per generare la stampa del calendario,
quanti byte occorrono per passare da una scheda servizio all'altra.....
e cose del genere.......
tutto qua......
lo so che è un po' strano e magari insolito, però la problematica è
questa!!!!
buon lavoro, e grazie dell'interessamento, Wodka4U......


Scusa la risposta OT .. ma come hai fatto ad accedere ad un DB remoto
(quindi non in LAN giusto ?) senza usare ASP ?
Hai messo SQLS in Ftp e nel datasource della connection string hai dato
l'indirizzo ftp ? cosě funziona ?
Saluti


[...]
La prima e più importante cosa, secondo me, è usare il profiler e il query
analizer di sql server, che sono fatti proprio per questo scopo.
Il profiler documenta tutto il traffico sql, i record, le query eseguite, e
può permetterti di fare un'analisi molto minuziosa di quello che succede, e
degli eventuali colli di bottiglia.
Il query analizer, con il query plan attivato, ti permette di vedere quali
sono i colli di bottiglia nell'sql che esegui. Non è attinente con il
traffico in rete, ma certamente ti permetterà di migliorare in generale le
prestazioni dell'applicazione.
Piuttosto spero che tu abbia un collegamento ad Internet ridondante, con
almeno un paio di provider, o almeno che la tua applicazione non sia
mission-critical, perchè altrimenti come fai quando ti va giù il
collegamento con il provider?
Ciao
Alfonso

giorno, potrebbero uscire dal limite consentito
Senza offesa, ma un'azienda che si preoccupa di pagare 20 lire al
megabyte per l'uso di una linea *per lavoro* e' un'azienda da 2 soldi
--o di polli, se preferisci--. Cerca di spiegarti bene con loro
perche' non e' quello il problema di spesa nelle aziende.
Anche perche' chi si lamenta non e' che poi scarica mp3 con winmx? =)
A parte le facili ironie, quando invii una richiesta di dati e ricevi
indietro solo quelli --poi li gestisci in locale e crei le maschere di
visualizzazione in locale--, hai fatto quello che puoi. Meno dei soli
dati non puoi trasmettere.
Non penso che tu abbia fatto la meravigliosa cosa che ha fatto Harvard
con il mio gestionale: l'elaborazione viene fatta tutta sul server,
che ti manda indietro i dati, i quali vengono visualizzati su maschere
che vengono prese direttamente --un'altra volta-- dal server.
Saluti.
-- 
      Gianni "bugbarbeq" Rondinini, 25, RA, 242, 152
  VBR - Vero Birro Romagnolo®, diffidate dalle imitazioni!
 Opel/ECC Calibrezio EVO-VI --- Kawasaki "Gas Gas" ZZ-R 1100
 ICQ# 36893168 - IRCNet: bugbarbeq, @ on #linux-it & #NetBSD
   On contrary of popular belief, Unix *IS* user friendly:
    it just appears to be selective who it is friend with

no, non direi.......
:-)))
praticamente imposto la ConnectionString della connessione ADO a una cosa
del tipo:
Provider=SQLOLEDB.1;Persist Security Info=False;User ID=USERNAME_DB;Initial
Catalog=NOMEDB;Data Source=INDIRIZZO_IP;PWD=PASSWORD_DB
vado a sostituire l'IP con quello che serve a me (che deve essere pubblico),
poi il nome del database a cui accedere, con le relative username e
password.........
ciao, e good coding!!!


 ha scritto nel messaggio
news:9nn48b$s2k$1...@fe2.cs.interbusiness.it...

Alle risposte che già ti sono giunte aggiungerei solo due precisazioni:
1) Disegnare un applicativo che acceda a database via internet è ancora oggi
un problema. Tutto il progetto deve essere valutato nell'ottica della
tiupologia specifica di trasferimento dati, evitando il più possibile
trasferimenti dati inutili. Particolare attenziona deve essere posta su:
- lla locazione dei cursori dati: usali lato client quando devono essere
consultati frequentemente ma con bassa frequenza di update (tipo tabelle di
uso generale), usali lato server ogni volta che la frequenza di
aggiornamento è alta.
- le procedure di aggiornamento: inutile eseguire l'update di un intero
record se a cambiare è solo un codice da 2 byte, meglio inviare una UPDATE
Sql piuttosto che un recordset...
2) Secondo punto critico è la concorrenza delgi utenti: anche ADSL non ha
certo la prestanza di una LAN, come ben sai, in lettura ma soprattutto in
scrittura. A maggiore ragione quindi devi fare attenzione al trasferimento
dati quando gli utenti crescono.
Ergo: non ti conviene fare il contrario? Ovvero tenere in locale il tuo
database aziendale e esportare verso il provider a intervalli regolari gli
update del database da pubblicare in internet...? Pensaci...
ciao
ugo

 update del database da pubblicare in internet...? Pensaci...
Con DAO è possibile usare le repliche; in ADO non ne ho mai sentito parlare
Saluti

assolutamente d'accordo...........
in effetti quella di lavorare su un MDB locale poi di esportare su
SQL-Server è un'idea che avevo, e sto, prendendo in considerazione, però mi
dispiacerebbe un po' perdere il real-time degli aggiornamenti.......
cmq sto lavorando anche in questa direzione........
grazie a tutti per le dritte.......
sono grandi!!!!!
good coding everyone!!!!



Dao / Ado?
Io sto parlando di repliche di SqlServer.
(ne lcaso specifico direi una push snapshot dalla lan al provider)
ciao
ugo

 dispiacerebbe un po' perdere il real-time degli aggiornamenti.......
Puoi benissimo attivare la replica in real time, visto che hai comunque un
accesso veloce.
Io però userei un Sql Server da entrambe le parti, o, se hai esigenze
economiche, un SqlServer e un Msde.
ciao
ugo

 ha scritto nel messaggio
news:9nn48b$s2k$1...@fe2.cs.interbusiness.it...
CUT
scusa se ti ri-rispondo ora:
spezzare l'aggiornamento da real-time ad intervalli prestabiliti (ogni ora?
oppure comunque quando cambiano N records) valutare in locale i cambiamenti
e decidere di preparare un file di query update zipparlo ->ftp e farlo
eseguire da una pagina asp (alcuni provider ti fanno installare componenti
IIS e mi sembra di ricordare esista un componente  zip per IIS) in remoto è
una soluzione impraticabile?
il file zip sai quanto è grande e misuri quanti byte il tuo cliente "avaro"
ha consumato...
certo è arzigogolato...e sono d'accordo con Gianni ...il BBB di telecom ha
un costo che anche io mi posso permettere... ed infatti..
la gente è strana eh? io ho un cliente con un pacco di soldi
,mercedes,barca,villa... e nei suoi uffici non puoi prendere il lapis se non
porti il mozzicone e gli appunti li prendono sul retro dei fax ricevuti!
in bocca al lupo!
:-)