# Bases de datos
## Una introducción general
Las bases de datos juegan un papel destacado en el panorama moderno. Casi ninguna aplicación puede prescindir de ella y son el motor invisible de l Internet tal como lo conocemos hoy.
Dondequiera que la gente trabaja, se generan datos. Datos que deben guardarse, procesarse y recuperarse. Por esta razón, las bases de datos se han convertido en una parte integral del mundo moderno.
## Concurrencia y ACID
El problema más básico que resuelve una BD es el control de la concurrencia. Si deja que 2 programas ejecuten sobre los mismos datos sin control, habrá interferencia y prodian producirse errores.
Ej: Problema de los SO en accesos a archivos, sistemas de versionamiento.
Entonces, problemas de concurrencia los vemos cuando:
- Tenemos un recurso compartido, que varios actores compiten por su uso. Ej: comprar un ticket de bus/avión, pasa que de repente llegán dos personas con el mismo pasaje y nadie sabe como paso.
- El número de transacciones sube a tal cantidad que el tiempo de espera se vuelve eterno.
¿Cómo resuelven las BD el problema de la concurrencia? Utilizando la metodología ACID: (A)tómicos, (C)onsistentes, a(I)sladas y (D)urables.
## Consistente -> Transacciones
---
## Conceptos básicos de bases de datos
Los sistemas de información de una empresa generalmente tienen que servir a un gran número de usuarios al mismo tiempo. Los usuarios llaman a programas transaccionales y en la base de datos se realizan transacciones individuales por cada solicitud.
Si deja que estos programas transaccionales corran sin protección en los mismos datos, habrá interferencia y varios errores.
El ejemplo de error más conocido es un cambio perdido:
“Dos transacciones leen el mismo dato, calculan un nuevo valor y escriben sus nuevos valores respectivos en la base de datos. El valor escrito primero será sobrescrito”, es decir, se pierde el efecto de la transacción relacionada.
En algunos casos, el problema puede resolverse evitando completamente la ejecución paralela de transacciones y ejecutando estrictamente una tras otra. Sin embargo, este enfoque es inaceptable para sistemas más grandes. Si la ejecución de una transacción toma un promedio de 0.5 segundos, se puede ejecutar un máximo de 120 transacciones por minuto; Este rendimiento es a menudo demasiado bajo. Los tiempos de respuesta resultantes son aún más serios; si muchos usuarios inician transacciones al mismo tiempo, pueden ocurrir fácilmente tiempos de espera en el rango de minutos; Por lo general, se requiere un límite superior de aproximadamente 2 segundos.