Estamos generando datos todos los días. Y también lo son los miles de millones de personas en el mundo. Cada base de datos debe escalarse para abordar la gran cantidad de datos que se generan cada día.
En definitiva, una base de datos tiene que ser escalable para que esté disponible en todo momento. Cuando la memoria de la base de datos se agota o cuando no puede manejar varias solicitudes, no es escalable.
La escalabilidad es la capacidad de un sistema, red o proceso para manejar una cantidad creciente de trabajo, o su potencial para ampliarse para adaptarse a ese crecimiento.
El escalado se puede clasificar en escalado vertical y horizontal.
La elasticidad es el grado en que un sistema puede adaptarse a los cambios en la carga de trabajo mediante el aprovisionamiento y desaprovisionamiento de recursos según demanda, de modo que,
En cada momento, los recursos disponibles coinciden lo más posible con la demanda actual. — NuoDB
Un sistema es elástico cuando se puede escalar fácilmente para abordar las necesidades de recursos de la aplicación en uso.
Fuente : Turbonomic Blog
Imagina que estás comprando un coche nuevo. Tienes un auto Nissan que puede acomodar a 4 personas en él. Ahora, digamos que usted y 10 de sus amigos necesitan irse de vacaciones. ¿Qué harías?
¿Comprarías un coche más grande? — Escala vertical
¿Comprarías un auto Nissan más? — Escala horizontal
Esta es una explicación básica de los dos tipos. Aprendamos dónde se puede usar cada tipo y cuál es mejor.
Fuente: Paquete
El escalado vertical se adoptó cuando la base de datos no podía manejar la gran cantidad de datos.
Suponga que tiene un servidor de base de datos con 10 GB de memoria y se ha agotado. Ahora, para manejar más datos, compra un servidor caro con memoria de 2 TB. Su servidor ahora puede manejar grandes cantidades de datos.
Esto se llama escalado vertical . Está comprando un solo servidor caro y más grande.
El proceso implica agregar más potencia, como CPU y potencia de disco, para mejorar su proceso de almacenamiento.
Tomemos, por ejemplo, Instagram. Cuando se inventó, se dirigió a una pequeña multitud. Entonces, un solo servidor hubiera sido suficiente. Pero ahora, millones de personas usan la aplicación. Es imposible comprar un servidor de este tipo que pueda almacenar todos los datos.
Fuente: Paquete
El escalado horizontal, como se muestra en la imagen, es escalar el servidor horizontalmente agregando más máquinas.
Divide el conjunto de datos y distribuye los datos en varios servidores o fragmentos.
Cada fragmento es una base de datos independiente.
En lugar de comprar un solo servidor de 2 TB, está comprando doscientos servidores de 10 GB.
La escala vertical se enfoca en aumentar la potencia y la memoria, mientras que la escala horizontal aumenta la cantidad de máquinas.
Supongamos que un servidor almacenó información de perfil de usuario, otro almacenó historias y momentos destacados y otro almacenó imágenes.
Ahora, la consulta se dirige a servidores específicos, lo que reduce la carga en el servidor y brinda un mejor rendimiento.
Genial, ¿eh?
Esta es la razón por la que NoSQL usa escalamiento horizontal o fragmentación.
Dado que sigue el concepto de desnormalización , no hay necesidad de un solo punto de verdad. Puede almacenar duplicados.
Por ejemplo, si desea obtener la cantidad frecuente de etiquetas utilizadas, puede mantener una tabla separada con el ID de usuario y la etiqueta utilizada.
NoSQL no sigue ningún concepto de clave externa o normalización.
Escalar es aumentar nuestros recursos para manejar datos y consultas. La replicación consiste en almacenar copias de seguridad de datos actualizados para superar fallas en los nodos.
Las desventajas de este enfoque son que, si el maestro deja de funcionar mientras realiza una escritura, existe la posibilidad de que la información no se actualice en las réplicas esclavas. Entonces, la última transacción podría perderse.
Toma a Casandra por ejemplo.
Considere este ejemplo de claves de partición y sus valores hash Murmur3.
Datos de ejemplo de la documentación de DataStax
Cada valor de datos se almacena de acuerdo con el valor de rango del nodo en el que se encuentra. Fuente: documentación de DataStax