
Una de las decisiones más importantes que toma un desarrollador es qué base de datos utilizar. Durante muchos años, las opciones se han limitado a diversas variantes de bases de datos relacionales que soportaban el lenguaje de consulta estructurado (SQL). Estas incluyen MS SQL Server, Oracle, MySQL, PostgreSQL, DB2 y muchas más.
En los últimos 15 años, han surgido muchas nuevas bases de datos en el enfoque No-SQL. Estas incluyen almacenes de clave-valor, como Redis y Amazon DynamoDB, bases de datos de columnas anchas como Cassandra y HBase, almacenes de documentos como MongoDB y Couchbase, así como bases de datos de grafos y motores de búsqueda como Elasticsearch y Solr.
En este artículo, intentaremos comprender SQL y NoSQL sin profundizar en su funcionalidad.
Además, nos divertiremos un poco en el proceso.
Explicando SQL a la abuela
Abuela, imagina que no soy tu único nieto. En cambio, mamá y papá se amaban como conejitos, tuvieron 100 hijos, luego adoptaron otros 50.
Entonces, amas a todos nosotros y no quieres olvidar ninguno de nuestros nombres, fechas de cumpleaños, sabores favoritos de helado, tallas de ropa, pasatiempos, nombres de cónyuges, nombres de descendientes y otros datos súper importantes. Sin embargo, seamos realistas. Tienes 85 años y tu buena memoria simplemente no puede manejarlo.
Afortunadamente, yo, siendo el más inteligente de tus nietos, puedo ayudar. Así que vengo a tu casa, saco unas hojas de papel y te pido que hornees galletas antes de que empecemos.
En una hoja de papel, hacemos una lista titulada “Nietos”. Cada nieto está anotado con información relevante sobre él, incluyendo un número único que ahora representará qué nieto es. Además, para mantener la organización, anotamos los atributos nombrados en la parte superior de la lista para que siempre sepamos qué información contiene esa lista.
id
name
fecha de nacimiento
última visita
talla de ropa
sabor de helado favorito
adoptado
1
Jimmy
09-22-1992
09-01-2019
L
Chocolate con menta
false
2
Jessica
07-21-1992
02-22-2018
M
Camino rocoso
true
…¡seguimos con la lista!
Lista de nietos
Después de un tiempo, te familiarizas con todo y casi hemos terminado con la lista. Sin embargo, te vuelves hacia mí y dices: «¡Olvidamos agregar un espacio para los cónyuges, los pasatiempos, los nietos!» Pero no, ¡no olvidamos! Eso sigue después y requiere una nueva hoja de papel.
Así que saco otra hoja de papel, y en ella nombramos la lista Cónyuges. Nuevamente estamos agregando atributos que son importantes para nosotros al principio de la lista y comenzamos a agregar en las filas.
id
grandchild_id
name
fecha de nacimiento
1
2
Juan
06-01-1988
2
9
Fernanda
03-05-1985
…¡más cónyuges!
Lista de cónyuges
En esta etapa le explico a la abuela que si quiere saber quién está casado con quién, solo tiene que emparejar id en la lista nietos con grandchild_id en la lista de cónyuges.
Después de un par de galletas necesito una siesta. "¿Puedes seguir, abuela?" Me voy a descansar.
Regreso después de unas horas. ¡Eres genial, abuela! Todo se ve excelente, excepto la lista de pasatiempos. Hay alrededor de 1000 pasatiempos en la lista. La mayoría se repiten; ¿qué pasó?
grandchild_id
hobby
1
montar en bici
4
montar en bici
3
montar en bici
7
running
11
montar en bici
…¡continuemos!
Lo siento, ¡lo olvidé por completo! Usando una lista, solo podemos rastrear de pasatiempos. Luego, en otra lista, necesitamos rastrear nietos, que están haciendo esto de pasatiempos. Vamos a llamarlo «Lista común». Al ver que no te gusta, empiezo a preocuparme y regreso a modo de lista.
id
hobby
1
montar en bici
2
running
3
natación
…¡más pasatiempos!
Lista de pasatiempos
Tan pronto como tengamos nuestra lista de pasatiempos, creamos nuestra segunda lista y la llamamos «Intereses de los nietos».
grandchild_id
hobby_id
4
1
3
1
7
2
…¡más!
Lista común de pasatiempos de los nietos
Después de todo este trabajo, la abuela ahora tiene un sistema genial para recordar a toda su increíble familia grande. Y luego, para mantenerme un poco más, me hace la pregunta mágica: "¿De dónde aprendiste a hacer todo esto?"
Bases de datos relacionales
Una base de datos relacional es un conjunto de tablas formalmente descritas (en nuestro ejemplo, hojas) que se pueden acceder a los datos o reunir de diversas maneras sin necesidad de reorganizar las tablas base de datos. Existen muchos tipos diferentes de bases de datos relacionales, pero desafortunadamente la lista en papel no es una de ellas.
Una característica distintiva de las bases de datos relacionales más populares es el lenguaje de consulta SQL (Structured Query Language). Gracias a esto, si la abuela traslada su sistema de memoria a la computadora, podrá obtener rápidamente respuestas a preguntas como: "¿Quién no me visitó el año pasado, está casado y no tiene pasatiempos?"
Uno de los sistemas de gestión de bases de datos SQL más populares es MySQL, de código abierto. Se implementa principalmente como un sistema de gestión de bases de datos relacionales (RDBMS) para aplicaciones de software basadas en tecnologías web.
Algunas características clave de MySQL:
- Es bastante conocida, se utiliza ampliamente y ha sido rigurosamente probada.
- Hay muchos desarrolladores calificados con experiencia en SQL y bases de datos relacionales.
- Los datos se almacenan en diferentes tablas, lo que permite establecer relaciones fácilmente utilizando claves primarias y foráneas (identificadores).
- Es fácil de usar y eficiente, lo que lo hace ideal para empresas grandes y pequeñas.
- El código fuente está bajo la Licencia Pública General de GNU.
Ahora olvida TODO.
Explicamos NoSQL a la abuela
Abuela, tenemos una familia enorme. ¡Hay 150 nietos! Muchos de ellos están casados, tienen hijos, tienen hobbies, y más. A tu edad, es imposible recordar todo sobre todos nosotros. Lo que necesitas es un sistema de recuerdos.
Afortunadamente, yo, no deseando que olvides mi cumpleaños y mi sabor de helado favorito, puedo ayudarte. Así que voy a la tienda más cercana, compro un cuaderno y regreso a tu casa.
El primer paso que doy es escribir "Nietos" en letras grandes y negritas en la portada del cuaderno. Luego paso a la primera página y empiezo a escribir todo lo que debes recordar sobre mí. En unos minutos, la página se ve más o menos así.
{
"_id":"dkdigiye82gd87gd99dg87gd",
"name":"Cody",
"birthday":"09-12-2006",
"last_visit":"09-02-2019",
"clothing_size":"XL",
"favorite_ice_cream":"Fudge caramel",
"adopted":false,
"hobbies":[
"video games",
"computers",
"cooking"
],
"spouse":null,
"kids":[
],
"favorite_picture":"file://scrapbook-103/christmas-2010.jpg",
"misc_notes":"¡Prefiere pastel de helado en su cumpleaños en vez de pastel de chocolate!"
} Yo: “¡Parece que todo está listo!”
Abuela: “Espera, ¿qué pasa con los otros nietos?”
Yo: “Sí, cierto. Entonces, dediquemos una página para cada uno.”
Abuela: “¿Y tendré que escribir toda la misma información para todos, como lo hice contigo?”
Yo: “No, solo si quieres. Déjame mostrarte.”
Tomando un bolígrafo de la abuela, paso la página y rápidamente escribo la información sobre mi primo que menos me gusta.
{
"_id":"dh97dhs9b39397ss001",
"name":"Tanner",
"birthday":"09-12-2008",
"clothing_size":"S",
"friend_count":0,
"favorite_picture":null,
"remember":"Nació el mismo día que Cody, pero no es tan importante"
}Cada vez que la abuela necesita recordar algo sobre uno de los nietos, solo tiene que ir a la página correcta en el cuaderno de los nietos. Toda la información sobre ellos estará guardada justo ahí, en su página, que podrá cambiar y actualizar rápidamente.
Cuando todo ya está hecho, ella hace la mágica pregunta: "¿Dónde aprendiste a hacer todo esto?"
Bases de datos NoSQL
Hay muchas bases de datos NoSQL (“no solo SQL”). En nuestros ejemplos hemos mostrado una base de datos de documentos. Las bases de datos NoSQL modelan los datos de maneras que excluyen las relaciones tabulares utilizadas en las bases de datos relacionales. Estas bases de datos se hicieron populares a principios de los años 2000 entre las empresas que necesitaban la agrupación de bases de datos en la nube debido a sus claras necesidades de escalabilidad (por ejemplo, Facebook). En tales aplicaciones, la coherencia de los datos era mucho menos importante que el rendimiento y la escalabilidad.
Al principio, las bases de datos NoSQL se utilizaban a menudo para tareas especializadas de gestión de datos. Principalmente, cuando se trataba de aplicaciones web y en la nube, las bases de datos NoSQL manejaban y distribuían grandes volúmenes de datos. A los ingenieros que trabajaban con NoSQL también les gustaba la flexibilidad del esquema de datos (o su completa ausencia), por lo que se podían realizar cambios rápidos en las aplicaciones actualizadas.
Características clave de NoSQL:
- Una forma de almacenamiento de datos muy flexible
- Escalabilidad horizontal a clústeres
- Posible consistencia sobre persistencia / distribución
- Documentos que se identifican utilizando claves únicas
Comparación detallada
MySQL requiere un esquema definido y estructurado.
NoSQL permite almacenar cualquier dato en un "documento".
MySQL cuenta con una enorme comunidad.
NoSQL tiene una comunidad pequeña y en rápido crecimiento.
NoSQL se caracteriza por su facilidad de escalamiento.
MySQL necesita más capacidad de gestión.
MySQL utiliza SQL, que se aplica en muchos tipos de bases de datos.
NoSQL es una base de datos basada en el diseño con implementaciones populares.
MySQL utiliza un lenguaje estándar de consultas (SQL).
NoSQL no utiliza un lenguaje estándar de consultas.
MySQL tiene muchas excelentes herramientas de informes.
NoSQL tiene algunas herramientas de informes que son difíciles de estandarizar.
MySQL puede presentar problemas de rendimiento para grandes datos.
NoSQL ofrece un excelente rendimiento en grandes datos.
Pensamientos sobre 8base
Puedes realizar , en la que trabajo, proporcionamos un área de trabajo para cada proyecto con la base de datos relacional Aurora MySQL, que está alojada en AWS. Aunque NoSQL es una opción lógica cuando los requisitos de su aplicación demandan alto rendimiento y escalabilidad, creemos que la estricta coherencia de los datos proporcionada por el SGBD es necesaria al crear aplicaciones SaaS y otro software empresarial.
Para startups y desarrolladores que crean aplicaciones empresariales que requieren informes, integridad transaccional y modelos de datos bien definidos, invertir en trabajar con bases de datos relacionales es, en nuestra opinión, la decisión correcta.
Aprenda más sobre el desarrollo con Aurora, Serverless y GraphQL a través de 8base.com .
Fuente: habr.com
