node.js - node - socket.io example
la mejor práctica para la sincronización de datos en nodejs (1)
Me resulta difícil mapear tu código a la API de Firebase. Pero lo que está describiendo parece que se puede lograr al usar transacciones o actualizaciones de ubicaciones múltiples .
Cubrí este tipo de actualizaciones en profundidad en el pasado en: Cómo escribir datos desnormalizados en Firebase
Estoy tratando de hacer algo de integración entre dos sistemas, y tengo algunos problemas cuando se trata de sincronizar datos.
Estoy usando nodejs y la base de datos es mongodb o firebase .
El escenario se describe a continuación:
- systemA con dbA
- systemB con dbB
Haz lo siguiente:
systemA envía una solicitud (POST o PUT lo que sea) al sistemaB, el
body
es así:{ ..... fieldA1: valueA1, fieldA2: valueA2 ..... }
entonces el sistemaB necesita actualizar varios campos (campoB1, campoB2) en dbB de acuerdo con los datos del sistema A, como este:
fieldB1: valueA1
fieldB2: valueA2
después de que se
fieldB1
actualizado con éxito tantofieldB1
comofieldB2
, ejecute más lógica
Estoy usando async
para controlar el proceso asincrónico. Mi código para implementar estos 3 pasos:
async.waterfall([
function (callback) {
//get valueA1 of fieldA1 and valueA2 of fieldA2
},
async.parallel([
function (callback) {
//set valueA1 to fieldB1
},
function (callback) {
//set valueA2 to fieldB2
}
], function (err, result) {
//more logic here
})
], function (err, result) {
//more logic here
})
Dado que fieldB1
y fieldB2
deben actualizarse al mismo tiempo , cualquier situación al no actualizar fieldB1
o fieldB2
dará lugar a inconsistencia de datos, que no es el resultado correcto.
Sin embargo, async.parallel
no puede garantizar que cualquier falla de actualización revertirá o evitará que la actualización de los demás sea correcta. ¿Hay alguna forma de mantener idealmente la coherencia de los datos de AMBOS cuando se actualizan fieldB1
y fieldB2
?