Gesione dati

Ciao a tutti!

Ho una questione da porvi, quì penso sia la sezione giusta poi eventualmente Gianni farà il suo dovere  :police:

Ho un portale dove i clienti si registrano fanno ordini, modificano i loro dati anagrafici ecc... (Questo lo fanno su un database in hosting su Aruba.) L'azienda fà le fatture, gli ordini, la gestione dei clienti, ecc.. (praticamente la stessa cosa che fanno gli utenti dal web solo con più funzioni su un database locale.)

La mia situazione è questa, non posso affidarmi a usare lo stesso database (Quello di aruba) , in quanto se dovesse mancare la connessione a internet tutte le normali funzioni di ordini fatturazioni ecc. in azienda si fermarebbero :uglystupid: (cosa da evitare assolutamente).

Non posso usare il database server aziendale perchè è sotto rete Fastweb e quindi non ho un'IP mio ma di una sotto rete e comunque non potrei mappare la porta.

Come posso fare per avere i database sincronizzati senza incorrere in dublicazioni di dati?

Ipotesi:

faccio un'ordine in azienda N° ordine 1

faccio un'ordine dal web N° ordine 1

quando vado a sincronizzare succede un bel casino....  :buck:

 :bye:

inviato 9 anni fa
Marco Dario
X 0 X

Nessuno ha un'idea?

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

Il problema non è di facile soluzione perché la norma vuole che il database sia unico e che invece le applicazioni che via accedono siano molteplici.

Avere 2 database inevitabilmente porta a delle inconsistenze dovute alla mancata sincronizzazione dei dati, quindi se vuoi portare avanti questa architettura devi per prima cosa individuare quali tipi di inconsistenze potrebbero verificarsi (es.: numero articoli in magazzino < 0), trovare un rimedio a ciascuna di esse a livello applicativo e poi pensare ad una procedura di sincronizzazione, da effetuare ogni X ore, che risolva le eventuali inconsistenze e allinei i dati.

Quindi non c'è una soluzione universale al problema ma va realizzata ad hoc per il tuo sistema.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Potresti inviare una mail dal web contenente l'ordine, magari come csv o altro formato, non appena viene confermato.

Così in azienda basta solo importarlo.

Però dovresti avere un campo in + nel db aziendale relativo al n° ordine web in modo da mantenere una numerazione corretta; cioè il n°ordine nel db in azienda rimane com'è, viene aggiunto anche il n°ordine web se importato.

risposto 9 anni fa
LonelyWolf
X 0 X

Grazie a tutti e due!  ;)

Per Gianni:

Hai pienamente ragione riguardo al discorso dell'unico database, ma purtroppo è sorto questo problema con Fastweb. Pensavo di fare tutto sul database aziendale ma ora non è più possibile.  :'(

Ieri mentre guardavo al cinema "Una notte al museo" mi è venuto un piccolo lampo di "genio"...  :crazy:

1 Eseguo una query UPDATE dal server interno, su una tabella creata ad hoc di nome  "connection" con un campo TIMESTAP  "last_connection" sul db esterno ogni minuto.

2 Dal gestionale lato esterno faccio un controllo del tipo:

   Se è più di un minuto che last_connection non viene aggiornato allora ho perso il collegamento con il server

   interno. Quindi mostro un messaggio di errore agli utenti esterni.

Facendo così blocco la scrittura sul db esterno.

3 Quando ritorna la connesione rendo disponibile il db esterno faccendo il seguente controllo:

   Se last_connection è maggiore al tempo prestabilito importo il db aziendale.

4 Importo il db aziendale.

Cosa ne dite dell'idea?

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

Secondo me è macchinoso, ma può essere una soluzione.

L'opzione della mail se non l'hai scartata è forse un po' più semplice, importando l'ordine aggiorni le giacenze e gli ordini in db_azienda con un "colpo" solo; a questo punto basterebbe che finita l'importazione dell'ordine venga eseguito l'aggiornamento delle giacenze da db_azienda a db_web.

Questo però anche ad ogni inserimento ordine in locale.

Il vero problema per qualsiasi soluzione è però un'altro:

Quanti ordini online e quanti in locale?

Edit:

Facendo quel controllo potresti incappare in un'altro problema, non tecnico ma organizzativo, supponiamo:

Fastweb non da connessione per problemi tecnici.

Gli ordini web vengono bloccati = mancato guadagno da parte dell'azienda

Secondo me invece di bloccare gli ordini sarebbe meglio portarli a compimento, informare l'utente prima della conferma definitiva dell'ordine che per problemi tecnici sarà controllato e processato successivamente  ma che potrebbe fare l'ordine telefonico in sede.

Istituire una tabella per gli ordini da processare che sarebbe da controllare appena il collegamento può essere ristabilito (o con una linea d'emergenza che scarica i dati).

risposto 9 anni fa
LonelyWolf
modificato 9 anni fa
X 0 X
L'opzione della mail se non l'hai scartata

Non scarto niente LonelyWolf, sopratutto i tuoi suggerimenti che si sono dimostrati sempre molto utili!  O0

Penso a questo punto di fare 2 tabelle ordini ben definite. Una ordini e l'alrta ordini_web così la gestione è più semplice.

Quando dall'azienda lavorano "offline" fanno i loro bei ordinetti, e gli viene fuori un messaggio che gli ordini web non sono disponibili per problemi di connessione al db remoto. Mentre gli utenti web lavorano tranquilli senza accorgesi di "niente". Dovrò poi pensare a quale strada prendere per l'importazione dei dati.

L'unica maniera per lavorare bene è avere gli strumenti giusti c'è poco da fare.  :tichedoff:

 :bye:

risposto 9 anni fa
Marco Dario
modificato 9 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda