¿Qué base de datos usar para Chatbots? la guerra de SQL y NoSQL

Yudner Tayson Paredes Flores
My Bots Latam
Published in
5 min readDec 6, 2019

--

¿SQL o NoSQL?, en realidad es una pregunta que no solo va en función de chatbots, sino con cualquier tipo de aplicación.
Existe una variedad de bases de datos relacionales y no relacionales como:

SQL: Azure SQL Database (SQL Server), Oracle, PostgreSQL, MySQL, etc.
NoSQL: Azure Cosmos DB, Mongo DB, Cassandra, Cache for Redis, etc.

Hoy en día es muy común interactuar con un chatbot, desde solicitar información, hasta mantener una conversación coherente y rápida en base a la información que solicita el usuario.

Existen múltiples plataformas de construcción de Chatbots, entre ellas tenemos a:

Azure Bot Services (Ver documentación)

IBM Watson (Ver documentación)

Dialog Flow (Ver documentation)

Amazon Lex (Ver documentation)

Por eso, al momento de construir este tipo de aplicaciones y querer definir qué base de datos usar, debemos considerar ciertos aspectos que las caracterizan.

Velocidad de respuesta 🌠

Los chatbot están trabajando 24x7 y con múltiples usuarios a la vez, esta es una característica primordial en estas plataformas, ya que nuestra sociedad es cada vez más práctica, un mundo dónde necesitamos respuestas rápidas y concretas. Los chatbot recopilan todo tipo de información y meta-datos, para luego poder ser explotados con el fin de mejorar su capacidad de respuesta y compresión de lenguaje.

Las bases de datos relacionales (SQL) pueden perder velocidad cuanto más cantidad de datos tenga, esto se ve al hacer consultas que involucren múltiples tablas en una sola transacción, es posible mejorar esto con un adecuado diseño de base de datos, pero de todas formas al paso del tiempo afectará según la cantidad de datos que recopile.

Las bases de datos no relacionales (NoSQL) tienen una gran ventaja en cuanto a la velocidad de transacción, porque los datos no dependen de otras entidades por el cual, las consultas serán mucho más rápidas.

Integridad de la información 📃

La integridad garantiza que la información mantendrá su exactitud con el pasar del tiempo, la información será uniforme por diferentes canales sin causar incertidumbre en los usuarios.

Las bases de datos SQL manejan tablas que tienen una estructura con tipos de datos definidos, donde es inviable almacenar datos que sean de otro tipo.

Las bases de datos NoSQL no llevan un control vigoroso para los tipos de datos, hoy pueden tener un tipo de dato entero que después sin mucho esfuerzo puede ser una cadena.

Simplicidad de respuesta 💭

Los usuarios siempre querrán la respuesta más exacta a su consulta, he visto casos de chatbots informativos donde te llenan de texto que al final es desesperante tener que leer e interpretar lo que dice.

Las bases de datos de los chatbots no solo almacenan información de los usuarios, sino también de la empresa, por ejemplo:

🏦 Sucursales
📞Centro de contacto
📍 Geo localización
👥 Servicios
🎮Productos
💬Recomendaciones

Por ende, la información tiene que estar clasificada y exacta, para que el chatbot no necesite hacer cálculos innecesarios o tener que transformar la información que al final se convierte en un tiempo de espera para el usuario.

Escalabilidad 🌎

¿Cuánto puede crecer nuestra base de datos con el pasar del tiempo? Debemos considerar dos tipos de escalabilidad:
⬆ Vertical: La capacidad del servidor para que pueda soportar una mayor cantidad de datos.
➡Horizontal: En cuántas máquinas o servidores diferentes se puede dividir la base de datos para repartir o balancear la carga.

Las bases de datos no relacionales (NoSQL) tienen mayor capacidad de dividirse en múltiples máquinas para mejorar el equilibrio, con esto no digo que con las bases de relacionales (SQL) no sea posible, sino que involucra un mayor esfuerzo y mucha custodia al momento de hacer este proceso.

❓ Entonces… ¿cuál elijo?

En realidad va a depender mucho de las características que consideres prioritarias para tu solución, pero como experiencia propia recomiendo optar por una base de datos no relacional por todo lo mencionado. Y considerando esa recomendación me voy por Azure Cosmos DB.

Que es un servicio de base de datos multimodelo distribuido globalmente por Microsof, Cosmos DB permite escalar de forma elástica e individual el rendimiento y el almacenamiento en cualquier número de regiones de Azure a nivel mundial. Puede sacar provecho del rápido acceso a los datos (menos de 10 milisegundos) mediante la API que prefiera, entre las que se incluyen SQL, MongoDB, Cassandra, Tables o Gremlin.

Hay un punto muy importante a considerar también…..
Las políticas tecnológicas de la empresa, si las políticas establecidas dicen que tienen que trabajar con bases de datos relacionales o no relacionales, trabajar específicamente con cierta tecnología, tenemos que alinearnos a esas normas.

Así que, espero que esto aporte en algo a lo que estás buscando y ayude a formar el horizonte adecuado para tu solución.

Referencias

--

--

Yudner Tayson Paredes Flores
My Bots Latam

Software Developer 💻 | Cognitive Services Specialist 🚀 | Soccer⚽ | Game 🎮