Быстрая генерация больших объёмов данных.
@phpproglib
В процессе тестирования готового приложения важно также проверить, как оно работает с большими объёмами данных. Но чтобы это сделать, данные надо откуда-то брать. Во многих случаях предлагают использовать библиотеку Faker, которая, как видно из названия, генерирует фейковые данные в заданных объёмах. Однако можно обойтись и без неё средствами самого SQL.
Создадим таблицу posts с со следующей структурой. Заполним ее 10 тестовыми записями.
CREATE TABLE posts (
title varchar(256) NOT NULL
);
INSERT INTO
posts (title)
VALUES
('8iRDgsEIq4GmOs32FnHM3b3cH60n3mm8070'),
('UAmsXyrKgApfHMyV2kUrYqLphN99Q7TJSoe'),
('OX1qiFeTigcOTO5JVvgFk7MRDgjgatkTqwL'),
('CT9Kfbplp4QC87G32UIKlkGd31jdjt4qH4f'),
('WsAhjBL5tAgihYZBtX97FNUmEpXavhb4CRw'),
('LwaitJ5dieXyixEmjJXhhqDY8Zg9Tu5ecoV'),
('KpHsnqrcMCpkRxkGNMjEJV0jFaeucPtbLWe'),
('t2GSIDOvW14eMlroAWrRR6xU5DoeNUXY0lD'),
('rSvrEPxR8rcw7QYjXfeNdyf3LpqYNHu3W7a'),
('6liUHPkjnygSatoUB4juZ5TaJZjaxHpR4BL');
Для того, чтобы превратить 10 записей из таблицы posts в 1 000 000 записей произведем самообъединение таблицы posts шесть раз
SELECT fst.title FROM posts AS fst, posts AS snd, posts AS thd, posts AS fth, posts AS fif, posts AS sth;
Оператор JOIN, который в SQL может быть заменен обычной запятой, осуществляет декартово соединение таблиц, когда каждой записи одной таблицы сопоставляется каждая запись другой таблицы. Таким образом, если в одной таблице 10 записей и в другой таблице 10 записей, результирующая таблица, полученная их соединением через JOIN будет содержать 100 записей. Как нетрудно увидеть
10 x 10 x 10 x 10 x 10 x 10 = 1 000 000 записей
Теперь у нас есть 1 000 000 фейковых данных, готовых к тестированию нагрузок.