Couchbase Pasarela de sincronización El feed de cambios puede ser útil para controlar varios tipos de lógica, además de las réplicas. Para ayudar a entender las complejidades del feed de cambios, he desarrollado una sencilla herramienta. En esta entrada hablaré de lo que hace la aplicación. En entradas posteriores voy a caminar a través del código, y luego hablar de salida clave para saber.
Introducción
En Couchbase Móvil stack consta de tres componentes, Servidor Couchbase, Pasarela de sincronizacióny Couchbase Lite. Cada uno de estos elementos es útil por sí mismo. En un escenario típico, sin embargo, todos funcionan juntos.
La sincronización sofisticada y robusta de datos es complicada. Aquí es donde Couchbase Mobile brilla. En lugar de depender de una red siempre activa o de relojes inconsistentes, utiliza Multiversion Concurreny Control (MVCC). Este enfoque ofrece a los desarrolladores tanto fiabilidad como flexibilidad para manejar conflictos de documentos.
Sync Gateway es la clave para permitir la sincronización de datos entre todas las piezas. Para ello, Couchbase Mobile utiliza algo llamado feed de cambios. Los clientes de Couchbase Lite acceden al feed para impulsar la replicación de datos. Aunque el feed de cambios fue diseñado sólo con ese propósito en mente, también puede servir para otros objetivos. Esto hace que valga la pena entenderlo más a fondo.
CBM Cambia el Explorador
Yo llamo a la herramienta CBM Changes Explorer. La aplicación le permite manipular simultáneamente los datos a través de Couchbase Lite, mientras que el seguimiento de un Sync Gateway cambios de alimentación. También puede ejecutar más de una instancia a la vez, dando la posibilidad de ver cómo los clientes y Sync Gateway interactúan cuando van en línea y fuera de línea.
Esta animación muestra la interfaz de usuario en acción. En la parte superior tenemos tres paneles. El panel de la izquierda muestra una lista de todos los documentos en la base de datos local (Couchbase Lite). El panel central muestra el contenido de cualquier documento seleccionado de la lista de la izquierda, y permite editar y guardar nuevos documentos o revisiones de documentos.
El panel de la derecha muestra la salida de la fuente de cambios de Sync Gateway.
Los campos nombre de usuario y contraseña establecen los valores utilizados en la autenticación básica entre Couchbase Lite y Sync Gateway. Si habilita el usuario GUEST, no se necesitará autenticación. El botón "Aplicar" activa y desactiva el uso de la autenticación. (Esto significa que incluso si has suministrado credenciales, puedes desactivar la autenticación con el toggle).
El botón Guardar intenta guardar el JSON actual en el panel Contenido como una nueva revisión. Puede crear un nuevo documento introduciendo una estructura sin _rev
entrada. También puede crear fácilmente nuevas revisiones de un documento existente seleccionándolo primero en la lista de documentos, modificando el contenido y guardándolo a continuación. La página _rev
tendrá automáticamente el valor actual, que Couchbase Lite necesita para crear una revisión descendiente.
El botón Sync activa y desactiva las réplicas continuas push y pull entre el cliente Couchbase Lite y Sync Gateway.
Ejemplo: Visualización de conflictos en el feed de cambios
Combinando estas funciones, puedes crear conflictos de revisión para ver cómo funcionan. Sincroniza un documento en dos instancias distintas de la aplicación. Desactiva la sincronización. A continuación, realiza cambios diferentes en el documento en cada instancia del cliente. Vuelve a activar la sincronización y tendrás un conflicto.
Para demostrarlo, he aquí el feed de cambios de una actualización de un documento sin conflictos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "cambios": [ { "rev": "3-dcb456e2abf57fcedd3c912d73f0dc47" } ], "doc": { "_id": "doc", "_rev": "3-dcb456e2abf57fcedd3c912d73f0dc47", "canales": [ "105.3" ], "llave": "#2" }, "id": "doc", "seq": 7 } |
y aquí está el mismo documento con un conflicto
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "seq" : 7, "id" : "doc", "doc" : { "_id" : "doc", "_rev" : "3-dcb456e2abf57fcedd3c912d73f0dc47", "canales" : [ "105.3" ], "llave" : "#2" }, "cambios" : [ { "rev" : "3-dcb456e2abf57fcedd3c912d73f0dc47" }, { "rev" : "3-07e37dc9e819d7a4c20e5d125f56c714" } ] } ], "last_seq" : "7" } |
(Nota: La salida del feed de cambios está controlada por varios parámetros. Para obtener el feed mostrado arriba, necesita configurar active_only
a falso
, incluir_docs
a verdadero
y estilo
a todos_los_docs
.)
Observe la diferencia en el cambia
matriz. Muestra dos revisiones. Los datos del documento siguen mostrando sólo la revisión ganadora por defecto. Los datos de las otras revisiones siguen estando disponibles para permitirnos elegir cómo resolver los conflictos. En una aplicación del mundo real querríamos resolver este conflicto. De lo contrario, los datos alternativos permanecen en la base de datos y pueden hacerla crecer innecesariamente.
Próximos pasos
Sólo he mencionado una pequeña parte de lo que puede probar. También puede utilizar herramientas de línea de comandos y la interfaz de administración de Sync Gateway. Eche un vistazo aquí para más información.
El código de la aplicación en sí consta de unas 400 líneas de código y otras 100 líneas para la interfaz de usuario xml. Voy a caminar a través del código en la parte 2 de este post. Hay bastantes características simples que harían la aplicación más útil, por lo que las contribuciones son bienvenidas.
El proyecto en GitHub. Allí encontrará instrucciones para compilar, ejecutar y empaquetar la aplicación para su distribución.
Posdata
Consulte más recursos en nuestra portal para desarrolladores y síganos en Twitter @CouchbaseDev.
Puede enviar preguntas a nuestro foros. Y participamos activamente en Stack Overflow.
Envíame tus preguntas, comentarios, temas que te gustaría ver, etc. a Twitter. @HodGreeley
[...] se ha extraído de una herramienta que he creado. Puedes encontrar el código fuente en GitHub [...]
[...] una herramienta para ayudar a examinar y comprender la alimentación. Puedes leer una introducción y una descripción en la primera parte de esta serie de dos partes. El código también sirve de ejemplo para escuchar [...]