我目前有幾個Java程序使用Cron讀取和更新MySQL數據庫。Java作爲與MySQL交互的cron腳本vs使用PHP
我正在考慮將代碼移植到PHP。在我這樣做之前,我做了一個簡單的基準測試SELECT
,將某個表中的所有行存儲在一個字符串中。
我循環10,000次PHP和Java程序。 PHP在5秒內運行它。 Java花了大約1分鐘。
我對性能的差異感到驚訝。這是對的嗎? Java真的很慢嗎?或者我做錯了什麼?
我目前使用JDK 6和PHP CLI 5.3在CentOS 5.5中運行cron腳本。
這裏是Java代碼:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
public class Test {
private Connection connection = null;
private Statement statement = null;
public static void main(String args[])
{
(new Test()).run();
}
private void initDB() {
try {
String url="jdbc:mysql://localhost:3306/db";
Class.forName("org.gjt.mm.mysql.Driver");
connection = DriverManager.getConnection(url, "username", "password");
statement = connection.createStatement();
} catch (Exception e) {
e.printStackTrace();
}
}
private String getUserProfiles()
{
String query = "SELECT * FROM UserProfile;";
String output = "";
try
{
for(int i = 0; i < 10000; ++i)
{
ResultSet rs=statement.executeQuery(query);
while(rs.next())
output += rs.getString("name");
}
}
catch (Exception e)
{
e.printStackTrace();
}
return output;
}
/更多代碼繼續/
然後在PHP:
try
{
$db = new PDO("mysql:host=localhost;dbname=db;charset=utf8", 'username', 'password');
$str = "";
for($i=0; $i < 10000; ++$i)
{
$qry = $db->prepare('SELECT * FROM UserProfile;');
$qry->execute();
$result = $qry->fetchAll(PDO::FETCH_OBJ);
foreach($result as $profile)
{
$str .= $profile->name;
}
}
}
catch(PDOException $e)
{
echo $e->getMessage();
exit;
}
提高在這種情況下,Java的字符串表現我真的認爲我們將不得不看到兩者的代碼(或至少例子),作爲對你怎麼做。 – Joel 2011-04-02 03:35:17
你可以嘗試使用'PreparedStatement'而不是'Statement' – Nishan 2011-04-02 04:41:20
剛剛用PreparedStatement嘗試過,仍然運行得如此慢...... – samxli 2011-04-02 05:03:16