Вставьте случайные данные в MySql и PHP для теста - PullRequest
1 голос
/ 08 августа 2011

Мне было интересно, есть ли (бесплатный) инструмент для теста mysql / php.

В частности, я хотел бы вставить тысячи данных в базу данных MySQL и протестировать приложение с одновременными запросами, чтобы определить, будет ли оно работать долго. Это тестирование приложения в худшем случае.

Я видел несколько платных инструментов, но ни одного бесплатного или настраиваемого.

Есть предложения? или любой скрипт?

Thnx

Ответы [ 6 ]

2 голосов
/ 08 августа 2011

Вставьте одну запись в таблицу.

Затем выполните:

INSERT IGNORE INTO table SELECT FLOOR(RAND()*100000) FROM table;

Затем выполните эту строку несколько раз.Каждый раз вы удваиваете количество строк в таблице (и удвоение растет ОЧЕНЬ быстро).Это намного быстрее, чем генерация данных в PHP или другом коде.Вы можете изменить, из каких столбцов вы выбираете RAND (), и каков диапазон чисел.Можно также генерировать случайный текст, но это потребует больше усилий.

Вы можете запускать этот код одновременно с нескольких терминалов для проверки одновременных вставок.IGNORE будет игнорировать любые коллизии первичного ключа.

0 голосов
/ 08 августа 2011

Я сделал быстрый поиск и нашел следующую страницу в документации MySQL => http://dev.mysql.com/doc/refman/5.0/en/custom-benchmarks.html. Эта страница содержит следующие интересные ссылки:

эталонный тест базы данных с открытым исходным кодом, доступный по адресу http://osdb.sourceforge.net/.

Например, вы можете попробовать сравнительные пакеты, такие как SysBench и DBT2, доступно по http://sourceforge.net/projects/sysbench/, и http://osdldbt.sourceforge.net/#dbt2. Эти пакеты могут принести система на колени, поэтому обязательно используйте их только на своем развитии системы.

Чтобы MySQL был быстрым, вам нужно заглянуть в Memcached или Redis для кэширования ваших запросов. Мне очень нравится Redis, и вы можете получить бесплатный (маленький) экземпляр благодаря http://redistogo.com. В большинстве случаев ЧТЕНИЯ убивают ваш сервер, а не ПИСЬМА, что происходит реже (в большинстве случаев). Когда ПИСЬМА часто бывают чаще всего, это не очень большой случай, когда вы теряете некоторые данные. Сайты, которые имеют высокие ставки WRITE, например, Twitter или Facebook. Но опять же, я не думаю, что это конец света, если твит или пост на Facebook будут потеряны. Как я уже говорил ранее, вы можете легко это исправить, используя Memcached или Redis.

Если WRITES убивают, вы можете посмотреть массовая вставка , если возможно, транзакционная вставка, отложенные вставки, когда не используется InnoDB или разбиение . Если данные не очень важны, вы можете сначала поместить запросы в память, а затем периодически выполнять массовую вставку. Таким образом, когда вы читаете из MySQL, вы возвращаете устаревшие данные (это может быть проблемой). Но опять же, когда вы используете Redis, вы можете легко сохранить все свои данные в памяти, но когда ваш сервер падает, вы можете потерять данные, что может быть большой проблемой.

0 голосов
/ 08 августа 2011

если вы хотите протестировать параллелизм, вам придется поточить ваши операторы вставки / обновления.
Простой и очень простой способ (без использования fork / threads и всего такого в джазе) состоит в том, чтобы сделать это в bash следующим образом
1. Создайте исполняемый скрипт PHP

#!/usr/bin/php -q
<?php
/*your php code to insert/update/whatever you want to test for concurrency*/
?>

2.Вызовите его в цикле for, добавив &, чтобы он работал в фоновом режиме.

#!/bin/bash
for((i=0; i<100; i++))
do
    /path/to/my/php/script.sh &;
done
wait;

Вы всегда можете расширить это, создав несколько сценариев php с различными запросами на вставку / обновление / выбор и запустив их через цикл for (не забудьте изменить i<100 на большее число, если вы хотите увеличить нагрузку.Только не забудьте добавить & после вызова скрипта. (Конечно, вам нужно будет chmod +x myscript.sh)
Редактировать: добавлен оператор ожидания, ниже этого вы можете написать другие команды / вещи, которые вы можетехочу сделать после затопления вашей базы данных mysql.

0 голосов
/ 08 августа 2011
for($i=1;$i<5000;$i++){
  $query = mysql_query("INSERT INTO something VALUES ($i)");
}

замените что-нибудь на вашем столе; D

0 голосов
/ 08 августа 2011
for($i=1;$i=1000;$i++){
    mysql_query("INSERT INTO testing VALUES ('".$i."')");
    //do some other testing
}
0 голосов
/ 08 августа 2011

Создайте цикл (возможно, бесконечный), который будет продолжать вставлять данные в базу данных и проверять ход оттуда.

...