Explorando Couchbase y N1QL a través de Touchbase usando Node.js y Angular.js - Parte 0: Creando un Modelo de Datos

Parte 0: Creación de un modelo de datos

Antes de construir Touchbase, es importante establecer la estructura de cómo se almacenarán los datos. En la forma más básica, hay realmente tres cosas diferentes que necesitaremos almacenar.

  1. Documento de usuario: Almacena toda la información sobre un usuario determinado.
  2. Puestos: Todos los mensajes creados por los usuarios deben almacenarse con la información necesaria para su visualización.
  3. Imágenes: Todas las imágenes de perfil de usuario deben almacenarse como datos binarios (base64 en este caso).

 

DOCUMENTO DE USUARIO

En primer lugar, empezaremos con el documento de usuario. Este documento se almacena simplemente bajo un UUID (Identificador Único Universal). La razón de esto es que el ID del documento no debería decirnos nada sobre el usuario; todo eso debería venir del contenido del documento. Por ejemplo, supongamos que almacenamos cada uno de los documentos de usuario utilizando la dirección de correo electrónico del usuario como ID del documento. Si un usuario quisiera cambiar su dirección de correo electrónico, sería una odisea, porque ahora tendría que almacenar su documento actual, volver a almacenarlo con un nuevo ID de documento y eliminar el documento antiguo. Implementando un UUID, podemos encontrar al usuario y cambiar su atributo 'email' en su documento usando una sentencia N1QL UPDATE. Esto explica por qué se debe usar algo independiente del contenido del documento. También queremos asegurarnos de que ninguno de los IDs de los documentos va a ser el mismo, así que esto asegurará algorítmicamente que los IDs de documentos duplicados sean virtualmente imposibles. A continuación, verá el atributo 'uuid', que se utiliza como el ID del documento.

Ejemplo de documento de usuario

(nota: algunos campos se han ocultado)

Este documento de usuario está vinculado al resto de documentos de diferentes maneras, pero lo más importante es conservar toda la información que el usuario introduce con el registro. Estos se pueden desglosar en tres tipos de información diferentes, que serían: 'atributos del array', 'atributos de cadena'y 'atributos desplegables'. Estas son las tres formas típicas en las que un usuario introduciría información, y la aplicación cambiaría su tratamiento en consecuencia. Los atributos pueden modificarse en consecuencia en el config.json de modo que se solicite al usuario información diferente. Puede que no se considere el enfoque más intuitivo de un modelo de datos, pero agiliza notablemente el desarrollo de la aplicación. El sitio config.json se puede ver a continuación, mostrando cómo los datos podrían ser personalizados por un desarrollador (al usuario se le pedirá información diferente), pero seguir siendo tratados de la misma manera por la aplicación. La personalización de estos atributos ocurriría en el objeto 'dataModel'.

config.json

 

DOCUMENTO POSTAL

A continuación, tendremos que almacenar los posts. Estos son simples documentos JSON también, y mantendrán la información que necesitamos sobre cada post. Estos se almacenan como UUIDs también, con '_pub_' anexo.

Ejemplo de documento postal

Cada entrada tiene tres partes principales: título, enlace y propaganda. Esto contiene casi todo lo que es necesario en un post, pero hay otras cosas simples que almacenaremos en el back-end, que el usuario no introducirá directamente.

En primer lugar, utilizaremos el ID del usuario y lo almacenaremos con la entrada. También almacenaremos la hora a la que se hizo la publicación. También hay un 'pubType' que es el tipo de publicación que se hizo, y esto se toma de donde se hizo la publicación en el front-end.

Por ejemplo, si realizamos el post en la sección 'Proyectos Github' sección 'pubType' que se almacenó sería 'Proyectos Github'. También habría un 'imagePath' asociado a este 'pubType' en el config.json que obtendría la imagen correspondiente para este documento 'pubType' del iconos carpeta.

Finalmente, cuando estemos extrayendo los documentos de la entrada, utilizaremos una función para manipular estos documentos y enviarlos al front-end como creamos conveniente. En la implementación actual, una consulta N1QL se ejecuta para encontrar cada documento que es de la 'pubType' que la pantalla del usuario's está en (por ejemplo, si el usuario está en 'Github Projects', sólo docs con un 'pubType' de 'Github Project' será tirado). A continuación, los documentos se ordenarán según el momento en que se publicaron, de modo que los más recientes aparezcan en primer lugar. También habrás notado que sólo almacenamos el 'authorID', no el nombre del autor'. La función que extrae las entradas también buscará el nombre de cada autor según el 'authorID', en caso de que el autor cambie su nombre en la red. Habrá una mirada en profundidad al almacenamiento y recuperación de posts más adelante en la serie de blogs.

 

DOCUMENTO DE IMAGEN

Por último, tendremos que almacenar imágenes. Actualmente esto se hace utilizando Multeruna pieza de Node.js Middleware. Esto también se explicará con más detalle más adelante en la serie de blogs. Una característica importante del almacenamiento de imágenes es que necesitaremos asociar esta imagen con el documento de usuario para el mismo usuario. La forma en que esto se hace actualmente es a través del ID del documento de la imagen, donde el ID del documento se almacena con el mismo ID que el documento de usuario con '_picMulterNode' añadido al ID.

Documento de identidad con fotografía

 

CONCLUSIÓN

Blogs futuros : Esta serie de blogs se centrará en torno al aspecto back-end de esta aplicación, sobre todo porque sigue los principios REST. Las explicaciones se centrarán en el código Node.js utilizando el framework Express, sin embargo, se mostrará algo de código HTML y Angular.js cuando sea necesario para la implementación de la API REST. Para ver el código completo, con el front-end incluido, visita https://github.com/couchbaselabs/touchbase. Para el front-end, esto hace uso de Angular.js, HTML5, Angular UI Router, Angular Material Design, y más. Todo el código Angular.js se puede ver en TouchbaseModular/public/js. HTML se puede ver en TouchbaseModular/público en index.html (usos signUp.js) y nav.html (usos touchbase.js). Todos los parciales HTML del Router Angular UI pueden verse en TouchbaseModular/public/html. También puede consultarse documentación más detallada sobre el diseño en el Documentación carpeta.

Con esto terminamos nuestro blog sobre modelos de datos, y espero que os haya sido útil a todos. Si tenéis alguna pregunta, duda o comentario, por favor, dejad un comentario a continuación.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Pranav Mayuram

Pranav Mayuram es pasante de lenguaje de consulta N1QL, Couchbase. Construyó una plataforma de red social, Touchbase, usando Couchbase Server, Node.js, Express & Angular.js.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.