1+ -- 0. Espera un momento para que el motor de logs esté 100% estable
2+ SELECT SLEEP(20 );
3+
4+ -- 0. FUERZA a que esta sesión grabe en el BinLog
5+ SET SESSION sql_log_bin = 1 ;
6+
7+ -- 1. Crear base de datos si no existe y usarla
8+ CREATE DATABASE IF NOT EXISTS post;
9+ USE post;
10+
11+ -- 2. Limpiar tablas previas para evitar errores de duplicados en la demo
12+ DROP TABLE IF EXISTS comment;
13+ DROP TABLE IF EXISTS post;
14+
15+ -- 3. Crear tabla POST (Entidad principal)
16+ CREATE TABLE post (
17+ id BIGINT NOT NULL AUTO_INCREMENT,
18+ username VARCHAR (255 ),
19+ title VARCHAR (255 ) NOT NULL ,
20+ text TEXT ,
21+ PRIMARY KEY (id)
22+ ) ENGINE= InnoDB;
23+
24+ -- 4. Crear tabla COMMENT (Entidad relacionada)
25+ CREATE TABLE comment (
26+ id BIGINT NOT NULL AUTO_INCREMENT,
27+ username VARCHAR (255 ),
28+ comment TEXT ,
29+ post_id BIGINT ,
30+ PRIMARY KEY (id),
31+ CONSTRAINT fk_post_comment FOREIGN KEY (post_id) REFERENCES post (id)
32+ ) ENGINE= InnoDB;
33+
34+ -- 5. Procedimiento de carga masiva optimizado
35+ -- DELIMITER $$
36+
37+ -- DROP PROCEDURE IF EXISTS FastDataLoad;
38+ -- CREATE PROCEDURE FastDataLoad()
39+ -- BEGIN
40+ -- DECLARE i INT DEFAULT 1;
41+
42+ -- -- Optimizaciones críticas de MySQL para inserción masiva
43+ -- SET FOREIGN_KEY_CHECKS = 0;
44+ -- SET UNIQUE_CHECKS = 0;
45+ -- SET AUTOCOMMIT = 0;
46+
47+ -- WHILE i <= 100000 DO
48+ -- -- Insertar Post
49+ -- INSERT INTO post (username, title, text)
50+ -- VALUES (
51+ -- CONCAT('User_Alpha_', i),
52+ -- CONCAT('Producto Pro v', i),
53+ -- CONCAT('Descripción técnica del post ', i, '. Este registro se usa para pruebas de estrés de JPA y latencia de red en topologías distribuidas.')
54+ -- );
55+
56+ -- -- Para el comentario, necesitamos el ID que se acaba de generar
57+ -- SET @last_id = LAST_INSERT_ID();
58+
59+ -- -- Insertar Comentario relacionado
60+ -- INSERT INTO comment (username, comment, post_id)
61+ -- VALUES (
62+ -- CONCAT('User_Alpha_', i),
63+ -- 'Reseña automática generada para carga de base de datos.',
64+ -- @last_id
65+ -- );
66+
67+ -- -- Commit parcial cada 10.000 filas para evitar saturar el buffer
68+ -- IF (MOD(i, 10000) = 0) THEN
69+ -- COMMIT;
70+ -- END IF;
71+
72+ -- SET i = i + 1;
73+ -- END WHILE;
74+
75+ -- COMMIT;
76+
77+ -- -- Restaurar configuración normal
78+ -- SET FOREIGN_KEY_CHECKS = 1;
79+ -- SET UNIQUE_CHECKS = 1;
80+ -- SET AUTOCOMMIT = 1;
81+ -- END$$
82+
83+ -- DELIMITER ;
84+
85+ -- -- 6. Ejecutar la carga
86+ -- CALL FastDataLoad();
87+
88+ -- -- Limpieza (Opcional)
89+ -- DROP PROCEDURE IF EXISTS LoadMassiveData;
0 commit comments