utilizan son que principales platzi lenguajes las funciones front end diferencia desarrollador cuales conocimientos flex remoting blazeds

son - Flex: ¿la mejor estrategia para mantener los datos del cliente sincronizados con la base de datos back-end?



frontend y backend platzi (7)

En una aplicación de Adobe Flex que utiliza la comunicación remota BlazeDS AMF, ¿cuál es la mejor estrategia para mantener actualizados los datos locales y en sincronización con la base de datos back-end?

En una aplicación web típica, las páginas web actualizan la vista cada vez que se cargan, por lo que los datos en la vista nunca son demasiado antiguos.

En una aplicación Flex, existe la necesidad de cargar más datos por adelantado para compartirlos en pestañas, paneles, etc. Estos datos suelen actualizarse menos frecuentemente, por lo que hay una mayor posibilidad de que sean obsoletos, lo que lleva a problemas al guardar, etc.

Entonces, ¿cuál es la mejor manera de superar este problema?

a. cree la aplicación Flex como si fuera una aplicación web: vuelva a cargar los datos de back-end en cada cambio de vista posible

segundo. ignore el problema y solo trate los problemas de datos obsoletos cuando ocurran (a riesgo de molestar a los usuarios que tienen más probabilidades de estar trabajando con datos obsoletos)

do. algo más

En mi caso, mantener el canal de datos abierto a través de LiveCycle RTMP no es una opción.


En el pasado, me he ido con la opción "a". Si usaba objetos remotos, podría configurar un poco de lógica de estilo de caché para mantenerlos sincronizados en el extremo remoto.

Sam


¿No puedes usar RTMP sobre HTTP (HTTP Polling)? De esa forma, aún puede usar RTMP, y aunque es mucho más lento que RTMP real, puede seguir generando actualizaciones de esta manera.

Tenemos una aplicación que usa RTMP para señalar inserciones, actualizaciones y eliminaciones simplemente transmitiendo mensajes RTMP que contienen el par Table / PrimaryKey, dejando que la aplicación actualice automáticamente sus datos. Hacemos esto a través de Http usando RTMP.


Si no puede usar el protocolo de mensajería en BlazeDS, entonces tendría que aceptar que debe realizar el sondeo RTMP a través de HTTP. Los datos se comprimen al usar RTMP en AMF, lo que ayuda a agilizar las cosas para que el cliente espere mucho tiempo entre las actualizaciones. Esto también le permitiría escalar más adelante a los métodos push si el cliente del producto decide pagar el hardware y las licencias adicionales.


a. Considere optimizar los cambios de back-end a través de un proxy que haga su propia notificación o poling: sabe si alguno de los datos está sucio y lo devolverá rápidamente (a la a 304) si no es así.

segundo. A menudo, los usuarios miran más de lo que tocan. Considere un nivel de actualización para buscar y otro cuando comiencen y continúen editando.

Mira BuzzWord: se bloquea en editar, pero también se guarda y desbloquea automáticamente con frecuencia.

Aclamaciones


No necesita Livecycle y RTMP para tener un mecanismo de notificación, puede hacerlo con los canales de BlazeDS y usar una estrategia de transmisión / larga encuesta


Encontré este artículo sobre la sincronización:

http://www.databasejournal.com/features/sybase/article.php/3769756/The-Missing-Sync.htm

No entra en detalles técnicos, pero se puede adivinar qué tipo de codificación implementará estas estrategias.

Tampoco tengo notificaciones sofisticadas de mi servidor, así que necesito estrategias de sincronización.

Por ejemplo, tengo una lista de empresas en mi ModelLocator. No cambia muy a menudo, no es lo suficientemente grande como para considerar la paginación, no quiero volver a cargarlo todo (removeAll ()) en cada acción del usuario, pero aún así no quiero que la aplicación se cuelgue o ACTUALICE datos corruptos en caso ha sido ACTUALIZADO o ELIMINADO de otra instancia de la aplicación.

Lo que hago ahora es guardar en una SESIÓN el SELECT datetime. Cuando vuelvo a actualizar los datos, SELECCIONO DONDE last_modified> $ SESSION [''lastLoad'']

De esta manera solo obtengo filas modificadas después de cargar los datos (la mayoría de las veces 0 filas).

Obviamente necesita actualizar last_modified en cada INSERT y UPDATE.

Para ELIMINAR es más complicado. Como señala el hombre en su artículo: "¿Cómo podemos enviar un registro que ya no existe?"

Debes indicarle a flex que elemento debe eliminar (digamos por ID) para que realmente no puedas DELETE en DELETE :)

Cuando un usuario borra una empresa, en su lugar, realiza una ACTUALIZACIÓN: eliminada = 1 Luego, en empresas de actualización, para la fila donde borró = 1 simplemente devuelve la ID a flexión para asegurarse de que esta empresa ya no esté en el modelo.

Por último, pero no menos importante, debe escribir una función que limpie las filas donde deleted = 1 y last_modified sea anterior a ... 3 días o lo que crea que se adapte a sus necesidades.

Lo bueno es que si un usuario elimina una fila por error, todavía está en la base de datos y puede guardarla de una eliminación real dentro de los 3 días.


En lugar de almacenar en caché el cliente flexible, ¿por qué no hacer el almacenamiento en caché en el servidor? Algunas razones,

1) Cuando almacena datos en el servidor, está centralizado y puede asegurarse de que todos los clientes tengan el mismo estado de datos.

2) Hay opciones mucho mejores disponibles en el servidor para el almacenamiento en caché en lugar de en flex. También puede tener un trabajo cron que actualice los datos según una frecuencia, por ejemplo, cada 24 horas.

3) Como los datos están en caché en el servidor y no es necesario recuperarlos de db en todo momento, la comunicación con flex será mucho más rápida

Saludos, Tejas