Вставка случайных данных в MySql и PHP для эталонных тестов

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

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

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

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

Thnx

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

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

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

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

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

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

 for($i=1;$i=1000;$i++){ mysql_query("INSERT INTO testing VALUES ('".$i."')"); //do some other testing } 
 for($i=1;$i<5000;$i++){ $query = mysql_query("INSERT INTO something VALUES ($i)"); } 

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

если вы хотите протестировать параллелизм, вам нужно будет вставить свои инструкции вставки / обновления.
Легкий и простой способ (без перехода в 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 )
Edit: добавлен оператор wait, ниже этого вы можете написать другие команды / вещи, которые вы можете захотеть после наводнения вашего mysql db.

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

База данных Open Source Database Benchmark, доступная по адресу http://osdb.sourceforge.net/ .

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

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

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