Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Cochabamba – Bolivia
2019
Dedicatoria
II
ÍNDICE DE CONTENIDO
RESUMEN 6
INTRODUCCIÓN 7
1 GENERALIDADES 8
2 METODOLOGÍA 9
3 TEOREMA CAP 9
3.1 Consistencia 9
3.2 Disponibilidad 9
5.1 Redis 14
5.1.2.2 Hashes 17
5.1.2.3 Listas 18
5.1.2.4 Conjuntos 19
5.2 MongoDB 20
5.2.3.4 Referencias 24
5.2.3.8 Relaciones 26
5.3 Cassandra 29
5.3.4.1 Consistencia 31
6 CONCLUSIONES 35
7 BIBLIOGRAFÍA 37
5
RESUMEN
Debido a la tendencia actual del uso masivo de internet, los datos de almacenamiento fueron
creciendo exponencialmente, las bases de datos relacionales experimentaron problemas, que
impiden el buen funcionamiento de los sistemas de algunas de las empresas más importantes de
Internet. Estos datos que son masivamente generados reciben el nombre: BigData,
Palabras clave: Base de datos, Repositorio, SQL, NoSQL, Redis, MongoDB, Cassandra.
6
INTRODUCCIÓN
Las bases de datos NoSQL surgen como una necesidad para el manejo y procesamiento de datos
con una escalabilidad horizontal en las aplicaciones, es decir, la necesidad de mejorar el
rendimiento mediante la adición de nuevos nodos computacionales a los ya existentes, para las
cuales, son útiles cuando se trabaja con una gran cantidad de datos, cuando la naturaleza de los
datos no requiere un modelo relacional.
Al principio del nuevo milenio, los desarrolladores comenzaron a darse cuenta de que sus datos
no encajaban en el modelo relacional y algunos de ellos comenzaron a desarrollar otras
arquitecturas para almacenar grandes cantidades de datos, por lo cual, a la hora de elegir una
base de datos hoy en día, el problema más complejo, es decidir la mejor arquitectura para el
almacenamiento de datos y recuperación de datos.
En la actualidad existen muchos sistemas que poseen inmensas cantidades de datos con
millones de transacciones al día contra la base de datos, por lo cual, si hablamos de bases de
datos NoSQL, existen gran variedad de estas que se clasifican según su forma de almacenar los
datos, y comprenden categorías como clave-valor, base de datos documentales, y bases de datos
orientados a grafos.
Pero el problema principal que encontramos hoy en día, es que, aunque todas se denominan
NoSQL, no sabemos cuál escoger para crear una aplicación adecuada que cumpla con las
expectativas de los clientes.
Por lo tanto, el propósito de este estudio es usar Redis para el manejo de sesión ya que Redis
es una base de datos en memoria. Es mucho más rápido acceder a la información en memoria
que en disco, MongoDB para el manejo de catálogos ya que MongoDB trabaja con información
que no tiene una estructura definida y los datos son cambiantes, Cassandra para hacer data
analytics ya que Apache Cassandra no tiene un punto de fallo, siempre está en funcionamiento
si un nodo falla otro nodo lo reemplaza. Más adelante realizare la explicación de cada una de
estos BDMS.
7
1 GENERALIDADES
El problema de la escalabilidad de SQL fue reconocido por empresas Web 2.0. con grandes
necesidades de datos e infraestructura, como Google, Amazon y Facebook.
Ellos solos tuvieron que buscar soluciones propias a este problema, con tecnologías como
BigTable, DynamoDB, y Cassandra.
El interés creciente dio lugar a una serie de sistemas de gestión de base de datos NoSQL
(DBMS), con un enfoque en el rendimiento, la fiabilidad y la coherencia. Se reutilizaron y
mejoraron varias estructuras de indexación existentes con el propósito de mejorar la búsqueda y
el rendimiento de lectura.
En primer lugar, había tipos de bases de datos NoSQL (de origen cerrado), desarrolladas por
grandes empresas para satisfacer sus necesidades específicas, como BigTable de Google, que
se cree es el primer sistema NoSQL y DynamoDB de Amazon.
El existo de estos sistemas patentados, inicio el desarrollo de bases de datos de código abierto
y de propietarios similares siendo los más populares Hypertable, Cassandra, MongoDB, HBase,
Redis.
8
2 METODOLOGÍA
3 TEOREMA CAP
3.1 Consistencia
Todos los nodos deben garantizar la misma información al mismo tiempo, si insertamos datos
(todos los nodos deben insertar los mismos datos), si actualizamos datos (todos los nodos deben
aplicar la misma actualización a todos los nodos) y si consultamos datos (todos los nodos
devolverán los mismos datos).
Para tal efecto la comunicación entre los nodos debe ser de suma importancia, podríamos, por
ejemplo, emitir confirmación de inserción de un dato, una vez dicho dato se grabó en todos los
nodos de nuestra replica.
3.2 Disponibilidad
9
3.3 Tolerancia al particionado de red
El sistema debe estar disponible así existan problemas de comunicación entre los nodos, cortes
de red que dificulten su comunicación o cualquier otro aspecto que genere su particionamiento.
Por lo general los ambientes distribuidos están divididos geográficamente, donde es normal que
existan cortes de comunicación entre algunos nodos, por lo cual el sistema debe permitir seguir
funcionando, aunque existan fallas que dividan el sistema.
Lo que dice el teorema es que solo puedes garantizar dos de estos tres requerimientos.
Esto quiere decir que no se garantiza la disponibilidad, hay clientes que requieren que el sistema
esté disponible 100% del tiempo o muy cerca, con bases de datos que cumplan con CP no es
posible garantizar esto, no quiero decir que no se pueda lograr en cierto nivel, pero el sistema
está enfocado en aplicar los cambios de forma consistente, aunque se pierda comunicación entre
nodos.
En este caso no se garantiza que los datos sean iguales en todos los nodos todo el tiempo, en
este caso el sistema siempre estará disponible para las peticiones, aunque se pierda la
comunicación entre los nodos.
CA (Consistencia y Disponibilidad)
En este caso no se puede permitir el particionado de los datos, porque se garantiza que los datos
siempre son iguales y el sistema estará disponible respondiendo todas las peticiones.
La definición de Big Data varía según las características de las empresas. Para unas empresas
prima el volumen, para otras la velocidad, para otras la variabilidad de las fuentes. Las empresas
con mucho volumen van a estar interesadas en capturar la información, guardarla, actualizarla e
incorporarlo en sus procesos de negocios; pero hay empresas que, aunque tengan mucho
volumen, no necesitan almacenar, sino trabaja en tiempo real y a gran velocidad.
Una base de datos a gran escala o también llamada “masiva”, permite el almacenamiento y
manipulación de un orden alcanzable a petabytes de cualquier tipo de información diaria. El
crecimiento exponencial de información es directamente aplicable a estas bases de datos.
10
Por ejemplo, la consolidación de las redes sociales sumado a su utilización de forma diaria y
masiva por parte de sus millones de usuarios, llevan a tener que realizar modificaciones que
faciliten la administración de datos. (Soumendra, Madhu. Harsha).
Pese a la no existencia de una definición formal, cuando hablamos de base de datos NoSQL,
también conocidas como “No Solo SQL”, nos referimos a una amplia clase de sistemas de gestión
de datos (mecanismos para el almacenamiento y recuperación de datos) que difieren, en
aspectos importantes, del mundo clásico de relaciones entre entidades (o tablas) existentes en
los sistemas de gestión de bases de datos relacionales, siendo el más destacado el que no usan
SQL como lenguaje principal de consulta.
Aunque son conocidas desde la década de los 60 del pasado siglo, su auge actual viene
determinado por el uso que, de estos sistemas han hecho las principales compañías de internet
como Amazon, Google, Twitter y Facebook. Estas compañías tenían que enfrentarse a nuevos
desafíos en el tratamiento de los datos motivados por el enorme crecimiento de la Web donde
requería dar respuestas a la necesidad de proporcionar información procesada a partir de
grandes volúmenes de datos con unas estructuras horizontales, más o menos, similares y con
aplicaciones Web que debían dar respuesta a las peticiones de un número elevado e
indeterminado de usuarios en el menor tiempo posible. Estas compañías se dieron cuenta de que
el rendimiento y sus necesidades de tiempo real eran más importantes que la consistencia de los
datos, aspecto este último al que las bases de datos relacionales tradicionales dedicaban una
gran cantidad de tiempo de proceso.
Las características comunes entre todas las implementaciones de bases de datos NoSQL suelen
ser las siguientes:
11
cambios realizados “con el tiempo” serán propagados a todos los nodos por lo que, una
consulta podría no devolver los últimos datos disponibles o proporcionar datos inexactos,
problema conocido como lecturas sucias u obsoletas. Asimismo, en algunos sistemas
NoSQL se pueden presentar perdidas de datos en escritura. Esto se conoce también
como BASE (Basically Available Soft-state Eventual Consistency), en contraposición a
ACID (Atomicity, Consistency, Isolation, Durability), su analogía en las bases de datos
relacionales.
Estructura distribuida: Generalmente los datos se distribuyen, entre los diferentes nodos
que componen el sistema. Hay dos estilos de distribución de datos:
Particionado (ó Sharding): El particionado distribuye los datos entre múltiples
servidores de forma que, cada servidor, actúe como única fuente de
un subconjunto de datos. Normalmente, a la hora de realizar esta distribución, se
utilizan mecanismos de tablas de hash distribuidas (DHT).
Réplica: La réplica copia los datos entre múltiples servidores, de forma que cada
bit de datos pueda ser encontrado en múltiples lugares. Esta réplica puede
realizarse de dos maneras:
12
o Réplica maestro-esclavo en la que un servidor gestiona la escritura de la
copia autorizada mientras que los esclavos se sincronizan con este
servidor maestro y sólo gestionan las lecturas.
3. Bases de datos de grafos: Usadas para aquellos datos cuyas relaciones se pueden
representar adecuadamente mediante un grafo. Los datos se almacenan en estructuras
grafo con nodos (entidades), propiedades (información entre entidades) y líneas
(conexiones entre las entidades).
13
4. Base de datos Columnar (o Columna ancha): En vez de “tablas”, en las bases de datos
de columna tenemos familias de columnas que, son los contenedores de las filas. A
diferencia de los RDBMS, no necesita conocer de antemano todas las columnas, cada fila
no tiene por qué tener el mismo número de columnas. Este tipo de bases de datos se
adecuan mejor a operaciones analíticas sobre grandes conjuntos de datos.
Pese a todas las opciones proporcionadas por el auge de las bases de datos NoSQL, esto no
significa la desaparición de las bases de datos de RDBMS ya que son tecnologías
complementarias. Estamos entrando en una era de persistencia políglota, una técnica que utiliza
diferentes tecnologías de almacenamiento de datos para manejar las diversas necesidades de
almacenamiento de datos.
5.1 Redis
Comprender estas cinco estructuras de datos, como funcionan, que métodos exponen y con que
se puede modelar.
La clave para entender a Redis. Si tuviéramos que aplicar este concepto de estructura de datos
al mundo relacional, podríamos decir que las bases de datos exponen una solo estructura de
datos tablas. Las mesas son complejas y flexibles. No hay mucho que no puedas modelar,
almacenar o manipular con mesas, sin embargo, su naturaleza genérica no esta extensa de
inconvenientes.
Específicamente, no todo es tan simple, o tan rápido, como debe ser. ¿Qué pasaría si, en lugar
de tener una estructura única para todos, utilizaríamos estructuras más especializadas? Ahí
podrían ser algunas cosas que podemos hacer (o almenos no podemos hacer muy bien), pero
seguramente ganaríamos en simplicidad y velocidad.
14
¿Usando estructuras de datos específicas para problemas específicos? ¿No es así como
codificamos? No usas una tabla hash (Estructura de datos) para cada pieza de datos, tampoco
utiliza una variable escalar. Para mí, eso define el enfoque de Redis. Si se trata de escalares,
listas, hashes, o sets, ¿Por qué no almacenarlo como escalares, listas, hashes y sets? Por qué
puede comprobar la existencia de uno, el valor puede ser más complejo que la llamada existente
(clave) o más lento que O (1) (búsqueda de tiempo constante que no se ralentizara)
independientemente de cuantos artículos hay.
Redis tiene el mismo concepto básico de una base de datos con la que ya está familiarizado. Una
base de datos contiene un conjunto de datos, el caso de uso típico de una base de datos es
agrupar todos los datos de una aplicación y mantenerlos separados de otras aplicaciones.
En Redis las bases de datos se identifican simplemente con un número siendo la base de datos
predeterminada.
Aunque Redis es más que un simple almacén de conjuntos clave-valor, en su núcleo, cada una
de las cinco estructuras de datos de Redis tiene al menos una clave y un valor. Es indispensable
que entendamos los conceptos de clave valor antes de continuar con el resto de elementos de
información.
Las claves son lo que vamos a utilizar para identificar conjuntos de datos. Vamos a tratar mucho
con claves, pero por ahora es suficiente con saber que una clave tiene un aspecto similar a
users:leto. Uno podría esperar razonablemente que una clave como esta contuviese información
sobre un usuario llamado leto. La coma no tiene ningún significado es especial, pero en lo relativo
a Redis, es utilizado como un separador común para organizar las claves.
Los valores representan los datos que se encuentran relacionados con la clave. Pueden ser
cualquier cosa. A veces almacenaras cadenas de texto, a veces numero enteros, a veces
almacenaras objetos serializados (como JSON, XML o cualquier otro formato). La mayor parte
de las veces Redis tratará los valores como arrays de bytes y no se preocupará de su tipo. Hay
que tener en cuenta que los distintos controladores gestionan la serialización de modos distintos
(algunos te dejaran a ti) de tal modo que solo hablaremos de cadenas de texto, numero enteros
y objetos JSON.
15
Ejemplo.
Esta es la anatomía básica de un comando Redis. En primer lugar, tenemos el comando a utilizar,
en este caso set. Después tenemos sus parámetros. El comando set recibe dos parámetros. La
clase sobre la cual establecemos el valor, el valor que estamos estableciendo. Muchos
comandos, aunque no todos reciben una clave (cuando lo hacen, es a menudo el primer
parámetro).
Los únicos elementos que hemos visto hasta ahora son comandos, claves y valores. Hasta ahora
no hemos concentrado nada acerca de la estructura de datos. Cuando empleábamos el comando
set, como sabia Redis que tipo de datos debería usar, cada comando es específico para cada
estructura de datos. Por ejemplo, cuando utilizas el comando set estas almacenando el valor en
una estructura de cadenas de texto. Cuando utilizas hset lo estas almacenando en una tabla
hash. Dado el pequeño tamaño del vocabulario de Redis, es muy manejable.
Las cadenas de texto son las estructuras de datos más básicas disponibles en Redis. Cuando
piensas en un par clave-valor estás pensando en cadenas de texto. Independientemente al
nombre de la clave, el valor puede ser cualquier cosa. Prefiero llamarlos “escalares”.
Ya hemos visto un caso de uso común de empleo de cadenas de texto, almacenando instancias
de objetos por clave.
Adicionalmente, Redis te permite realizar algunas operaciones comunes. Por ejemplo, se puede
utilizar strlen <key> para calcular la longitud del valor de la clave; getrange <key> <start> <end>
devuelve la subcadena de texto en el rango indicado; append <key> <value> añade el alor al final
del valor existente (o crea uno si no existe ninguno todavía). Probamos.
16
Figura 1, Probando Redis
No es importante entender cómo funciona los mapas de bits, o como Spool los utiliza, si no
entender que las cadenas de texto de Redis son más potentes de lo que pueden parecer a simple
vista. Una vez más, los casos de uso más comunes son los que comentamos anteriormente: el
almacenamiento de objetos y los contadores. Además, puesto que recuperar un valor a través de
su clave es tan rápido.
5.1.2.2 Hashes
los hashes son un buen ejemplo de por qué no es acertado decir que Redis es un almacén de
clave-valor. Como posiblemente sepas, en cierta manera, los hashes son como las cadenas de
texto. La diferencia más importante es que los hashes incluyen un nivel extra de indireccion: un
campo.
Podemos dar valor a varios campos a la vez, obtener varios campos a la vez, recuperar todos los
campos y sus valores, mostrar todos los campos o borrar un campo especifico.
17
Como puedes ver los hashes nos dan algo más de control de lo que nos daban las cadenas de
texto. En lugar de almacenar un usuario como un valor serializado podemos almacenar un hash
con una representación más acertada. El beneficio que se obtiene de ellos es el poder acceder y
actualizar/borrar trozos concretos de datos sin tener que recuperar o escribir el valor entero.
Mirando los hashes desde la perspectiva de objetos bien definidos, como usuario, es primordial
entender cómo funcionan. Y es cierto que, por motivos de rendimiento, puede ser útil un control
con un grano más fino.
5.1.2.3 Listas
Las listas permiten almacenar y manipular un conjunto de valores dada una clave concreta. Puede
añadir a la lista, recuperar el primer o el ultimo valor y manipular valores de una posición concreta.
Las listas mantienen un orden y son eficientes al realizar operaciones basadas en su índice.
Podemos tener una lista llamada newusers en la que guardar los usuarios registrados más
recientemente en nuestra web.
Esta es además la primera vez que vamos a ver el valor de una clave referenciando el valor de
otra. Si queremos recuperar los detalles de los últimos 10 usuarios, podemos hacer la siguiente
combinación:
18
Por supuesto las listas son buenas únicamente para almacenar referencias a otras claves. Los
valores pueden ser cualquier cosa. Puedes usar listas para almacenar trazas de log o registrar el
camino que está siguiendo un usuario a través de una aplicación. Si estas construyendo un juego
puedes usarlo para registrar las acciones que realiza un usuario.
5.1.2.4 Conjuntos
Los conjuntos se emplean para almacenar valores únicos y facilitan un número de operaciones
útiles para tratar con ellos, como las uniones. Los conjuntos no mantienen orden, pero brindan
operaciones eficientes basándose en los valores. Una lista de amigos es el ejemplo clásico de
uso de conjuntos.
Es más, podemos saber cuándo dos o más personas tienen los mismos amigos:
Los conjuntos son muy buenos para etiquetar o registrar propiedades de un valor para los cuales
los duplicados no tengan sentido (o para aquellos escenarios en los que queramos realizar
operaciones como intersecciones o uniones).
19
5.1.2.5 Conjuntos Ordenados
La última y más poderosa estructura de datos son los conjuntos ordenados. Si los hashes son
como las cadenas de texto, pero con campos, entonces los conjuntos ordenados son como los
conjuntos, pero con una puntuación. La puntuación facilita la ordenación y la capacidad de
establecer un ranking. Si queremos tener una lista de amigos con ranking, podemos hacer:
¿Cómo encontramos cuantos amigos tiene duncan con una puntuación de 90 o más?
Utilizamos zrevrank en lugar de zrank porque la ordenación por defecto de Redis ordena de
menor a mayor valor (pero, en este caso, queremos ordenar de mayor a menor valor). El caso de
uso más obvio para los conjuntos ordenados son los sistemas de clasificación. En realidad,
cualquier cosa que quieras ordenar en base a un valor entero, que sea capaz de ser manipulable
eficientemente en base a su puntuación, puede encajar bien en un conjunto ordenado.
5.2 MongoDB
MongoDB (de la palabra en inglés “humongous” que significa enorme, gigantesco) es un sistema
de base de datos NoSQL orientado a documentos, desarrollado bajo el concepto de código
abierto.
MongoDB forma parte de la nueva familia de sistemas de base de datos NoSQL. En vez de
guardar los datos en tablas como lo hacen las bases de datos relacionales, MongoDB guarda
estructuras de datos en documentos tipo JSON con un esquema dinámico (MongoDB llama ese
formato BSON), haciendo que la integración de los datos en ciertas aplicaciones sea más fácil y
rápida.
20
que se trata de un software de licencia libre. Funciona en sistemas operativos Windows, Linux,
OS X y Solaris.
Un registro en MongoDB es un documento, que es una estructura de datos compuesta por pares
de campos y valores. Los documentos de MongoDB son similares a los objetos JSON. Los
valores de los campos pueden incluir otros documentos, matrices y matrices de documentos.
Fuente: https://docs.mongodb.com/
21
5.2.2 Características clave de MongoDB
Agregación de datos
Búsqueda de textos y consultas geoespaciales.
Fuente: https://docs.mongodb.com/manual/
22
5.2.3 Estructura y Modelado de MongoDB
A diferencia de las bases de datos SQL, donde se debe determinar y declarar el esquema de una
tabla antes de insertar los datos, las colecciones de MongoDB no requieren que sus documentos
tengan el mismo esquema, es decir:
Los documentos en una sola colección no necesitan tener el mismo conjunto de campos
y el tipo de datos para un campo, puede diferir entre los documentos dentro de una
colección
Para cambiar la estructura de los documentos en una colección, como agregar nuevos
campos, eliminar campos existentes o cambiar valores de los campos a un nuevo tipo los
Actualiza los documentos a la nueva estructura.
Esta flexibilidad facilita la asignación de documentos a una entidad o un objeto. Cada documento
puede coincidir con los campos de datos de la entidad representada, incluso si el documento
tiene una variación sustancial de otros documentos.
Sin embargo, en la práctica los documentos de una colección comparten una estructura similar y
pueden aplicar reglas de validación de documentos para una colección durante las operaciones
de actualización e inserción.
La decisión clave en el diseño de modelos de datos para aplicaciones MongoDB gira en torno a
la estructura de los documentos y como la aplicación representa las relaciones entre los datos.
MongoDB permite incrustar datos relacionados en un solo documento.
Los documentos incrustados capturan las relaciones entre los datos almacenando los datos
relacionados en una única estructura de documento. Los documentos de MongoDB permiten
incrustar estructuras de documentos en un campo o matriz dentro de un documento. Estos
23
modelos de datos desnormalizados permiten que las aplicaciones recuperen y manipulen datos
relacionados en una sola operación de base de datos.
Fuente: https://docs.mongodb.com/manual/
5.2.3.4 Referencias
Las referencias almacenan las relaciones entre los datos al incluir enlaces o referencias de un
documento a otro. Las aplicaciones pueden resolver estas referencias para acceder a los datos
relacionados. En general estos son modelos de datos normalizados.
Fuente: https://docs.mongodb.com/manual/
24
5.2.3.5 Atomicidad de Documento único
Un modelo de datos desnormalizado con datos incrustados combina todos los datos relacionados
en un solo documento en lugar de normalizarse en múltiples documentos y colecciones. Este
modelo de datos facilita las operaciones atómicas.
Cuando una sola operación de escritura (por ejemplo, db.collection.updateMany()) modifica varios
documentos, la modificación de cada documento es atómica, pero la operación en su conjunto
no es atómica.
Al realizar operaciones de escritura de varios documentos, ya sea a través de una sola operación
de escritura o múltiples operaciones de escritura, otras operaciones pueden intercalarse.
A partir de la versión 4.0, para situaciones que requieren atomicidad para las actualizaciones de
múltiples documentos o la coherencia entre las lecturas de múltiples documentos, MongoDB
proporciona transacciones de múltiples documentos para conjuntos de réplicas.
Al diseñar un modelo de datos, considere como las aplicaciones utilizaran su base de datos. Por
ejemplo, si su aplicación solo utiliza documentos recientemente insertados, considere usar
colecciones limitadas. O si las necesidades de su aplicación son principalmente operaciones de
lectura a una colección, agregar índices para admitir consultas comunes puede mejorar el
rendimiento.
25
5.2.3.8 Relaciones
Las relaciones en MongoDB se entiende como la información que se puede encontrar asociada
a un mismo documento o referenciada.
a) Relaciones 1 a 1
Estas relaciones se utilizan cuando tenemos relacionada un conjunto de información que
corresponde a una entidad de datos. Dicha entidad de datos puede ser relacionada o
embebida según (MongoDB). Es decir que podemos representar de dos maneras
relaciones 1 a 1 representadas en los siguientes ejemplos.
Figura 6, Relaciones 1 a 1
Fuente: https://docs.mongodb.com/manual
26
En este ejemplo se muestra que para acceder al nombre que se encuentra en el primer
documento, se debe acceder a “patrón_id” y luego acceder al primer documento para acceder al
nombre. La desventaja que tiene se debe realizar una consulta adicional para obtener una
información que es propia de una misma entidad.
Fuente: https://docs.mongodb.com/manual
b) Relaciones 1 a N (Muchos)
Estas relaciones se utilizan cuando se relaciona un documento que posee referencias a
más de un documento. Se muestran los siguientes ejemplos que muestra la manera de
representar estos tipos de relaciones.
27
Figura 8, Relación 1 a N (Muchos)
Fuente: https://docs.mongodb.com/manual
Este ejemplo representa un modelo normalizado que los documentos “address” contienen
referencias al documento “patrón”. En este caso en particular, necesitamos al menos dos
consultas para obtener todos los datos completos relacionados.
28
Figura 9, Relación 1 a N (Embebido)
Fuente: https://docs.mongodb.com/manual
5.3 Cassandra
Cassandra es un sistema de gestión de bases de datos desarrollado por Facebook, cuyo objetivo
era crear un DBMS sin fallos y que proporcione la máxima disponibilidad.
29
Esto se consigue proporcionando un sistema de clave valor. Pero la clave de Cassandra apuntan
a un conjunto de familias de columnas, dependiendo del sistema de archivos distribuido
“BigTable” de Google y de las características de disponibilidad de DynamoDB (tabla hash
distribuida).
Cassandra está diseñado para almacenar enormes cantidades de datos distribuidos a través de
diferentes nodos. Cassandra es un DBMS diseñado para manejar cantidades masivas de datos,
repartidos entre muchos servidores, mientras que proporciona un servicio altamente disponible
sin un solo punto de fallo, lo cual es esencial para un gran servicio como Facebook.
Para que esto se consiga, Cassandra debe funcionar como un racimo de nodos. Eso no significa
que los datos de cada clúster serán los mismos, sin embargo, si debe serlo el software de gestión.
Cuando ocurre un fallo en uno de los nodos, los datos en ese nodo serán inaccesibles. Sin
embargo, otros nodos seguirán siendo accesibles.
Cassandra utiliza Apache Thrift para su interfaz de cliente. Apache Thrift ofrece un cliente RPC
en varios idiomas, pero la mayoría de los desarrolladores prefieren alternativas de código abierto
construidas sobre Apple Thrift, como Hector.
5.3.4.1 Consistencia
Funciones como la replicación, hacen que la consistencia sea un desafío. Esto se debe al hecho
de que todos los nodos deben estar actualizados en cualquier punto en el tiempo con los valores
más recientes. Sin embargo, Cassandra intenta mantener un equilibrio entre las acciones de
replicación y las acciones de lectura/escritura proporcionando esta personalización al
desarrollador.
El cliente envía una solicitud a un único nodo de Cassandra. El nodo, de acuerdo con la
política de replicación, almacena los datos en el clúster. Cada nodo realiza primero el cambio
de datos en el registro de confirmación, a continuación, actualiza la estructura de la tabla con
el cambio, ambos realizados de forma sincrónica. La operación de lectura es también muy
similar, una petición de lectura se envía a un solo nodo y ese único nodo es el que determina
qué nodo contiene los datos, de acuerdo con la política de partición/ ubicación.
Como ya hemos comentado las bases de datos NoSQL no existe un modelo de datos fijo, sino
que es flexible y dinámico y como no iba a ser de otra forma, ocurre lo mismo con Apache
Cassandra. Conlleva que la estructura creada por una base de datos depende del tipo de
consultas que se vayan a realizar. A Cassandra podemos catalogarlo como una base de datos
clave-valor, por ello utiliza los siguientes conceptos:
Column: Es el nivel más bajo que hay, se trata de una estructura con 3 campos, que son:
el nombre de la columna, el valor que tiene y el timestamp. El timestamp contiene el
momento (fecha, hora en milisegundos) en la cual se ha realizado la inserción.
Por naturaleza, Cassandra es una base de datos distribuida. Eso significa que fue diseñada para
ejecutarse en una red de nodos de computadoras, funcionando como un servidor que tiene
31
diferentes partes que se ejecutan en diferentes maquinas sin ningún hardware o software
específico para gestionar o coordinar. Toda la coordinación de los nodos y la distribución de los
datos están dentro de su propia arquitectura. Esta es una de las razones por las que una red de
Cassandra es más barata y fácil de escalar de forma horizontal. La topología típica de Cassandra,
está compuesta por un clúster de nodos, también llamado anillo de Cassandra, que se ejecuta
en diferentes direcciones de red que están ubicadas en servidores físicos diferentes.
Fuente: http://www.datastax.com/
Esta función incrementa la disponibilidad de la red en caso de fallo de un nodo. Cada nodo puede
coordinar la solicitud de un cliente sin un nodo maestro, para que no haya un punto único de fallo.
También le permite establecer diferentes estrategias de configuración para que los datos sean
consistentes de las diferentes ubicaciones de los nodos, por lo tanto, incrementa aún más la
disponibilidad del sistema.
32
Análisis de Datos
El análisis de datos (Data Analytics, o DA) es la ciencia que examina los datos en bruto con el
propósito de sacar conclusiones sobre la información. El análisis de datos es usado en varias
industrias para permitir que las compañías y las organizaciones tomen mejores decisiones
empresariales y también es usado en las ciencias para verificar o reprobar modelos o teorías
existentes. El análisis de datos se distingue de la extracción de datos por su alcance, su propósito
y su enfoque sobre el análisis. Los extractores de datos clasifican inmensos conjuntos de datos
usando software sofisticado para identificar patrones no descubiertos y establecer relaciones
escondidas. El análisis de datos se centra en la inferencia, el proceso de derivar una conclusión
basándose solamente en lo que conoce el investigador.
El término “análisis “ha sido usado por varios proveedores de software de inteligencia de negocios
como una palabra de moda que describe varias funciones. El análisis de datos se usa para
describirlo todo, desde el procesamiento analítico en línea (OLAP, por sus siglas en inglés) hasta
el análisis CRM en centros de llamadas. Los bancos y las compañías de tarjetas de crédito, por
ejemplo, analizan los retiros y los patrones de gasto para prevenir el fraude o robo de identidad.
Las compañías de comercio electrónico (Ecommerce) examinan el tráfico en el sitio web o los
patrones de navegación para determinar que clientes son más o menos propensos a comprar un
cierto producto o servicio, basándose en compras previas o patrones de visualización. El análisis
de datos moderno normalmente usa tableros de información que se basan en flujos de datos en
tiempo real. El llamado análisis en tiempo real implica análisis e informes dinámicos basados en
los datos que introducimos en un sistema un minuto antes del tiempo actual de uso.
33
Si bien cada empresa tiene sus propios requisitos y objetivos al recopilar y analizar datos, hay
pasos que se mantienen consistentes en todas las organizaciones y sus procesos para explotar
la información que queremos compartirte.
Determina los objetivos de los equipos de ciencia de datos para desarrollar una forma
cuantificable de determinar si el negocio está avanzando hacia sus objetivos, identificar las
métricas o los indicadores de desempeño temprano.
Identifica las posibilidades comerciales y las métricas al inicio de los proyectos de análisis de
datos para dar alcance y enfoque. Esto significa que la empresa debe estar dispuesta a realizar
cambio para mejorar sus métricas clave y alcanzar sus objetivos también.
Haz siempre una limpieza de toda la información recopilada. Mejora la calidad de los datos para
generar resultados correctos y evitar sacar conclusiones incorrectas. Hay que automatizar el
proceso e involucrar a los empleados para supervisar la limpieza y garantizar la precisión de los
datos.
34
6 CONCLUSIONES
En una plataforma web que acceden miles de usuarios registrados por hora. Cada vez que un
usuario visita una página de la plataforma, tiene que hacer varias consultas a la base de datos
para saber si ese usuario con esa cookie está registrado y está autorizado para ver esa página.
Si por ejemplo tenemos 10.000 usuarios por hora y cada usuario navega por la plataforma unas
50 veces, querrá decir que tendremos que hacer medio millón de consultas a la base de datos
por hora, conectarte, mandarle los datos, esperar a que responda, procesar la información y
devolverla al usuario.
Esto con Redis no pasaría ya que, si se “cachea” la primera vez los datos del usuario,
ahorraríamos 490.000 consultas de verificación por hora. Al final de día ahorraríamos más de 11
millones de peticiones a la base de datos para ver si el usuario esta autentificado. Redis es una
base de datos en RAM que gracias a que nos permite ahorrarnos millones de conexiones con la
base de datos principal conseguimos que nuestra plataforma sea muchísimo más rápida.
MongoDB para el modelo de negocio, ya que MongoDB plantea un modelo de datos orientado a
documentos, utilizando BSON como formato de almacenamiento. BSON no es más que JSON
codificado de manera binaria. JSON tiene estructuras afines en muchos lenguajes de
programación (C, JAVA, JAVASCRIPT, ….) pero no depende de ninguno de ellos.
En MongoDB los documentos se agrupan en colecciones. Podemos decir que los documentos
juegan un papel similar al que juegan los registros de las bases de datos relacional. Las
colecciones son parecidas a las tablas de las bases de datos relacionales, aunque no imponen
una estructura fija a los documentos que contienen, ni siquiera al tipo de cada campo.
En MongoDB la estructura de los datos, es implícita, flexible y dinámica, implícita porque lo normal
es que los documentos de una colección compartan estructura, y esta no se declara de manera
explícita antes de introducir documentos, flexible porque esa estructura no se impone a ningún
documento, dinámica por que la estructura puede cambiar.
En MongoDB no tenemos que crear ni modificar. Podemos almacenar los nuevos documentos,
posiblemente con una estructura distinta a los anteriores, en la misma colección, o en una nueva.
En el primer caso no tenemos que modificar la estructura de la colección, puesto que esto no
existe. Y en el segundo caso no tenemos que crear la colección, puesto que esta se crea de
35
manera automática cuando introducimos el primer documento. Así que no va hacer ningún tipo
de comprobación sobre la estructura de un documento, ni sobre la validez o tipo de campos que
lo componen. Si queremos hacer esto, tendremos que hacerlo en la propia aplicación. Esta
flexibilidad a la hora de trabajar con información que varía, es muy útil en fases iniciales de
proyectos, durante las cuales las especificaciones cambian a menudo. O trabajamos con
información que no cuenta con una estructura fija.
Cassandra, para data analytics, actualmente usado por grandes corporaciones para sus
aplicaciones, como es el caso de Apple, con 75000 nodos que guardan más de 10 PB de datos,
Netflix con 2500 nodos y almacena 420TB, o eBay con 100 nodos almacena 250 TB.
Informes y visualización de datos: la información puede ser entregada para ser comprendida
mediante informes y gráficos que se manejan desde Excel, PowerBI, Reporting Service,
aplicaciones a medida, QlikView, PeriscopeData, Tableau, Google Data Studio.
36
7 BIBLIOGRAFÍA
Soumendra, M., Madhu, J., & Harsha, S. (2013). Big Data Imperatives: Enterprise ‘Big Data’
Warehouse, ‘BI’ Implementations and Analytics. Apress.
Jhon Alexander ,(30 de junio de 2016), Teorema CAP, Fecha de consulta: mayo de 2019.
Recuperado de: http://blog.jacagudelo.com/teorema-cap/
Redis, (2019). Who's using Redis?. Fecha de consulta: mayo de 2019. Recuperado de:
https://redis.io/topics/whos-using-redis
Redis, (2019). Do You Really Know Redis?. Fecha de consulta: junio de 2019. Recuperado de:
https://redislabs.com/docs/really-know-redis/
Cassandra, (2019). Apache Cassandra. Fecha de consulta: junio de 2019. Recuperado de:
https://pandorafms.com/blog/es/bases-de-datos-nosql/
37
Cassandra, (2019). Patterns of Successful Cassandra Data Modelling. Fecha de consulta: junio
de 2019. Recuperado de: https://opencredo.com/blogs/cassandra-data-modelling-patterns/
Cassandra y MongoDB. (2019). Cuando Usar Cassandra, Cuando Usar MongoDB. Fecha de
consulta: junio de 2019. Recuperado de:
http://www.solocodigoweb.com/blog/2018/05/18/cuando-usar-cassandra-cuando-usar-mongodb/
Cassandra, (2017). Que es la base de datos Cassandra Big Data. Fecha de consulta junio de
2019. Recuperado de: https://itsoftware.com.co/content/que-es-la-base-de-datos-apache-
cassandra/
Paul Lara, (2 de julio de 2018), Que es data analitycs y para qué sirve. Fecha de consulta: junio
de 2019. Recuperado de: https://telcelempresas.com/que-es-la-data-analytics-y-para-que-sirve/
38