2011-08-08 40 views
1

我想知道是否有一個用於mysql/php基準的(免費)工具。在MySql和PHP中插入隨機數據作爲基準

特別是,我想插入數以千計的數據到MySQL數據庫中,並用併發查詢來測試應用程序,看看它是否會持續。這是,在最壞的情況下測試應用程序。

我看到了一些付費工具,但沒有免費或可自定義的工具。

有什麼建議嗎?或任何腳本?

日Thnx

+0

你是在Windows上還是你在Linux上? – Sudhi

+0

http://dev.mysql.com/doc/refman/5.0/en/mysql-benchmarks.html不夠好? –

回答

0

做一個循環(可能是無限的),將保持數據插入到數據庫,並測試從那裏。

+0

但如何測試併發查詢,這是:1000個查詢-users-在同一時間? – Lopis

+0

@Lopis你可以在命令行中運行php代碼。打開x個命令行窗口並運行你的循環php代碼 – Neal

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

但是如何測試併發查詢,這是:1000個查詢-users-同時?另外,如何控制主鍵:無重複等 – Lopis

+0

@Lopis:不要把它作爲主鍵 - 如果它只是用於測試,那沒關係。與此同時?這將爲每個頁面請求添加1000倍的測試值。怎麼了? – genesis

0
for($i=1;$i<5000;$i++){ 
    $query = mysql_query("INSERT INTO something VALUES ($i)"); 
} 

與表取代的東西; d

2

插入一條記錄到表中。

然後做:

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

然後運行該行幾次。每次您將表格中的行數加倍(並且倍增速度非常快)。這比在PHP或其他代碼中生成數據要快得多。您可以修改您從中選擇RAND()的列,以及數字的範圍。也可以隨機生成文本,但可以做更多的工作。

您可以同時從多個終端運行此代碼以測試併發插入。 IGNORE將忽略任何主鍵衝突。

0

如果你想測試併發性,你將不得不線程你的插入/更新語句。
一個簡單的和非常簡單的方式(不進入叉/線程和所有的爵士樂)將做在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; 

您可以隨時通過創建具有不同的插入/更新/ SELECT查詢,並通過運行它們的循環多個PHP腳本擴展這個(記住,如果你想要更多的負載改變i<100更高的數字。只是不編輯:添加了等待語句,在此之下你可以編寫其他命令/你可能想要做的事情,在你的MySQL數據庫溢出之後。

0

我做了一個快速搜索,在MySQL documentation =>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要快,您應該查看MemcachedRedis來緩存您的查詢。我非常喜歡Redis,感謝http://redistogo.com,您可以獲得免費(小)實例。大多數情況下,READS正在殺死你的服務器,而不是那些頻率較低(大部分時間)的WRITES。當WRITES經常是大部分時候,當你丟失一些數據時,這並不是一個真正的大案例。有大寫字率的網站例如Twitter或Facebook。但是,如果推特或Facebook的帖子丟失了,我不認爲這是世界末日。就像我之前指出的那樣,您可以使用Memcached或Redis輕鬆解決這個問題。

如果WRITES正在查殺,您可以查看bulk insert(如果可能),transactional insert, delayed inserts when not using InnoDBpartitioning。如果數據不是非常關鍵,那麼可以先將查詢放入內存中,然後定期進行批量插入。這樣,當你從MySQL讀取數據時,你會返回陳舊的數據(可能是問題)。但是,當你使用redis時,你可以輕鬆地將所有數據存儲在內存中,但是當你的服務器崩潰時,你可能會丟失數據,這可能是個大問題。