Este documento resume el contenido del tercer curso de la especialización en ingeniería de datos. En este curso, se profundiza en el almacenamiento de datos y las consultas, temas fundamentales para el trabajo de un ingeniero de datos.
El almacenamiento de datos puede visualizarse como una jerarquía que incluye:
| Nivel | Ejemplos |
|---|---|
| Elementos Físicos | Discos magnéticos, unidades de estado sólido, RAM |
| Sistemas de Almacenamiento | Bases de datos, almacenamiento de objetos |
| Abstracciones de Almacenamiento | Almacenes de datos, lagos de datos, casas de lagos de datos |
El curso enfatiza la importancia de tener experiencia en soluciones de almacenamiento y consultas para el éxito en cada etapa del ciclo de vida de la ingeniería de datos. Se espera que los participantes se sientan entusiasmados por los temas a cubrir y la relevancia de estos en su trabajo diario como ingenieros de datos.
¡Comencemos!
El almacenamiento de datos es un componente crítico y complejo en el ciclo de vida de la ingeniería de datos. Este documento resume los conceptos clave sobre el almacenamiento de datos, su jerarquía, y las tecnologías involucradas en el proceso de ingesta, transformación y entrega de datos.
El almacenamiento de datos afecta aspectos fundamentales como: - Costo - Rendimiento - Experiencia del usuario final
El almacenamiento abarca todas las etapas del ciclo de vida de los datos: - Sistemas de origen - Ingesta - Transformación - Suministro a usuarios finales
El almacenamiento puede ser visualizado como una jerarquía:
| Capa | Descripción |
|---|---|
| Materias Primas | Componentes físicos como discos magnéticos, SSDs y memoria. |
| Sistemas de Almacenamiento | Sistemas que organizan y permiten la interacción con los datos almacenados. |
| Abstracciones de Almacenamiento | Incluyen almacenes de datos en la nube, lagos de datos, etc. |
| Tipo de Base de Datos | Uso Principal | Ejemplo |
|---|---|---|
| Orientadas a Filas | OLTP | MySQL, PostgreSQL |
| Orientadas a Columnas | OLAP | Amazon Redshift, BigQuery |
| NoSQL (Gráficos) | Consultas complejas | Neo4j |
| NoSQL (Vectoriales) | Búsqueda y análisis | Pinecone, Weaviate |
El objetivo es evaluar las ventajas y desventajas entre costos de almacenamiento y rendimiento, tanto a nivel de materia prima como de sistema de almacenamiento.
Este curso proporciona una comprensión integral del almacenamiento de datos, permitiendo a los ingenieros de datos tomar decisiones informadas al diseñar arquitecturas de datos. Acompáñenos en el siguiente video para comenzar con los fundamentos del almacenamiento de datos.
Este documento resume las características, rendimiento, durabilidad y costo de las materias primas utilizadas en el almacenamiento de datos, centrándose en discos magnéticos (HDD) y unidades de estado sólido (SSD), así como en la memoria volátil (RAM y caché de CPU).
| Característica | Discos Magnéticos (HDD) | Unidades de Estado Sólido (SSD) |
|---|---|---|
| Latencia | ~4 ms | ~0.1 ms |
| IOPS | Varios cientos | Decenas de miles |
| Velocidad de Transferencia | Hasta 300 MB/s | Más de 3,000 MB/s |
| Costo | 2-3 veces más barato | Más caro |
| Tipo de Memoria | Velocidad de Transferencia | Latencia | Costo Relativo |
|---|---|---|---|
| RAM | ~100 GB/s | ~0.1 microsegundos | 30-50 veces más caro que SSD |
| Caché de CPU | ~1 TB/s | ~1 nanosegundo | Más caro que RAM |
Como ingeniero de datos, es crucial entender las ventajas y desventajas de cada tipo de almacenamiento para seleccionar el sistema adecuado según los requisitos de rendimiento y costo de las cargas de trabajo de procesamiento de datos.
En el siguiente video, se explorarán otros componentes y procesos, como la serialización y la compresión, que son fundamentales para el almacenamiento de datos y los sistemas de datos modernos.
En este curso, se exploran los componentes y procesos necesarios para almacenar y transmitir datos en sistemas de datos modernos, centrándose en la jerarquía de almacenamiento, la serialización, la compresión y el papel de las redes y la CPU en el almacenamiento de datos.
| Formato | Tipo | Descripción |
|---|---|---|
| CSV | Texto | Basado en filas, propenso a errores, sin esquema definido. |
| XML | Texto | Formato heredado, lento de serializar/deserializar. |
| JSON | Texto | Estándar moderno para intercambio de datos a través de API. |
| Parquet | Binario | Basado en columnas, eficiente para big data. |
| Avro | Binario | Basado en filas, utiliza un esquema y admite evolución del esquema. |
El curso proporciona una visión integral sobre cómo los componentes de almacenamiento permiten gestionar datos de manera eficiente. Se explorarán más detalles sobre sistemas de almacenamiento en la nube en las siguientes sesiones.
¡Te esperamos en la próxima sesión!
En el contexto de la ingeniería de datos, es fundamental comprender las diferentes opciones de almacenamiento en la nube. Este documento resume los tres tipos comunes de sistemas de almacenamiento en la nube: almacenamiento en bloques, almacenamiento de archivos y almacenamiento de objetos. Cada uno tiene sus ventajas y desventajas en términos de rendimiento y escalabilidad.
| Tipo de Almacenamiento | Ventajas | Desventajas | Casos de Uso |
|---|---|---|---|
| Archivos | Fácil administración y uso | Menor rendimiento de lectura/escritura | Compartir archivos entre usuarios |
| Bloques | Alto rendimiento y baja latencia | Limitado en escalabilidad | Bases de datos transaccionales, máquinas virtuales |
| Objetos | Alta escalabilidad y durabilidad | No adecuado para cargas de trabajo transaccionales | Almacenamiento de datos para análisis y aprendizaje automático |
La elección del sistema de almacenamiento adecuado depende de las necesidades específicas de cada caso de uso. Para un intercambio sencillo de datos, el almacenamiento de archivos es ideal. Para cargas de trabajo transaccionales, el almacenamiento en bloques es la mejor opción. Y para análisis de grandes volúmenes de datos, el almacenamiento de objetos es el más adecuado.
En el siguiente video, se explorará cómo decidir el nivel de almacenamiento adecuado, considerando la clasificación de datos en caliente, tibio y frío según la frecuencia de acceso.
Este documento resume los conceptos clave sobre los diferentes niveles de almacenamiento de datos en la nube, centrándose en la clasificación de datos en calientes, templados y fríos, así como en las consideraciones para elegir el método de almacenamiento adecuado.
Los datos se pueden clasificar en tres categorías según la frecuencia de acceso y uso:
| Tipo de Datos | Frecuencia de Acceso | Ejemplos | Medios de Almacenamiento | Costo |
|---|---|---|---|---|
| Datos Calientes | Alta | Catálogo de productos, historial de compras | SSD, memoria | Alto |
| Datos Templados | Moderada | Informes y análisis periódicos | Discos magnéticos, almacenamiento híbrido | Moderado |
| Datos Fríos | Baja | Documentación de proyectos, correos antiguos | Discos magnéticos de bajo costo | Bajo |
Al diseñar soluciones de almacenamiento, además de la frecuencia de acceso, es importante considerar la escalabilidad y durabilidad de las soluciones elegidas.
En el siguiente video, se profundizará en los sistemas de almacenamiento distribuido y se analizarán las ventajas y desventajas asociadas a esta arquitectura. ¡Te veré allí!
Este documento resume los conceptos fundamentales sobre el almacenamiento distribuido, su arquitectura, ventajas, desventajas y el teorema CAP, así como las diferencias entre los enfoques de consistencia y disponibilidad en sistemas de bases de datos.
A medida que las necesidades de almacenamiento de datos crecen y los patrones de acceso se vuelven más complejos, es necesario distribuir los datos en múltiples servidores. El almacenamiento distribuido es la forma estándar de almacenar datos en la nube, utilizando almacenamiento de bloques, archivos u objetos.
En un sistema de almacenamiento distribuido: - Nodos: Los datos se distribuyen y replican en varios servidores (nodos) conectados por una red. - Clústeres: Grupos de nodos forman clústeres, que en conjunto constituyen el sistema de almacenamiento. - Capacidad: La capacidad total del sistema es la suma de las capacidades de todos los nodos individuales.
Los sistemas de almacenamiento distribuyen tareas de procesamiento en subtareas más pequeñas, permitiendo operaciones de lectura y escritura en paralelo. Esto mejora el rendimiento al atender solicitudes desde nodos de réplica cercanos o menos congestionados.
Existen dos métodos comunes para distribuir datos en nodos: 1. Replicación: Mantiene copias de los mismos datos en varios nodos, mejorando la disponibilidad y el rendimiento. 2. Partición (Fragmentación): Divide un conjunto de datos en subconjuntos más pequeños (particiones) que se asignan a diferentes nodos.
En la práctica, se utiliza una combinación de ambos métodos: particionar datos y replicar nodos para redundancia.
Uno de los principales desafíos es la sincronización de cambios entre nodos. Esto se relaciona con el teorema CAP, que establece que un sistema distribuido solo puede garantizar dos de las siguientes tres propiedades: - Consistencia: Cada lectura refleja la última operación de escritura. - Disponibilidad: Cada solicitud recibe una respuesta, aunque no sea la más reciente. - Tolerancia a la Partición: El sistema sigue funcionando a pesar de fallos de red.
Para sistemas NoSQL, se utilizan los principios BASE: - Básicamente Disponible: Los datos son accesibles la mayor parte del tiempo. - Estado Flexible: No se garantiza si la transacción está comprometida. - Coherencia Final: Eventualmente, las lecturas de datos serán consistentes.
En un escenario donde se necesita proporcionar datos de ventas a científicos de datos, se puede utilizar Amazon RDS Aurora: - Instancia Principal: Ofrece coherencia estricta. - Réplicas de Lectura: Permiten acceso a datos no necesariamente actualizados, mejorando la disponibilidad.
El almacenamiento distribuido es esencial para manejar grandes volúmenes de datos y garantizar la disponibilidad y durabilidad. Comprender cómo gestionar la coherencia y la disponibilidad es crucial para diseñar sistemas de datos efectivos.
| Propiedad | Descripción |
|---|---|
| Consistencia | Cada lectura refleja la última escritura. |
| Disponibilidad | Cada solicitud recibe una respuesta. |
| Tolerancia a Partición | El sistema sigue funcionando a pesar de fallos de red. |
En el siguiente video, se explorarán los sistemas de almacenamiento de archivos y bloques en la nube, así como su comparación con sistemas de almacenamiento en memoria.
En este laboratorio, se explorarán diversas funciones de almacenamiento en la nube, incluyendo almacenamiento de objetos, archivos y bloques. Se realizarán ejercicios prácticos para comprender cómo la RAM del servidor y el almacenamiento en caché pueden mejorar el rendimiento en la recuperación de datos.
boto3 para subir un archivo CSV (keydata/csv/employee.csv) a un bucket de S3.list_object_versions.data/employees.csv.htop: Comando para monitorear el uso de CPU, memoria y procesos en ejecución.Al finalizar los ejercicios, se espera que los participantes comprendan mejor las funciones de almacenamiento en la nube y cómo optimizar el rendimiento mediante el uso de la RAM y el almacenamiento en caché. En la próxima lección, se abordarán los diferentes tipos de bases de datos y cómo almacenan datos.
| Ejercicio | Descripción |
|---|---|
| Almacenamiento de Objetos | Subir un archivo CSV a S3 y habilitar control de versiones. |
| Almacenamiento de Archivos | Navegar por un sistema de archivos y explorar metadatos. |
| Almacenamiento en Bloques | Conectar a un servidor y enviar un archivo para observar el almacenamiento. |
| Interacción con la RAM | Usar caché con Pandas y comparar tiempos de lectura. |
| Supervisión de Recursos | Monitorear el uso de CPU y memoria con htop. |
Ahora es tu turno de realizar estos ejercicios y explorar las funciones de las opciones de almacenamiento. ¡Buena suerte!
En este documento se resumen los conceptos clave sobre el almacenamiento de datos en bases de datos, específicamente en bases de datos relacionales y no relacionales. Se abordan los componentes de un Sistema de Administración de Bases de Datos (DBMS), el motor de almacenamiento, la indexación y las bases de datos en memoria.
Un Sistema de Administración de Bases de Datos (DBMS) incluye los siguientes componentes:
| Componente | Descripción |
|---|---|
| Sistema de Transporte | Facilita la comunicación entre el usuario y la base de datos. |
| Procesador de Consultas | Interpreta y ejecuta las consultas realizadas por el usuario. |
| Motor de Ejecución | Ejecuta las operaciones solicitadas en la base de datos. |
| Motor de Almacenamiento | Se encarga de almacenar físicamente los datos en el disco. |
El motor de almacenamiento realiza las siguientes funciones:
Los motores de almacenamiento modernos están optimizados para trabajar con unidades de estado sólido (SSD) y pueden manejar tipos de datos complejos como:
La indexación es una técnica que mejora la velocidad de recuperación de datos. Permite que el procesador de consultas localice datos específicos sin tener que escanear toda la tabla.
Supongamos que queremos encontrar el precio promedio de productos comprados en EE. UU. Se puede crear una tabla de índices con las siguientes columnas:
| País | Dirección de Memoria |
|---|---|
| EE. UU. | 0x001 |
| Canadá | 0x002 |
| México | 0x003 |
Al ejecutar una consulta, el procesador puede usar búsqueda binaria en la tabla de índices para localizar rápidamente las filas correspondientes.
La indexación reduce la complejidad temporal de la operación de recuperación de a .
Las bases de datos en memoria utilizan RAM como capa de almacenamiento principal. Son ideales para aplicaciones que requieren recuperación de datos ultrarrápida, como:
Este resumen proporciona una visión general de cómo las bases de datos almacenan y recuperan datos, así como la importancia de la indexación y el uso de bases de datos en memoria. En el siguiente video, se compararán los patrones de almacenamiento y el rendimiento de las consultas en almacenamiento de filas y columnas.
En este documento se resumen los conceptos clave sobre los tipos de almacenamiento de datos utilizados en ingeniería de datos, centrándose en el almacenamiento orientado a filas y columnas. Se explican sus características, ventajas y desventajas, así como su aplicabilidad en diferentes contextos.
Existen varios tipos de bases de datos que se utilizan para organizar datos en ingeniería de datos. Algunos de los más comunes son:
| Característica | Almacenamiento Orientado a Filas | Almacenamiento Orientado a Columnas |
|---|---|---|
| Eficiencia en consultas | Eficiente para consultas transaccionales | Eficiente para consultas analíticas |
| Velocidad de transferencia | Más lento en grandes volúmenes | Más rápido en grandes volúmenes |
| Acceso a datos individuales | Fácil | Difícil |
| Actualización de registros | Rápida | Lenta |
Es fundamental que los ingenieros de datos comprendan las diferencias entre el almacenamiento orientado a filas y columnas para elegir el enfoque adecuado según el caso de uso. Se recomienda:
En el próximo video, se explorarán las bases de datos gráficas, que han ganado atención con el crecimiento del aprendizaje automático y las aplicaciones de IA generativa.
Las bases de datos de gráficos son una forma de almacenar datos utilizando una estructura gráfica matemática compuesta por nodos y bordes. Este tipo de base de datos es especialmente útil para representar relaciones complejas entre diferentes entidades.
Las bases de datos de gráficos son ideales para casos de uso que implican conexiones complejas entre entidades. Algunos ejemplos incluyen:
| Aspecto | Bases de Datos de Gráficos | Bases de Datos Relacionales |
|---|---|---|
| Estructura | Nodos y bordes | Tablas |
| Relaciones | Ciudadanos de primera clase | Requieren uniones |
| Complejidad de Consultas | Menos compleja | Más compleja con uniones |
Al trabajar con bases de datos de gráficos, se utilizan lenguajes especializados como:
Las bases de datos de gráficos ofrecen una forma poderosa y flexible de manejar datos interconectados. Con la creciente importancia de las relaciones en los datos, es esencial desarrollar experiencia en su uso. Existen diversas opciones en el mercado, como Neo4j, ArangoDB y Amazon Neptune, cada una con sus propias características y capacidades.
Para profundizar en el tema, se recomienda consultar enlaces y recursos adicionales que se proporcionarán al final de la semana. Además, se explorará Neo4j y el lenguaje de consulta Cypher en el laboratorio al final de esta lección.
Las bases de datos vectoriales han ganado popularidad en el contexto del aprendizaje automático, permitiendo realizar consultas eficientes basadas en similitudes semánticas. Este tipo de base de datos es fundamental para aplicaciones como sistemas de recomendación, detección de anomalías y generación de texto.
Las bases de datos vectoriales almacenan datos en forma de matrices, permitiendo representar cualquier tipo de información numérica. Por ejemplo:
| Tipo de Datos | Ejemplo |
|---|---|
| Cantidad de Lluvia | Registro diario de lluvia durante un año |
| Datos de Imágenes | Dimensiones RGB desenrolladas en una matriz |
Las bases de datos vectoriales están diseñadas para soportar algoritmos ANN, lo que permite realizar búsquedas de similitud de manera eficiente. Almacenan incrustaciones vectoriales y aplican algoritmos ANN para optimizar la estructura de datos.
Se recomienda leer sobre el algoritmo de ANN conocido como HNSW (Hierarchical Navigable Small World) para obtener más información sobre su funcionamiento y aplicaciones.
Las bases de datos vectoriales son una herramienta poderosa en el campo del aprendizaje automático, facilitando la búsqueda y recuperación de datos basados en similitudes semánticas. En el próximo video, se abordará el uso del lenguaje de consulta cifrada para interactuar con bases de datos de gráficos en Neo4j.
Las bases de datos de grafos, como Neo4j, permiten modelar datos en forma de grafos, facilitando la interacción con ellos de manera similar a las bases de datos relacionales. En este documento, exploraremos el modelo de grafo de propiedades y cómo interactuar con él utilizando el lenguaje de consulta Cypher.
El modelo de grafo de propiedades es una forma de representar datos en Neo4j. A continuación, se describen sus componentes principales:
Los nodos son las entidades del grafo y pueden tener diferentes tipos, conocidos como etiquetas. En el modelo de grafo de propiedades, se pueden identificar los siguientes tipos de nodos:
| Tipo de Nodo | Descripción |
|---|---|
| Cliente | Representa a un cliente |
| Pedido | Representa un pedido |
| Proveedor | Representa a un proveedor |
| Producto | Representa un producto |
| Categoría | Representa una categoría |
Las relaciones conectan los nodos entre sí y tienen un tipo específico. Cada relación tiene un nodo origen y un nodo destino. Por ejemplo:
Cada nodo puede tener múltiples propiedades que describen la entidad que representa. Por ejemplo, un nodo Cliente puede tener las siguientes propiedades:
| Propiedad | Descripción |
|---|---|
| ID Cliente | Identificador único del cliente |
| Nombre de Contacto | Nombre del contacto del cliente |
| Dirección | Dirección del cliente |
Las relaciones también pueden tener propiedades. Por ejemplo, una relación de tipo "Pedidos" puede tener:
| Propiedad | Descripción |
|---|---|
| Cantidad | Cantidad de productos en el pedido |
| Descuento | Descuento aplicado al pedido |
| Precio Unitario | Precio por unidad del producto |
Para crear una base de datos gráfica en Neo4j, se pueden seguir estos pasos:
Para interactuar con los datos en Neo4j, se utiliza el lenguaje de consulta Cypher. En el próximo laboratorio, se practicarán operaciones CRUD (Crear, Leer, Actualizar, Eliminar) para gestionar nodos en la base de datos de grafos.
Para aprender más sobre la creación de bases de datos de grafos y el uso de Cypher, se proporcionarán enlaces a archivos CSV y ejemplos de instrucciones de Cypher en el laboratorio.
Este documento proporciona una visión general del modelo de grafo de propiedades en Neo4j y cómo interactuar con él. En el siguiente video, se revisarán ejemplos de consultas en Cypher para trabajar con los datos del grafo.
Este documento resume los conceptos y comandos básicos para realizar consultas en Neo4j utilizando la sentencia MATCH. Se exploran las formas de recuperar nodos, contar relaciones, y filtrar resultados, así como la interacción con propiedades de nodos y relaciones.
La sentencia MATCH se utiliza para recuperar información de un gráfico en Neo4j. Su formato es similar a la sentencia SELECT en bases de datos relacionales.
MATCH (n) RETURN n
Este comando devuelve todos los nodos del gráfico.
Para contar el número total de nodos, se puede usar:
MATCH (n) RETURN count(n)
Para obtener las etiquetas de los nodos:
MATCH (n) RETURN DISTINCT labels(n)
Para contar nodos con una etiqueta específica:
MATCH (n:Orden) RETURN count(n)
Para explorar propiedades de nodos:
MATCH (n:Orden) RETURN properties(n)
Para limitar el número de resultados devueltos:
MATCH (n:Orden) RETURN properties(n) LIMIT 1
Las relaciones se indican con corchetes. Para contar todas las relaciones dirigidas:
MATCH (a)-[r]->(b) RETURN count(r)
Para contar relaciones de un tipo específico:
MATCH (a)-[r:Pedido]->(b) RETURN count(r)
Para obtener propiedades de relaciones, como el precio promedio de pedidos:
MATCH (a)-[r:Pedido]->(b) RETURN AVG(r.precio * r.cantidad) AS average_price
Para obtener el precio promedio de pedidos agrupados por categoría:
MATCH (p:Producto)-[r:Pedido]->(c:Categoria)
RETURN c.nombre, AVG(r.precio * r.cantidad) AS average_price
Para filtrar resultados, se utiliza la cláusula WHERE:
MATCH (p:Producto)-[:PerteneceA]->(c:Categoria)
WHERE c.nombre = 'Carne y Aves de Corral'
RETURN p.nombre, p.precio_unitario
Para recuperar productos pedidos por un cliente específico:
MATCH (c1:Cliente {CustomerID: 'QUEDE'})-[:HIZO]->(o:Pedido)-[:CONTENIA]->(p:Producto)
RETURN p.nombre
Para encontrar otros clientes que pidieron los mismos productos:
MATCH (c1:Cliente {CustomerID: 'QUEDE'})-[:HIZO]->(o:Pedido)-[:CONTENIA]->(p:Producto)<-[:HIZO]-(c2:Cliente)
RETURN DISTINCT c2.CustomerID
Para recuperar pedidos con un máximo de dos productos:
MATCH (o:Pedido)-[:CONTENIA]->(p:Producto)
RETURN o.OrderID, count(p) AS count_prod
WITH o, count(p) AS count_prod
WHERE count_prod <= 2
RETURN o
Este resumen proporciona una visión general de cómo utilizar Neo4j para realizar consultas sobre nodos y relaciones en un gráfico. En el próximo laboratorio, se explorarán más sentencias y se aprenderá a interactuar con Neo4j desde JupyterLab.
En esta transcripción, Juan Cicada, un experto en gráficos y bases de datos de gráficos, comparte su conocimiento sobre la estructura de datos de gráficos, su relación con las bases de datos y su aplicación en el mundo actual. Se discuten conceptos fundamentales como nodos, aristas, modelos de gráficos y la diferencia entre gráficos de conocimiento y gráficos de propiedades.
Un gráfico es una estructura de datos compuesta por: - Nodos: Representan entidades o puntos. - Aristas: Representan las relaciones entre los nodos.
Matemáticamente, se puede pensar en un gráfico como un conjunto de nodos y aristas, donde: - Un nodo puede ser considerado como un predicado unario. - Una arista puede ser considerada como un predicado binario.
Una base de datos de gráficos es un sistema diseñado para gestionar datos en forma de gráficos. A diferencia de las bases de datos relacionales, que utilizan un modelo tabular, las bases de datos de gráficos permiten una mayor flexibilidad en la representación de datos.
Existen dos modelos principales de gráficos: - RDF (Resource Description Framework): - Basado en triples (sujeto, predicado, objeto). - Utilizado para describir datos en la web. - Gráfico de Propiedades: - Utiliza pares de valores clave asociados a nodos y aristas. - Popularizado por Neo4j.
Un gráfico de conocimiento captura el significado de los datos, permitiendo razonar sobre ellos. Se diferencia de un gráfico simple en que incluye información semántica y relaciones más complejas.
Los gráficos de conocimiento pueden mejorar la precisión de los modelos de lenguaje al proporcionar contexto y semántica. Se ha demostrado que las consultas formuladas en términos de gráficos de conocimiento son más precisas que las consultas SQL tradicionales.
Los gráficos y las bases de datos de gráficos representan un cambio de paradigma en la forma en que gestionamos y entendemos los datos. Su flexibilidad y capacidad para capturar relaciones complejas los convierten en herramientas poderosas en el mundo actual de la información.