Como Defensor del Desarrollador en CouchbaseVoy a muchos eventos e interactúo con muchos desarrolladores. Cuando hablo de Couchbase, recibo muchas preguntas sobre la durabilidad de los datos que se crean. Por ejemplo, Couchbase es un tipo de base de datos de memoria primero, y de disco persistente después, donde cada interacción ocurre contra la capa de memoria antes de que asincrónicamente llegue al disco, manteniendo las cosas increíblemente rápidas. La pregunta que siempre surge es, ¿cómo se puede estar seguro de que los datos se guardan en caso de fallo de un nodo?
Esta es una gran pregunta y vamos a ver cómo superar estos problemas en caso de que alguna vez ocurra.
Vamos a ver unos cuantos ejemplos, todos muy similares, en torno a diferentes escenarios de durabilidad de datos. Estos ejemplos serán en Node.js, pero los comandos serán similares independientemente del SDK de Couchbase que desees utilizar.
Empecemos por el primer escenario. Tenemos un juego de rol multijugador masivo en línea (MMORPG) como World of Warcraft o similar y necesitamos guardar periódicamente el estado de juego de un jugador en particular para que cuando vuelva a iniciar sesión más tarde, su posición, estadísticas y objetos se mantengan alineados. En este escenario, como los guardados se producen con frecuencia y la latencia lo es todo, guardar en la caché es probablemente suficiente. Podemos escribir código como el siguiente:
1 2 3 4 5 6 |
cubo.insertar(id, datos, (error, resultado) => { si(error) { tirar error; } consola.registro(resultado); }); |
El estado del jugador se guarda y el juego recibe una respuesta diciendo que está bien para seguir adelante. Si el nodo falla y el archivo guardado no ha llegado al disco o se ha replicado, probablemente no sea un gran problema debido a la frecuencia con la que se guardan los archivos.
Ahora planteemos otro escenario. Digamos que estamos creando cuentas de usuario para nuestra aplicación. Aunque podríamos confiar en la capa de memoria, queremos un poco más de confianza en que nuestros datos llegarán al disco. Después de todo, si el nodo falla, no podemos recuperar lo que estaba en la memoria, pero podríamos recuperar lo que estaba en el disco. Así que en lugar de eso, ajustamos un poco nuestra operación:
1 2 3 4 5 6 |
cubo.insertar(id, datos, { "persist_to": 1 }, (error, resultado) => { si(error) { tirar error; } consola.registro(resultado); }); |
Hemos añadido persistir_hasta
que nos permite especificar en cuántos nodos deben persistir los datos en el disco antes de dar una respuesta. En nuestro caso, sólo queremos saber que los datos se asientan en el disco para un solo nodo y eso está bien.
Ahora vamos con nuestro tercer y último escenario. Digamos que hemos creado una aplicación bancaria. Es crítico que nuestras transacciones existan en disco y es crítico que estos datos sean replicados en caso de fallo de nodo y disco. Perder cualquier información para un cliente en lo que se refiere a datos bancarios podría acabar con penalizaciones masivas.
Dicho esto, nuestra operación de creación cambia un poco:
1 2 3 4 5 6 |
cubo.insertar(id, datos, { "persist_to": 1, "replicar_a": 2 }, (error, resultado) => { si(error) { tirar error; } consola.registro(resultado); }); |
En el código anterior estamos diciendo que después de crear un documento, queremos que se persista en al menos un disco y se replique en al menos otros dos nodos antes de recibir una respuesta. Podemos ajustar estos números según sea necesario, pero recuerda, cuanto mayor sea el requisito de durabilidad, más lenta será la respuesta de la operación.
Conclusión
Se pueden conseguir bastantes cosas con Couchbase. Aunque en muchas situaciones no necesitarás definir tus propios requisitos de durabilidad, poder decidir si tus datos deben ir a la caché, al disco o a la réplica a través del SDK es algo bueno. Sólo ten en cuenta que cuanto más fuertes sean tus requisitos, más lentas se volverán las cosas, no porque Couchbase sea lento para hacer estas cosas, sino porque están sucediendo más cosas.
Si desea obtener más información sobre el uso del SDK para Node.js de Couchbase, consulte la página Documentación del SDK. Si quiere saber más sobre la durabilidad de los datos, consulte el Portal para desarrolladores de Couchbase.