Быстрая генерация больших объёмов данных.

Быстрая генерация больших объёмов данных.

@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 фейковых данных, готовых к тестированию нагрузок.

Report Page