2012-06-18 18 views
5

Al hacer un poco más la programación con Firebase hoy, me encontré deseando para un par de características:¿Se ha establecido (o se ha considerado) algo como configuración de "fusión" o "lote" en Firebase?

1) Combinar conjunto:

decir que tengo una base de fuego ref que tiene el valor {a:1,b:2,c:3}.

Si hago algo como ref.set({a:-1,b:-2}) el nuevo valor será (como era de esperar) {a:-1,b:-2}.

En su lugar, imagine ref.mergeSet({a:-1,b:-2}) que tendría un resultado en el valor de la ref que es {a:-1,b:-2,c:3}.

Ahora, se dan cuenta de que podía hacer algo como ref.child("a").set(-1) y ref.child("b").set(-2) para lograr este resultado, pero al menos en algunos casos, preferiría para obtener sólo una única llamada a mi manejador .on().

Esto se convierte en mi segunda idea.

2) lotes conjunto:

En mi solicitud me gustaría una manera de forzar un número arbitrario de llamadas a .set sólo resultará en una llamada a .on en otros clientes. Algo así como:

ref.startBatch() 
ref.child("a").set(1) 
ref.child("b").set(2) 
.... 
ref.endBatch() 

En el modo por lotes, .set no daría lugar a una llamada a .on, en cambio, el número mínimo de llamadas a .on haría todo el resultado de llamar .endBatch.


Estoy dispuesto a admitir que estas ideas son bastante incipiente, y no me sorprendería si entran en conflicto con las características arquitectónicas existentes de Firebase, pero yo pensé en compartir todos modos. Me parece que tengo que pasar más tiempo para garantizar la coherencia entre los clientes cuando uso Firebase de lo que esperaba.

Gracias de nuevo, y sigan con el gran trabajo.

Respuesta

6

ACTUALIZACIÓN: Hemos añadido un nuevo método update() para el cliente web Firebase y el apoyo de parche en el REST API, que permite modificar de forma atómica hermanos múltiples en un lugar determinado, dejando los otros hermanos no modificada. Esto es lo que ha descrito como "mergeSet" y se puede utilizar de la siguiente manera:

ref.update({a: -1, b: -2}); 

que actualizará 'a' y 'b', pero deje 'c' sin modificar.


vieja respuesta

Gracias por la solicitud de función detallado! Nos encantaría saber más sobre su caso de uso y cómo estos primitivos lo ayudarían. Si está dispuesto a compartir más detalles, envíe un correo electrónico a [email protected] y podremos profundizar en su situación.

Para responder a su pregunta, sin embargo, la razón principal por la que no tenemos estas características está relacionada con nuestra arquitectura y el rendimiento/consistencia garantiza que estamos tratando de mantener. De no ir demasiado profundo, pero si uno se imagina que sus datos Firebase se extiende por muchos servidores, es más fácil para nosotros tener garantías más fuertes (atomicidad, pedidos, etc.) cuando la modificación de los datos que está cerca del árbol de que cuando la modificación de los datos que es mucho lejos. Por lo tanto, al limitar estas garantías a los datos que puede reemplazar con una sola llamada set(), lo empujamos en una dirección que funcionará bien con la arquitectura de Firebase.

En algunos casos, puede ser capaz de obtener más o menos lo que quiere con sólo la reorganización de su árbol. Por ejemplo, si usted sabe que siempre desea establecer 'a' y 'b' juntos, se puede poner bajo un padre común 'ab' y hacer ref.child('ab').set({a:-1, b:-2});, que no afectará al niño 'c'.

Como he dicho, nos encantaría saber más acerca de su situación. ¡Estamos en beta para que podamos aprender de los desarrolladores sobre cómo están usando la API y dónde se está quedando corto! [email protected] :-)

Cuestiones relacionadas