CRUD es el acrónimo de CREATE, READ, UPDATE y DELETE. Con estos términos se describen las cuatro operaciones esenciales para crear y gestionar elementos de datos persistentes, principalmente en bases de datos relacionales y NoSQL.
En esta publicación se describirá cómo se utilizan las operaciones CRUD para el procesamiento de datos. También mostraremos los problemas que los administradores de sistemas o los ingenieros de DevOps pueden encontrar al monitorizar una base de datos.
Explicación de CRUD
Como se ha mencionado, las operaciones CRUD se utilizan en aplicaciones de almacenamiento persistente, lo que significa que estas aplicaciones conservarán sus datos incluso después de que se apague el sistema. Se trata de operaciones distintas de aquellas que se realizan en almacenamiento volátil, como la memoria de acceso aleatorio o los archivos de caché.
CRUD se utiliza mucho en aplicaciones de bases de datos, como sistemas de gestión de bases de datos relacionales (RDBMS) como Oracle, MySQL y PostgreSQL. También incluye bases de datos NoSQL como MongoDB, Apache Cassandra y AWS DynamoDB.
Se pueden realizar operaciones similares a CRUD en estructuras de datos persistentes como archivos. Por ejemplo, puedes crear un documento de Microsoft Word, actualizarlo, leerlo e incluso eliminarlo del explorador de archivos. Sin embargo, los archivos no están pensados para los registros (ni para documentos en el caso de MongoDB o Couchbase). La terminología CRUD está relacionada específicamente con operaciones orientadas a registros en lugar de operaciones de archivos planos.
CREATE
Con la operación CREATE se añade un nuevo registro a una base de datos. En RDBMS, a una fila de una tabla de base de datos se le denomina registro, mientras que a las columnas se les denominan atributos o campos. Con la operación CREATE se añaden uno o varios registros nuevos con valores de campo distintos en una tabla.
El mismo principio se aplica a las bases de datos NoSQL. Si la base de datos NoSQL está orientada a documentos, se añade un nuevo documento (por ejemplo, un documento con formato JSON con sus atributos) a la recopilación, que es el equivalente a una tabla RDBMS. De manera similar, en bases de datos NoSQL como DynamoDB, con la operación CREATE añade un elemento (que es equivalente a un registro) a una tabla.
READ
Con READ se devuelven registros (o documentos o elementos) de una tabla de base de datos (o recopilación o bucket) en función de algunos criterios de búsqueda. Con la operación READ se pueden devolver todos los registros y algunos o todos los campos.
UPDATE
UPDATE se utiliza para modificar los registros existentes en la base de datos. Por ejemplo, puede ser el cambio de dirección en una base de datos de clientes o un cambio de precio en una base de datos de productos. Como ocurre con la operación READ, las actualizaciones con UPDATE se pueden aplicar a todos los registros o sólo a unos pocos, según distintos criterios.
Con una operación UPDATE se pueden modificar y conservar los cambios en un sólo campo o en varios campos del registro. Si es necesario actualizar varios campos, el sistema de base de datos garantiza que se actualicen todos o no se actualice ninguno. Algunos sistemas de big data no implementan la operación UPDATE sino que sólo permiten una operación CREATE con marca de tiempo, añadiendo una nueva versión de la fila cada vez.
DELETE
Con las operaciones DELETE el usuario puede eliminar registros de la base de datos. Con una eliminación permanente se elimina el registro por completo, mientras que con una eliminación temporal se marca el registro, pero este se mantiene en su lugar. Por ejemplo, esto es importante en las nóminas, donde los registros de empleo deben mantenerse incluso después de que un empleado haya dejado la empresa.
¿Cómo se realizan las operaciones CRUD en una base de datos?
En RDBMS, las operaciones CRUD se realizan a través de comandos de lenguaje de consulta estructurado (SQL).
- La instrucción INSERT se utiliza para crear con CREATE:
INSERT INTO
- La instrucción SELECT se utiliza para leer con READ:
SELECT field 1, field 2, …FROM
- La instrucción UPDATE se utiliza para actualizar con UPDATE:
UPDATE
- La instrucción DELETE se utiliza para eliminar con DELETE:
DELETE FROM
Las operaciones CRUD en bases de datos NoSQL dependerán del lenguaje de la plataforma de base de datos específica. Por ejemplo, el CQL de Cassandra es muy similar al SQL. En MongoDB, por el contrario, las operaciones se realizan con funciones integradas:
- La operación de creación (CREATE) se realiza a través de
db.collection.insertOne()odb.collection.insertMany(). Con la primera instrucción se añade un documento y con la última se añaden varios documentos a una recopilación de bases de datos. - La operación de lectura (READ) se realiza a través de
db.collection.find()odb.collection.findOne(). - La operación de actualización (UPDATE) se realiza a través de
db.collection.updateOne(),db.collection.updateMany()odb.collection.replaceOne(). - La operación de eliminación (DELETE) se realiza a través de
db.collection.deleteOne()odb.collection.deleteMany().
Los desarrolladores de bases de datos o los administradores de bases de datos a menudo ejecutan instrucciones CRUD manualmente en la base de datos desde una herramienta cliente. Sin embargo, en la mayoría de los casos de uso de producción, estas instrucciones están integradas dentro del código del lenguaje de programación. Cuando se ejecuta el programa, la API de la base de datos de destino toma la instrucción CRUD y la traduce al lenguaje nativo de la base de datos.
Por ejemplo, cuando un visitante de un sitio de comercio electrónico inicia el proceso de registro de usuario, un microservicio escrito en Python o Java puede leer los valores de entrada (como nombre, apellido, correo electrónico, dirección, etc.) y generar dinámicamente un comando de Oracle PL/SQL. Luego, esta instrucción se envía a la biblioteca de controladores de Oracle, que la ejecuta en la base de datos.
Ejemplos de operaciones CRUD
Analicemos más a fondo el ejemplo de una tienda de comercio electrónico.
- Cuando la usuaria utiliza CREATE para crear un registro de cliente, puede usar READ para leer el inventario desplazándose por el catálogo de productos.
- Cuando realiza un pedido, el sistema backend ejecuta UPDATE para actualizar el inventario temporalmente para que refleje la cantidad reducida de artículos disponibles.
- Cuando compra el artículo, la actualización con UPDATE se vuelve permanente y otros usuarios que lean mediante READ la cantidad de artículos disponibles podrán ver el cambio. Mientras tanto, otro proceso ejecuta CREATE para crear un registro en la base de datos de la empresa de envíos, notificándoles la solicitud de envío.
- Si el usuario elimina un artículo del carrito de compras, se elimina con DELETE un registro temporal añadido a la tabla "ventas".
En una agencia de viajes online, un usuario puede utilizar CREATE para crear una solicitud de reserva, READ para consultar los vuelos disponibles para la ruta solicitada y realizar una compra. De esta manera se actualizará con UPDATE una lista de asientos disponibles para el vuelo y se crearán con CREATE varios registros en la tabla "itinerario". Si el usuario finaliza la sesión en mitad del proceso, se eliminarán con DELETE todas las filas relacionadas con esta transacción.
Prueba de operaciones CRUD
Las operaciones de software que incluyen CRUD se suelen probar en caja negra. Cuando los evaluadores realizan determinadas operaciones, verifican la base de datos del backend en lugar de analizar el código para ver si se han realizado los cambios previstos o si se han devuelto los datos correctos. Estas pruebas tienen como objetivo validar cada una de las operaciones CRUD resultantes de distintas posibles interacciones del usuario en diferentes escenarios.
CRUD y rendimiento de la base de datos
Un diseño de base de datos eficiente es el requisito necesario para unas operaciones CRUD óptimas. Sin un buen diseño de base de datos, las operaciones CRUD pueden afectar negativamente al rendimiento de una base de datos.
Por ejemplo, en operaciones como UPDATE o DELETE se necesitan bloqueos exclusivos en las filas (y sus recursos relacionados, como páginas de datos o índices). Los bloqueos garantizan que cuando se modifique una fila más, no estén disponibles para otros procesos o usuarios para ninguna operación CRUD. Esto es para garantizar la integridad de los datos.
No se puede leer un registro cuando se está eliminando ni permitir que dos o más usuarios actualicen un sólo registro a la vez. Otros tipos de bloqueos, como los bloqueos compartidos, permiten lecturas simultáneas con READ. Los bloqueos se pueden configurar a nivel de base de datos o de instrucción, y los diferentes tipos de bloqueo determinarán qué operaciones CRUD están permitidas y cómo se comportará la operación CRUD.
No hace falta decir que el tipo de bloqueo y la cantidad de bloqueos simultáneos debidos a sesiones de usuario afectarán al rendimiento de una base de datos. Por ejemplo, en un sitio de comercio electrónico con mucho tráfico y con cientos o miles de usuarios simultáneos habrá muchos bloqueos ejecutándose a la vez. El resultado podría ser una capacidad de respuesta lenta mientras el usuario espera que se liberen los bloqueos.
Este desafío de rendimiento es la razón por la que los administradores de bases de datos se esfuerzan para garantizar que las operaciones CRUD puedan realizarse de la forma más rápida posible. Para ello es necesario adaptar las consultas en función de los comentarios de las soluciones de monitorización. Estas soluciones pueden mostrar bloqueos de bases de datos actuales, métricas y logs para ayudar al administrador a identificar posibles cuellos de botella.
Descubre la plataforma con IA nativa líder del mundo para SIEM de nueva generación y gestión de logs
Mejora tu ciberseguridad con la plataforma CrowdStrike Falcon®, la principal plataforma nativa de IA para SIEM y gestión de logs. Disfruta de registro de seguridad con petabytes, optando entre opciones de implementación nativas de la nube o de autoalojamiento. Registra tus datos con una arquitectura potente y sin índices, sin cuellos de botella, lo que permite el Threat Hunting con más de 1 PB de ingesta de datos al día. Permite funciones de búsqueda en tiempo real para dejar atrás al adversario y lograr una latencia inferior a un segundo en consultas complejas. Benefíciate de una visibilidad total, consolidando datos para acabar con los silos y permitiendo que los equipos de seguridad, TI y DevOps detecten amenazas, monitoricen el rendimiento y garanticen el cumplimiento sin problemas en 3 mil millones de eventos en menos de 1 segundo.