Italian Consiglio su lettura dati in realtime

Xfood

Well-Known Member
Licensed User
Buongiorno,
Vorrei realizzare un'app che ho in mente, e mi serve un consiglio da qualche esperto in materia,
Praticamente ho xxx negozi, che producono delle vendite , e in tempo reale popolano un db locale sql.
1) vorrei installare un' app in b4j, che legge i dati , e li trasmette ad un server centrale, cosi da avere una tabella popolata con tutti i negozi.
Prima domanda, in b4j, devo attivare un timer che ogni 5 secondi legga il db locale sql e scrive sul db remoto i dati?

2) Poi a corredo, un'app che in mobilita'legge i dati dal db remoto con tutti i pv, e li visualizza, tipo: negozio1 1.000 euro, negozio2 1.500 ecc.

Seconda domanda, per fare questo, anche qui un timer? In questo caso, il timer va messo nella main, oppure dentro un servizio?
Sono un po confuso su questa parte di gestione.
Grazie per i chiarimenti.
 

Star-Dust

Expert
Licensed User
Usa KVS cloud
 

Xfood

Well-Known Member
Licensed User
Usa KVS cloud
Ok, ma lato punto vendita devo popolare il KVS, ho accesso al db vendite del cliente, ma non posso cambiare la struttura operativa, quindi b4j che popola KVS? Tramite un timer?
 

Star-Dust

Expert
Licensed User
Non credo usi un timer.
Ogni operazione sul DB locale viene messa in una coda in attesa di essere trasmessa sul server ed essere ripetuta nel DB del server.
Appena inviata e ricevuto l'ok viene cancellata dalla coda e si passa alla successiva.

Se manca la connessione rimangono salvate in coda.
 

Xfood

Well-Known Member
Licensed User
Mi sono spiegato male.
Il negozio ha un suo sistema che popola in tempo reale il DB SQL poi io dovrei leggere questo db.sql immagino ogni tot secondi per popolare il mio DB remoto quindi in quel caso utilizzare una procedura scritta in b4j giusto e mi legga i dati dal DB del cliente ogni X secondi
 

Star-Dust

Expert
Licensed User
Mi sono spiegato male.
Il negozio ha un suo sistema che popola in tempo reale il DB SQL poi io dovrei leggere questo db.sql immagino ogni tot secondi per popolare il mio DB remoto quindi in quel caso utilizzare una procedura scritta in b4j giusto e mi legga i dati dal DB del cliente ogni X secondi
Quindi vuoi fare un app a parte che rinfreschi il db server
 

Xfood

Well-Known Member
Licensed User
Esatto, e poi un'app in b4a che la apri, si connette al mio server diciamo e visualizza le vendite negozio per negozio e anche qui la domanda nasce spontanea Se ho la schermata aperta di questa app vorrei anche qui che ogni tot se conti aggiornato il contenuto valore i dati nel frattempo delle vendite si siano aggiornati con dei valori aggiornati quindi anche in b4a un timer che legge ogni tot secondi, un servizio?
 

amorosik

Well-Known Member
Licensed User
Pollare ogni 5 secondi e' estremamente inefficiente, e' da barbari
E qua, dai tempi dei tempi, si discutono solamente applicazioni di eleganza impareggiabile
Se il db server di ogni negozio consente la gestione degli eventi, puoi fargli sparare fuori il comando per aggiornare il db centrale esattamente ogni volta che viene aggiornata la tabella 'incassi' o quel che e'
La tua bella procedura B4J prendera' il comando e si occupera' di eseguire le operazioni del caso
 

Star-Dust

Expert
Licensed User
Io farei sempre aggiungere un campo in ogni record di tipo booleano.
Tutti quelli che ricevono una modifica o ho i nuovi inserimento saranno settati a false
L'altra applicazione una volta ogni due ore o a fine giornata scandisce tutti i record che hanno quel campo False (con una semplice ricerca select) e li trasferisce sul server.
Settando ovviamente i cambi trasferiti come True

Penso che avere l'aggiornamento a fine giornata come fosse un backup sia sufficiente

questo sempre se non vuoi intervenire sulla applicazione principale
 

giannimaione

Well-Known Member
Licensed User
io ho risolto in questo modo;
senza modificare il gestionale nel punto vendita, ho creato dei trigger in scrittura e cancellazione (non si sa mai) delle tabelle oggetto di trasferimento;
in questo modo "copio" i records in altre tabelle (una sorta di backup, il tutto gestito dal sql server);
poi il classico bottone "Sincronizza dati", che invia i dati presenti nelle tabelle di backup (quindi senza elaborare o manomettere le tabelle originali);

secondo punto:
a questo punto, dopo aver raccolto, i dati dei diversi negozi, hai la possibilità di gestire un db remoto con una app android;
sul forum esempi in gran quantità

No Time, no Space (F.Battiato);
 

Xfood

Well-Known Member
Licensed User
Diciamo che questo scenario non è possibile ma anche in questo caso dovrei impostare il famoso timer a due ore in ogni caso a me serve tipo in tempo reale con uno scatto di 10 secondi 15
 

Star-Dust

Expert
Licensed User
Diciamo che questo scenario non è possibile ma anche in questo caso dovrei impostare il famoso timer a due ore in ogni caso a me serve tipo in tempo reale con uno scatto di 10 secondi 15
Allora giustamente come già è stato scritto deve intervenire sul software gestionale

Non puoi scansionare ogni 10-15 secondi il database
 

LucaMs

Expert
Licensed User
Allora giustamente come già è stato scritto deve intervenire sul software gestionale

Non puoi scansionare ogni 10-15 secondi il database
Non puoi nemmeno intervenire sul gestionale, a meno che tu non abbia i sorgenti e i diritti per farlo.

Aggiungere trigger etc., come ha scritto Gianni, può essere ok, ma poi i dati delle tabelle d'appoggio andranno essere consultati "tramite timer", non mi pare ci sia altra soluzione.
 
Last edited:

Xfood

Well-Known Member
Licensed User
Quindi devo comunque mettere le mani diciamo così Sul DB del cliente ? Non volevo toccare il TB del cliente ma leggere solamente i dati


Poi non ho capito Diciamo in b4a apro l'app e chiaramente in automatico mi va a leggere i dati consolidati nel mio di birre moto e fino a qui nessun problema a quel punto la schermata aperta e con i valori dei negozi se nel frattempo questi valori vengono aggiornati Come faccio ad aggiornarli dall'app in automatico senza pigiare nessun bottone e senza uscire e rientrare dall'app bisogna attivare il servizio un timer è questo che ancora non mi è chiaro Supponendo di avere già il mio bel DB remoto popolato è aggiornato ogni 10 secondi
 

Xfood

Well-Known Member
Licensed User
Non puoi nemmeno intervenire sul gestionale, a meno che tu non abbia i sorgenti e i diritti per farlo.

Aggiungere trigger etc., come ha scritto Gianni, può essere ok, ma poi i dati delle tabelle d'appoggio andranno consultati "tramite timer", non mi pare ci sia altra soluzione.
La mia idea era infatti lanciare una query Dov'è controllo il totale venduto e me lo conservo in una variabile di appoggio in un gambo nel mio b4j se questo valore è diverso dal valore che avevo letto prima Prendo questi dati e li scrivo nel mio di birre moto volevo capire se il sistema di attivare un timer in b4j era corretto o esiste un'altra strada
 

Xfood

Well-Known Member
Licensed User
Scusate qualche errore ma sto utilizzando la tastiera vocale di Google visto che sono in macchina e mi sto recando presso un cliente
 

Star-Dust

Expert
Licensed User
Se puoi intervenire sull' applicativa non c'è bisogno che modifica il database.

Nelle procedure di aggiornamento e struttura del database e aggiungi una funzione che contemporaneamente aggiorna i dati sul server.
Lo farebbe solo quando ci sono aggiornamenti e non ogni 10-15 secondi
 
Top