11 messaggi dal 27 marzo 2012
Buongiorno a tutti, avrei bisogno di un consiglio.

Ho un'applicazione in locale windows form con base vb che si collega ad un database mysql che risiede in un server dedicato (non messo in locale perchè ci sono punti operativi diversi che hanno l'esigenza di usare il programma ed avere quasi in tempo reale i dati condivisi).

Ovviamente questa strategia porta ad avere le chiamate di apertura del db mysql lente (un semplice avanti e indietro di record di un'anagrafica può risultare lento nella risposta soprattutto per i tempi di apertura connessione al db).

Stavo pensando a più strade:

- installare su tutti i punti un db locale e gestire la sincronia dei dati facendo delle procedure ad hoc
- trovare un servizio di clouding mysql che abbia dei tempi di risposta rapidi
- passare il database a MSSQL Server

Cosa mi consigliate? avete qualche dritta da darmi?

Mauro
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
dato che la causa sembra essere la latenza di rete, la soluzione potrebbe essere quella di rivolgersi ad un altro hosting provider.
Tuttavia, prima di fare questo salto, cerca di misurare bene i tempi di risposta che l'attuale server riesce a darti. Se capisci che sono ampiamente migliorabili, allora valuta un altro fornitore.

Io non conosco la tua applicazione, quindi non posso sapere se la lentezza percepita dall'utente dipende anche da query molto complesse o che restituiscono un numero eccessivo di risultati. Ad esempio: quando l'utente clicca "Avanti" per cambiare pagina, l'applicazione recupera comunque tutti i record dal database oppure esegue una paginazione lato server sfruttando la clausola LIMIT?
Perciò prova a monitorare le queries e il traffico che va e viene dall'applicazione, per capire se potrebbe essere ottimizzato.

mauro.coltrini ha scritto:

installare su tutti i punti un db locale e gestire la sincronia

Questa è una buona soluzione anche se, per forza di cose, aumenterà la complessità del sistema. Vediamo come si potrebbe realizzare, sapendo che molteplici utenti potrebbero modificare la stessa anagrafica in maniera concorrenziale, generando quindi dei conflitti.
  • Usi la replication di MySql. Il database che hai adesso viene eletto a Master, mentre quelli che installerai sui client saranno gli Slaves. Ogni comando INSERT, UPDATE e DELETE dovrai eseguirlo sul master quindi nulla di nuovo, continuerai a gestire i conflitti nel modo attuale (se ne hai implementato uno). Le modifiche si propagheranno agli slaves in maniera asincrona. Sei hai tanti tanti slaves, stai sicuro che prima o poi la replication si incastrerà. Ti serve un sistema che periodicamente vada ad interrogare il master per capire se lo slave è ancora in sync.
    Il vero vantaggio è che, per le SELECT, potrai interrogare lo slave locale e quindi sfogliare le anagrafiche sarà molto veloce.
  • Ogni client ha il suo database master, che viene usato sia per leggere che per scrivere. Il vantaggio è che l'applicazione può lavorare anche quando non c'è connettività al master (pensa ad un portatile che si trova in un luogo senza copertura 3G). Quando finalmente la connessione viene ristabilita, ecco che tutte le modifiche apportate nel frattempo vengono sincronizzate con il database master. In questo scenario, è molto più importante disporre di un meccanismo di risoluzione dei conflitti perché le modifiche potrebbero essere sincronizzate anche dopo molti giorni, quando ormai non sono più rilevanti.

Se scegli per questa seconda strada, vai su Sql Server perché non mi sembra che MySql abbia nulla del genere. Con Sql Server hai due opportunità:


ciao
Modificato da BrightSoul il 06 luglio 2013 17.34 -

Enjoy learning and just keep making
11 messaggi dal 27 marzo 2012
Grazie sono passato a windows azure sql e tutto è migliorato.

ciao

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.