Spanish Ftp con semáforo

Soporte

Member
Licensed User
Longtime User
Buenas a todos, especialmente a los que más y mejor responden :))

Resulta que subo archivos .db al ftp y los bajo con otro programa que es una tarea que se ejecuta cada 15 min.
¿ Qué pasa si cuando un dispositivo está subiendo un .db la tarea se activa ? Creo que podria haber perdida de informacion.

Asi las cosas estoy pensando en poner un semaforo en el ftp

¿ Qué os parece ? ¿ Vds./ vosotros como lo hacen/ hacéis ?

Salu2
 

josejad

Expert
Licensed User
Longtime User
Hola Soporte:

Tienes que darnos más datos para poder hacernos una idea.
Resulta que subo archivos .db al ftp y los bajo con otro programa que es una tarea que se ejecuta cada 15 min
Lo haces desde tu móvil? desde un pc? con qué está programada la tarea, una aplicación hecha por tí, una aplicación externa? Por saber si hay alguna forma de consultar si esa tarea se está ejecutando.
¿es el mismo archivo el que subes que el que bajas o los vas nombrando de distinta forma? ...
 

Soporte

Member
Licensed User
Longtime User
Suben y bajan informacion (archivos .db) al FTP los dispositivos moviles y las App.

Me gustaria centrarme en la descarga en el dispositivo movil. Tengo una .db con los clientes y articulos. ¿ Al bajar al dispositivo ? ¿ Que ocurre si se corta el proceso ? ¿ Se queda inservible la .db ?
 

josejad

Expert
Licensed User
Longtime User
Pero todos actualizan una misma base de datos que utilizan todos en distintos archivos?

Dos ideas:
- Una base de dato central en mysql que actualicen los clientes y desde la que actualices tus .db
- cloudKVS
 

Soporte

Member
Licensed User
Longtime User
En todos los casos la respuesta es ninguno, porque estoy teorizando porque estoy haciendo pruebas y pretendo ponerme en la peor de las situaciones que es aquella en donde puede haber corrupcion de datos en la .db que llega al dispositivo movil.

Asi pues: Tengo un archivo.db de ~ 5 mb que se descargan los dispositivos. ¿ Qué ocurre si ?

1º El dowload se corta a medio ¿ Quedará corrupto ?
2º Si cuando el el ERP está subiendo al server ftp el archivo.db y un dispositivo a mitad subida empieza a descargarlo
 

Soporte

Member
Licensed User
Longtime User
Pero todos actualizan una misma base de datos que utilizan todos en distintos archivos?

Dos ideas:
- Una base de dato central en mysql que actualicen los clientes y desde la que actualices tus .db
- cloudKVS


¿ Me quieres decir que FTP no me sirve para lo que pretendo ? El program lo tengo terminado a falta de hacer pruebas
 

roerGarcia

Active Member
Licensed User
Longtime User
Pues tratandose de conjeturas asi, no hay mucho que decir.
Si son escenarios probables, pero yo sugiero desarrollar considerando el deber ser e incluir el monitoreo de esas tareas y las acciones correctivas.
 

roerGarcia

Active Member
Licensed User
Longtime User
Bueno, cual es el escenario completo?

1. servidor con datos
2. aplicaciones moviles que descargan la informacion de a) una b) diversas bases de datos de "n" MB?
3. la actualizan y regresan ?

etc
 

roerGarcia

Active Member
Licensed User
Longtime User
Y esto

1º El dowload se corta a medio ¿ Quedará corrupto ? Muy probablemente inusable.

2º Si cuando el el ERP está subiendo al server ftp el archivo.db y un dispositivo a mitad subida empieza a descargarlo Error de diseño, seria mejor subir la db con nombre distinto y procesar en el servidor, si estas asumiendo escenarios catastroficos.
 

Soporte

Member
Licensed User
Longtime User
Bueno, cual es el escenario completo?

1. servidor con datos
2. aplicaciones moviles que descargan la informacion de a) una b) diversas bases de datos de "n" MB?
3. la actualizan y regresan ?

etc

Del ERP al Ftp y despues a los dispositivos moviles solo subo un archivo.db de ~5mb

Creo que es mi deber adelantame a los acontecimientos y mas si pueden suponer perdida de informacion.

Yo sólo preguntaba por cual es el escenario, estado de los datos, si se corta bruscamente una descarga o si desde el ERP se actualiza archivo.db y mientras se está haciendo un dispositvo comienza a bajar. Me parecieran que son escenarios plausibles. ¿ A nadie le ha pasado ? ¿ Nadie lo ha pensado así ?
 

josejad

Expert
Licensed User
Longtime User
¿ Me quieres decir que FTP no me sirve para lo que pretendo ?
Bueno, no quiero decir eso. Quizás no sea la mejor solución, pero tendrás que articular alguna forma de manejar esos escenarios como dice roer.

- ¿un archivo de texto con la fecha de la última actualización completada que compares con la ultima actualización de tu bd?
- comprobarla fecha de creacion del archivo en el ftp?
 

roerGarcia

Active Member
Licensed User
Longtime User
#1 el ERP genera el db al corte.
#2 via ftp se baja a los dispositivos?
#3 los dispositivos lo actualizan todos durante el dia?
#4 lo regresan y mezclan? o son movimientos independientes?
#5 la data de los dispositivos es incorporada al ERP ?

Esta bien que te adelantes. Tal vez serviria crear un esquema de respuesta mas agil ante las contingencias.
 

Soporte

Member
Licensed User
Longtime User
#1 el ERP genera el db al corte. no entiendo
#2 via ftp se baja a los dispositivos? SI
#3 los dispositivos lo actualizan todos durante el dia? muchas veces al dia
#4 lo regresan y mezclan? o son movimientos independientes? Son datos fijos: Clientes, maestros (no viaja de vuelta)
#5 la data de los dispositivos es incorporada al ERP ? Se devuelve otra .db distinta



Me gusta lo que me has dicho: subirlo con un nombre distinto y cuando descargue entonces renombrarlo. El unico problema que veo es que duplico momentaneamente el tamaño usado. Pero realmente no creo que eso vaya a ser problema

Según lo que tu me dices, en Ftp tendré ArchivoOrigen.db
Lo recibiré en los dispositivos y le cambiare a Archvivo.db

GRACIAS
 
Last edited:

roerGarcia

Active Member
Licensed User
Longtime User
A ver, entonces lo que se baja son los "catalogos" maestros y lo que se sube son los movimientos del dia de cada dispositivo?

Eso es un escenario mucho mas definido y claro.

Si los archivos db de los dispositivos son independientes, yo los subiria con nombre individual y los incorporaria a la db principal o al ERP en otro proceso.
 

Soporte

Member
Licensed User
Longtime User
A ver, entonces lo que se baja son los "catalogos" maestros y lo que se sube son los movimientos del dia de cada dispositivo?

Eso es un escenario mucho mas definido y claro.

Si los archivos db de los dispositivos son independientes, yo los subiria con nombre individual y los incorporaria a la db principal o al ERP en otro proceso.


Así se hace. Realmente en el ERP tengo más control sobre el FTP que lo que tengo en el dispositivo. Así que ahí no hay problema.

El problema está focalizado en el dowload de los dispositivos. Con lo que me has dicho y si el rename no me da muchos problemas creo que me puede ir de perlas y sobre todo tener datos confiables y huir de corrupciones
 

roerGarcia

Active Member
Licensed User
Longtime User
Ya veo.
Yo manejaria archivos db individuales en el dispositivo y asi los subiria (nombre fijo segun el id del dispositivo, agente, vendedor, cobrador) y eso hasta me serviria para saber quien ya entrego o subio y quien falta.

Saludos, exito.
 

pcicom

Member
Licensed User
Longtime User
Buenas a todos, especialmente a los que más y mejor responden :))

Resulta que subo archivos .db al ftp y los bajo con otro programa que es una tarea que se ejecuta cada 15 min.
¿ Qué pasa si cuando un dispositivo está subiendo un .db la tarea se activa ? Creo que podria haber perdida de informacion.

Asi las cosas estoy pensando en poner un semaforo en el ftp

¿ Qué os parece ? ¿ Vds./ vosotros como lo hacen/ hacéis ?

Salu2

Si utilizas la logica, con eso resuelves todo..

Tu mismo mencionas la misma solucion, la cual seria un archivo semaforo usandolo como ftp.

Osea tienes una baseX.db y tambien dispondras de 2 metodos de validacion/eventos a realizar.

LOGICA.. Actualizando mi DB (Evitando que nadie se actualze hasta que termine le SUBIDA).

METODO 1.

1. Subes un archivo por FTP llamado actualizando.txt <-- o como quieras llamarlo
2. Subes tu archivo baseX.db
3. Una vez Subida la baseX.db borras el archivo actualizando.txt

Cada que se intenten actualizar alguien descargara el archivo actualizando.txt
Si Existe.. entonces no podran descargar la baseX.db, hasta que el archivo no exista.
No Existe entonces SI podran descargar la baseX la cual ya debiste haber subido al FTP.

METODO 2

1. Subes un archivo por FTP llamado estatus.txt dentro de el tendras un dato "x" que diga (actualizando, disponible, no permitido....etc)
2. Subes tu archivo baseX.db
3. Una vez Subida la baseX.db
Subes nuevamente el archivo por FTP llamado estatus.txt dentro de el tendras un dato "x" que diga (actualizado o disponible)

Cada que se intente actualizar alguien descargara el archivo actualizando.txt
Si Existe.. entonces checa el contenido dentro y detecta el estatus de la base de datos puede ser. (actualizando, disponible, no permitido....etc)
*** si esta en estatus disponible entonces se podra realizar la descarga de la basX.db.
No Existe entonces interrumpe la descarga de la baseX.db. y espera a otro intento..

Y sobre si se corrompe la descarga las bases debes descargarlas con nombres distintos, intentar abrirlas o accesar a ellas, en caso de que se abra correctamente entonces renombras el original por el nuevo y remplasas la base de datos por la descargada..

Espero sea de ayuda

Saludos !!!
 
Last edited:

Soporte

Member
Licensed User
Longtime User
De nuevo hola a todos. Quería daros las gracias por vuestro interés y comentaros como lo he resuelto.

Del lado del ERP, bajadas:
* Leo directorio FTP (nombres y sizes de los archivos) espero 3 segundos y empiezo a procesar
* Para cada archivo compruebo que el tamaño descargado coincida con el tamaño inicial leido, sino borro lo descargado y permanece en ftp

Del lado del ERP, subidas:
* Subida comprobando que el tamaño subido coincida con el tamaño del archivo que se sube.

Del lado del dispositivo, bajadas:
* Compruebo que el tamaño del unico archivo.db devuelto por FTP.List coincide con los bytes finales de downloadCompleted. Si no coinciden no renombro la .db

Del lado del dispositivo, subidas:
* Si el uploadCompleted Success es false o el tamaño de lo subido no coincide con el tamaño del archivo en el dispositivo, entonces borra lo que se hubiera podido subir al Ftp.


Todo esto sin montar sistema de archivos semaforicos y con un sistema que permite tanto la interrupcion de conexion como la concurrencia de usuarios... O ESO ESPERO... A probarlo en producción !!!!!!!!

Editado 19/04/21 23:56
 
Last edited:

Soporte

Member
Licensed User
Longtime User
Si utilizas la logica, con eso resuelves todo..

Tu mismo mencionas la misma solucion, la cual seria un archivo semaforo usandolo como ftp.

Osea tienes una baseX.db y tambien dispondras de 2 metodos de validacion/eventos a realizar.

LOGICA.. Actualizando mi DB (Evitando que nadie se actualze hasta que termine le SUBIDA).

METODO 1.

1. Subes un archivo por FTP llamado actualizando.txt <-- o como quieras llamarlo
2. Subes tu archivo baseX.db
3. Una vez Subida la baseX.db borras el archivo actualizando.txt

Cada que se intenten actualizar alguien descargara el archivo actualizando.txt
Si Existe.. entonces no podran descargar la baseX.db, hasta que el archivo no exista.
No Existe entonces SI podran descargar la baseX la cual ya debiste haber subido al FTP.

METODO 2

1. Subes un archivo por FTP llamado estatus.txt dentro de el tendras un dato "x" que diga (actualizando, disponible, no permitido....etc)
2. Subes tu archivo baseX.db
3. Una vez Subida la baseX.db
Subes nuevamente el archivo por FTP llamado estatus.txt dentro de el tendras un dato "x" que diga (actualizado o disponible)

Cada que se intente actualizar alguien descargara el archivo actualizando.txt
Si Existe.. entonces checa el contenido dentro y detecta el estatus de la base de datos puede ser. (actualizando, disponible, no permitido....etc)
*** si esta en estatus disponible entonces se podra realizar la descarga de la basX.db.
No Existe entonces interrumpe la descarga de la baseX.db. y espera a otro intento..

Y sobre si se corrompe la descarga las bases debes descargarlas con nombres distintos, intentar abrirlas o accesar a ellas, en caso de que se abra correctamente entonces renombras el original por el nuevo y remplasas la base de datos por la descargada..

Espero sea de ayuda

Saludos !!!


Te agradezco el esfuerzo, pero durante el transcurso del hilo pensé en otro sistema. Gracias en todo caso
 
Top