1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dn-jinmin-tdg

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 14 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 09:55 f4bd282

Тестовый генератор данных v4.0

Данный инструмент предназначен для пакетного добавления тестовых данных в проекты, используемые при разработке и тестировании.

В настоящее время инструмент не поддерживает добавление связанных данных, но поддерживает пакетное добавление данных в несколько таблиц.

На данный момент при добавлении данных в одну таблицу в среде InnoDB с движком хранения данных innodb на 100w записей затрачивается от 5 до 7 секунд. Точное время зависит от конфигурации компьютера и параметров настройки.

Конфигурация моего компьютера:

Параметр
cpu i7-8
Ядра 8 ядер
Память 16G
mysql 5.7
Движок innodb

Параметры конфигурационного файла можно посмотреть в примере ниже, который представляет собой конфигурацию по умолчанию.

Загрузка

go get -u gitee.com/dn-jinmin/tdg

Использование

  • Создайте базу данных mysql и добавьте соответствующие таблицы.
  • Настройте параметры TDG.
  • Запустите генерацию тестовых данных с помощью команды bin/tdg --config.

WUID

Это высокопроизводительное правило генерации уникальных идентификаторов. Для использования wuid необходимо создать следующую таблицу в mysql с тегом wuid:

CREATE TABLE `wuid` (
  `h` int(10) NOT NULL AUTO_INCREMENT,
  `x` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`x`),
  UNIQUE KEY `h` (`h`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;

Анализ параметров конфигурации

Основные параметры конфигурации системы

{
  "tdg": {
    "data_one_init_max_memory": 104857600,
    "build_sql_worker_num": 5,
    "insert_sql_worker_num": 10,
    "build_batches_count": 2000,
    "debug": false,
    "no_write": false,
    "print_sql": false,
    "skip_err": true
  }
}
Параметр Описание Рекомендуемая настройка
data_one_init_max_memory Устанавливает максимальный объём памяти для одного рабочего процесса генерации SQL 104857600
build_batches_count Используется для оптимизации, пакеты генерации SQL записываются в базу данных 2000
build_sql_worker_num Количество рабочих процессов генерации SQL 5
insert_sql_worker_num Количество рабочих процессов вставки данных 10
Параметр Описание
debug Выводит информацию о параметрах системы, по умолчанию false
no_write Определяет, будут ли данные записаны в SQL, по умолчанию false
print_sql Выводит SQL, по умолчанию false
skip_err Пропускает ошибки и продолжает запись

Параметры mysql

{
  "mysql": {
    "addr": "127.0.0.1:3306",
    "user" : "root",
    "pass" : "000000",
    "charset" : "utf8",
    "dbname": "sharhall",
    "table_prefix": ""
  }
}
Параметр Описание
addr Адрес
user Имя пользователя
pass Пароль
charset Установка кодировки для китайского языка
dbname Подключение к базе данных
table_prefix Префикс таблицы

Таблица конфигурации

{
  "tables": {
    "table_name": {
      "status": 0,
      "table_name": "table name",
      "count": 1000,
      "columns": {
        ""
      }
    }
  }
}

Здесь определяются таблицы, в которые необходимо добавить тестовые данные, и правила их добавления. Можно одновременно добавлять данные в несколько таблиц.

Параметр Описание
tables.table_name Имя таблицы или псевдоним
tables.table_name.table_name Имя базы данных
status Состояние таблицы: -1 — не добавлять, 0 — добавлять
count Объём генерируемых данных
columns Список генерируемых полей

Пример конфигурации поля:

{
  "table": {
    "table_name": {
      // ..
      "columns": {
        "col_name": {
          "tag": "tag-name",
          "len": 10,
          "fixed_len": "2|3",
          "max": 100,
          "min": 10,
          "params": "params",
          "default": {
            "value": "default-value",
            "frequency": 30
          },
          "content": [
            0,1,2
          ]
        }
      }
    }
  }
}

Подробная конфигурация:

Параметр Описание
table.table_name.col_name Имя поля данных, определяется в соответствии с фактическим именем поля в таблице данных
tag Правило генерации тестовых данных. Если правило не задано, необходимо использовать content или default. По умолчанию — пустая строка
len Длина данных поля. Фиксированная длина
fixed_len Длина данных поля. Переменная длина; определение диапазона min|max. Пример: 2|3 означает диапазон длины от 2 до 3
max Максимальное значение. В настоящее время поддерживается только числовой тип данных
min Минимальное значение. В настоящее время поддерживается только числовой тип данных
------------------------- ------------------------------------------------------------------------------------------
default.frequency 默认值生成概率,以百分比进行计算frequency=100相当于100%,以百分比进行计算frequency=30则为30%
content 自定义测试数据的生成内容

tag规则

Выполнение команды tdg tag позволит просмотреть все поддерживаемые теги.

tag-name 解释
wuid Генерация уникального случайного id, необходимо создать соответствующую таблицу wuid в базе данных
uint Генерация случайных данных типа int, диапазон значений от 0 до R
char Случайные символы в диапазоне от 09, az, A~Z
phone Случайный номер телефона
email Случайная электронная почта
name Случайное имя
address Случайный адрес
bankId Случайный номер банковской карты
city Случайный город
idcart Случайный идентификационный номер
chinese_char Случайные китайские символы
english Случайные данные на английском языке, состоящие из букв az и AZ
wuid Случайный wuid
order_no Случайный номер заказа
password Случайный пароль, поддержка hash и md5, по умолчанию 0000
date Случайная дата в формате [2006-01-02]
datetime Случайная дата и время в формате [2006-01-02 15:04:05]
time Случайное время в формате [15:04:05]
timestamp Случайное значение времени

Все правила для генерации временных данных: если указать Default.Value как now, то будет получено текущее время.

关联

Можно создавать тестовые данные одновременно для двух таблиц, основываясь на их взаимосвязи. В файле etc есть пример таблицы table.json, который описывает структуру данных для использования. На данный момент поддерживаются только отношения 1:1, 1:n и n:1.

{
  "relevancy": {
      "member:member_info": {
        "tables": ["member","member_info"],
        "columns": ["id"   ,"id"],
        "ties": "1:1"
      }
  }
}

Конфигурация:

配置 解释
relevancy Взаимосвязь
member:member_info Ключ взаимосвязи, настраиваемый
tables Таблицы, связанные друг с другом (в настоящее время поддерживается только две таблицы)
columns Связывающие поля, соответствующие информации в связанных таблицах
ties Тип взаимосвязи

Пример

Создание структуры MySQL-таблиц:

CREATE TABLE `member_info` (
  `id` varchar(255) NOT NULL,
  `age` int(11) DEFAULT NULL,
  `sex` int(11) DEFAULT NULL,
  `card` varchar(255) DEFAULT NULL,
  `desc` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=Innodb DEFAULT CHARSET=utf8;

CREATE TABLE `member` (
  `id` varchar(255) NOT NULL,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `phone` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `status` tinyint(4) DEFAULT NULL,
  `date` date DEFAULT NULL,
  `datetime` datetime DEFAULT NULL,
  `timestamp` int(11) DEFAULT NULL,
  `time` time DEFAULT NULL,
  `order_no` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=Innodb AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/dn-jinmin-tdg.git
git@api.gitlife.ru:oschina-mirror/dn-jinmin-tdg.git
oschina-mirror
dn-jinmin-tdg
dn-jinmin-tdg
master