Preguntas sobre Fundamentos Teóricos de Bases de Datos NoSQL

1. ¿Cuáles son los tipos de bases de datos NoSQL y en qué situaciones usarías cada una?

Respuesta: Los principales tipos de bases de datos NoSQL son:

// Ejemplo de inserción en MongoDB
db.collection.insertOne({
    "nombre": "Juan",
    "edad": 30,
    "ciudad": "Bogotá"
});

2. Si consideramos los fundamentos teóricos de las bases de datos NoSQL y las principales sentencias de este modelo: usted:

Respuesta: Las bases de datos NoSQL son sistemas diseñados para manejar grandes volúmenes de datos no estructurados o semiestructurados. En lugar de usar el modelo relacional con tablas y filas, NoSQL ofrece diferentes modelos de almacenamiento. Algunos fundamentos teóricos incluyen:

// Ejemplo de consulta en Redis
SET clave "valor"
GET clave

3. ¿Cómo elegirías entre una base de datos SQL y una NoSQL?

Respuesta: Elegiría una base de datos NoSQL cuando los datos son no estructurados o crecen de manera descontrolada, o cuando es necesario escalar horizontalmente. Por otro lado, usaría SQL cuando se requiere transaccionalidad, integridad referencial, y un esquema fijo.

4. ¿Qué significa el término "Eventual Consistency" en NoSQL?

Respuesta: La "eventual consistency" significa que en un sistema distribuido, las actualizaciones de datos no se reflejan inmediatamente en todos los nodos, pero eventualmente, todas las copias de los datos convergerán al mismo estado.

5. ¿Qué es el modelo CAP y cómo afecta a las bases de datos NoSQL?

Respuesta: El teorema CAP establece que una base de datos distribuida puede garantizar solo dos de las tres propiedades:

6. ¿Qué es un documento en una base de datos NoSQL documental?

Respuesta: Un documento en una base de datos NoSQL documental (como MongoDB) es un registro que contiene datos en formato JSON o BSON. Cada documento puede tener una estructura diferente, lo que da flexibilidad a los datos.

// Ejemplo de documento en MongoDB
{
    "nombre": "María",
    "edad": 28,
    "dirección": {
        "calle": "Calle 123",
        "ciudad": "Bogotá"
    }
}

7. ¿Cómo realizarías una consulta de búsqueda en MongoDB?

Respuesta: Utilizaría la sentencia find() para buscar documentos que coincidan con ciertos criterios.

db.collection.find({"edad": {"$gt": 25}});

8. ¿Qué es el particionamiento en bases de datos NoSQL y por qué es importante?

Respuesta: El particionamiento distribuye los datos en múltiples servidores o nodos para mejorar la escalabilidad y el rendimiento. Es crucial en bases de datos NoSQL porque ayuda a manejar grandes cantidades de datos y tráfico.

9. ¿Qué es un índice en una base de datos NoSQL y cómo mejora el rendimiento?

Respuesta: Un índice en NoSQL mejora el rendimiento de las consultas al permitir búsquedas más rápidas sobre ciertos campos. Por ejemplo, en MongoDB se puede crear un índice en una clave específica para acelerar las búsquedas.

// Crear un índice en MongoDB
db.collection.createIndex({"nombre": 1});

10. ¿Cómo manejarías la consistencia eventual en una aplicación que usa una base de datos NoSQL?

Respuesta: Al trabajar con consistencia eventual, diseñaría la aplicación para manejar estados inconsistentes temporalmente. También podría implementar un mecanismo de reconcilio o notificaciones para asegurar que los usuarios reciban actualizaciones correctas eventualmente.

11. ¿Qué es un esquema flexible y por qué es ventajoso en NoSQL?

Respuesta: Un esquema flexible significa que los datos pueden almacenarse sin una estructura fija, lo que permite que diferentes documentos en la misma colección tengan diferentes campos. Es ventajoso porque facilita cambios rápidos en la estructura de los datos sin necesidad de migraciones complejas.

12. ¿Qué es MapReduce y cómo lo usarías en bases de datos NoSQL?

Respuesta: MapReduce es un modelo de procesamiento distribuido que permite realizar operaciones de agregación sobre grandes conjuntos de datos en paralelo. En MongoDB, MapReduce se usa para procesar y analizar grandes volúmenes de documentos.

db.collection.mapReduce(
    function() { emit(this.category, 1); }, // Mapeo
    function(key, values) { return Array.sum(values); }, // Reducción
    { out: "resultado" }
);

13. ¿Qué ventajas ofrece la replicación en bases de datos NoSQL?

Respuesta: La replicación mejora la disponibilidad y tolerancia a fallos al crear copias redundantes de los datos en múltiples nodos. Si un nodo falla, otro nodo puede seguir atendiendo las solicitudes, asegurando alta disponibilidad.

14. ¿Cómo funciona la consistencia en un sistema distribuido basado en NoSQL?

Respuesta: En NoSQL, la consistencia varía dependiendo del sistema. Algunos aseguran consistencia eventual, donde los datos pueden estar temporalmente desincronizados, pero eventualmente todos los nodos convergen al mismo estado.

15. ¿Qué es un sistema de base de datos de grafos y cuándo lo usarías?

Respuesta: Un sistema de base de datos de grafos (como Neo4j) está optimizado para manejar relaciones entre entidades. Es útil cuando las conexiones entre los datos son fundamentales, como en redes sociales o sistemas de recomendaciones.

16. ¿Qué es un almacenamiento clave-valor y cómo se utiliza?

Respuesta: Un almacenamiento clave-valor, como Redis, guarda datos como pares clave-valor. Es ideal para escenarios donde las búsquedas se basan en una clave única, como caché de sesiones o configuraciones de aplicaciones.

SET "usuario:123" "Juan"
GET "usuario:123"

17. ¿Cómo mejorarías el rendimiento de consultas en una base de datos documental NoSQL?

Respuesta: Implementaría índices en los campos que más se consultan, usaría particionamiento y distribuiría los datos para mejorar la latencia.

18. ¿Cómo manejarías transacciones en una base de datos NoSQL que no las soporte nativamente?

Respuesta: Usaría compensating transactions o diseñaría la lógica de la aplicación para manejar operaciones idempotentes, asegurando que las transacciones parciales se reconcilien.

19. ¿Qué es una base de datos orientada a columnas y cuándo es útil?

Respuesta: Las bases de datos orientadas a columnas, como Cassandra, almacenan los datos por columnas en lugar de filas. Son útiles para análisis de grandes volúmenes de datos y consultas de agregación.

20. ¿Cómo se manejan las relaciones en bases de datos NoSQL documentales?

Respuesta: En lugar de usar joins como en SQL, en NoSQL se recomienda usar documentos embebidos o hacer referencia a otros documentos mediante IDs. Las relaciones son manejadas en la capa de aplicación.

21. ¿Qué problemas de consistencia pueden surgir en bases de datos distribuidas?

Respuesta: En bases de datos distribuidas, pueden surgir inconsistencias debido a la latencia entre nodos, fallos en la comunicación o diferentes nodos actualizando datos de forma simultánea. Esto puede llevar a datos desincronizados temporalmente.

22. ¿Cómo manejarías datos geoespaciales en una base de datos NoSQL?

Respuesta: En MongoDB, usaría índices geoespaciales para almacenar y consultar datos relacionados con ubicaciones. Esto permite realizar consultas como "encontrar todos los puntos cercanos a una ubicación dada".

db.collection.createIndex({ location: "2dsphere" });
db.collection.find({
    location: {
        $near: {
            $geometry: { type: "Point", coordinates: [ -73.97, 40.77 ] },
            $maxDistance: 5000
        }
    }
});

23. ¿Qué es el sharding y cómo se implementa en NoSQL?

Respuesta: El sharding es la técnica de dividir grandes colecciones de datos en partes más pequeñas, llamadas shards, que se distribuyen en diferentes servidores. En MongoDB, el sharding permite escalar horizontalmente grandes volúmenes de datos.

24. ¿Cómo manejarías consultas complejas en una base de datos NoSQL?

Respuesta: En bases de datos NoSQL, las consultas complejas como las agregaciones se manejan usando pipelines o MapReduce, permitiendo realizar filtrados, agrupamientos y cálculos sobre los datos.

25. ¿Cómo sincronizarías datos entre una base de datos SQL y una NoSQL?

Respuesta: Utilizaría un sistema de sincronización de datos, como Apache Kafka, que actúe como middleware para leer los cambios en la base de datos SQL y replicarlos en NoSQL. También podría implementar una API para mantener ambas bases de datos sincronizadas.

26. ¿Qué es la replicación maestro-esclavo en bases de datos NoSQL?

Respuesta: En la replicación maestro-esclavo, un nodo maestro maneja las escrituras y distribuye las actualizaciones a uno o más nodos esclavos. Los esclavos solo permiten lecturas, lo que mejora la disponibilidad y redundancia de los datos.

27. ¿Qué es una base de datos NoSQL orientada a grafos y cuándo la usarías?

Respuesta: Una base de datos orientada a grafos, como Neo4j, almacena datos en nodos y aristas que representan relaciones. Se usa en aplicaciones donde las relaciones entre los datos son más importantes que los propios datos, como en redes sociales.

28. ¿Cómo implementarías una estrategia de respaldo en bases de datos NoSQL?

Respuesta: Implementaría respaldos incrementales periódicos y utilizaría herramientas nativas como mongodump en MongoDB o snapshots en Redis para asegurar la integridad de los datos y una rápida recuperación ante fallos.

29. ¿Cuándo elegirías NoSQL en lugar de una base de datos relacional?

Respuesta: Optaría por NoSQL cuando se requiere escalabilidad horizontal, los datos son no estructurados, o la aplicación requiere alta disponibilidad y tolerancia a fallos, como en sistemas distribuidos y aplicaciones web de gran escala.

30. ¿Cómo maneja Cassandra la replicación y partición de datos?

Respuesta: Cassandra utiliza replicación para asegurar que los datos se almacenen en múltiples nodos para alta disponibilidad. Además, implementa particionamiento para distribuir datos entre nodos de manera eficiente utilizando un algoritmo de hash.