La última vez que examinamos la construcción índices secundarios manuales en Couchbase: en efecto, usando Couchbase más por sus propiedades de almacén de valores clave que como almacén de documentos.

Siguiendo con el hilo clave-valor llegamos a una de las cuestiones más importantes en el modelado de bases de datos no relacionales: ¿cómo nombramos nuestras claves? Respuesta: empezamos con un patrón de claves. A continuación veremos cómo sacar partido de Couchbase con las mejores prácticas de modelado de datos.

Tres formas de crear y utilizar claves en Couchbase

Existen, a grandes rasgos, tres formas de crear un patrón de claves en un almacén de claves-valores NoSQL:

  • determinista: por ejemplo, la dirección de correo electrónico que alguien utiliza para conectarse a su sistema
  • generado por ordenador: por ejemplo, un UUID
  • alguna combinación de ambos: por ejemplo, un UUID con una parte determinista.

El patrón de claves que elijamos dependerá en gran medida de cómo pensemos acceder a los datos.

Determinista

Supongamos que almacenamos el perfil de un usuario. Suponiendo que no haya cookies, ¿qué podemos saber de nuestro usuario después de que haya iniciado sesión?

Bueno, una cosa sería su nombre de usuario.

Así que, si queremos facilitarnos la vida a la hora de recuperar nuestro perfil de usuario, podemos teclearlo con el nombre de usuario de esa persona. Todo lo demás que necesitemos saber sobre esa persona podría derivarse de su perfil de usuario, de un modo u otro.

Rápidamente nos topamos con un problema: para que un usuario cambie su nombre de usuario ahora tenemos que crear un nuevo perfil de usuario con una nueva clave o crear un documento de búsqueda. Podríamos insistir en que nuestros usuarios nunca puedan cambiar su nombre de usuario, pero no es razonable hacerles sufrir innecesariamente.

Podríamos decidir que no supone mucho esfuerzo copiar los datos del perfil en un nuevo documento con una nueva clave. Alternativamente, podríamos utilizar algo no relacionado con los datos del usuario para nuestra clave.

Generado por ordenador

El principal inconveniente de una clave determinística es que, normalmente, será un elemento de los datos que estamos almacenando.

Si utilizamos algo como un UUID, nuestros usuarios pueden actualizar su dirección de correo electrónico, o cualquier otra cosa que estemos utilizando como nombre de inicio de sesión, sin que tengamos que volver a crear su documento de perfil con una clave nueva.

Incluso podemos hacer que Couchbase haga el diseño de claves por nosotros usando un contador.

Funciona así:

  1. Alguien rellena el formulario de nueva cuenta y hace clic en "Enviar".
  2. Incrementamos nuestro documento contador y nos devuelve el siguiente número hacia arriba (por ejemplo, 1001).
  3. Creamos un nuevo documento de perfil de usuario con la clave 1001.
  4. A continuación, creamos buscar documentos para cosas como su nombre de usuario, lo que nos permite hacer una simple búsqueda en los datos que tenemos en el momento del inicio de sesión.

También obtenemos algunos beneficios secundarios al utilizar este patrón para nombrar nuestra clave, como un contador que nos indica cuántos perfiles de usuario hemos creado durante la vida de la aplicación.

Teclas compuestas

Es cuando combinamos ambos métodos que podemos empezar a hacer cosas realmente interesantes con Couchbase y cómo usamos los nombres de las claves.

Ya hemos visto antes cuándo incrustar datos en un documento grande y cuándo es mejor remitir a otros documentos. Cuando decidimos referirnos a datos contenidos en documentos distintos, podemos construir nombres clave predecibles a partir de componentes que nos digan algo sobre lo que contiene el documento. Con llaves compuestas, buscamos naturalmente en patrones.

Veamos de nuevo nuestro perfil de usuario. El documento principal se almacena bajo la clave 1001. Estamos trabajando en un sitio de comercio electrónico, por lo que también queremos saber todos los pedidos que ha hecho nuestro cliente. ¿Cómo lo hacemos? Sencillo: almacenamos la lista de pedidos bajo la clave 1001::pedidos.

Del mismo modo, nuestro sistema podría juzgar qué tipo de correos electrónicos de marketing enviar a los clientes en función de su gasto total en el sitio. En lugar de que el sistema lo calcule de nuevo cada vez, lo hacemos a la manera NoSQL: lo calculamos una vez y lo almacenamos para recuperarlo más tarde con la clave 1001::pedidos::valor.

La próxima vez

La próxima vez veré cómo modelar los datos de la forma más efectiva para usarlos con las vistas de Couchbase.

Autor

Publicado por Matthew Revell, Defensor principal del desarrollador, EMEA, Couchbase

Matthew Revell es Lead Dev Advocate, EMEA Couchbase. Ha desarrollado una estrategia global para situar a Couchbase en la mente de los desarrolladores del producto.

2 Comentarios

  1. Hola Matthew,

    ¿Qué enfoque recomiendan para generar claves contrarrestadas en un escenario couchbase lite? Estoy planeando usar la combinación de couchbase lite, sync gateway y couchbase server.

  2. [...] Usar prefijos y sufijos semánticos en los nombres de tus claves es una forma sencilla de asignar espacios de nombres a tus documentos, particularmente cuando usas Couchbase para clave-valor. [...]

Dejar una respuesta