Search Posts

太失望,Redis比H2慢很多很多

插一百萬行record, Redis比H2慢太多,H2只需要七秒,redis用了40秒,為什麼用c++寫出來的redis會比用java寫出來的h2慢這麼多的? NoSQL不是比傳統database爽快的嗎?

<?
	$redis = new Redis();
	$redis->connect('localhost', 6379);
	$redis->auth('password');
	echo "Connection to server sucessfully\n";
	echo "Server is running: " . $redis->ping()."\n";
	//echo $redis->get('name')."\n";
	//echo $redis->hget('car', 'price')."\n";
	echo date('i:s')."\n";
	for ($x=0;$x<1000000;$x++){
		// if ($x%10000==0)
		// echo $x.' > '.date('i:s')."\n";
		$redis->hset('car'.$x, 'price', $x);
	}
	echo date('i:s')."\n";
?>
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;

import org.h2.tools.DeleteDbFiles;


// H2 Database Example

public class H2FileDatabaseExample {

    private static final String DB_DRIVER = "org.h2.Driver";
    private static final String DB_CONNECTION = "jdbc:h2:~/test";
    private static final String DB_USER = "sa";
    private static final String DB_PASSWORD = "";

    public static void main(String[] args) throws Exception {
        try {
            // delete the H2 database named 'test' in the user home directory
            //DeleteDbFiles.execute("~", "test", true);
System.out.println(new Date());
            insertWithStatement();
System.out.println(new Date());
            //DeleteDbFiles.execute("~", "test", true);

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // H2 SQL Statement Example
    private static void insertWithStatement() throws SQLException {
        Connection connection = getDBConnection();
        Statement stmt = null;
        try {
            connection.setAutoCommit(false);
            stmt = connection.createStatement();
stmt.execute("delete from PERSON");
//            stmt.execute("CREATE TABLE PERSON(id int primary key, name varchar(255))");
		for (int x=0;x<1000000;x++){
            stmt.execute("INSERT INTO PERSON(id, name) VALUES("+x+", 'Anju"+x+"')");
	}

/*            ResultSet rs = stmt.executeQuery("select * from PERSON");
            System.out.println("H2 Database inserted through Statement");
            while (rs.next()) {
                System.out.println("Id "+rs.getInt("id")+" Name "+rs.getString("name"));
            }
*/
            stmt.close();
            connection.commit();
        } catch (SQLException e) {
            System.out.println("Exception Message " + e.getLocalizedMessage());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            connection.close();
        }
    }

    private static Connection getDBConnection() {
        Connection dbConnection = null;
        try {
            Class.forName(DB_DRIVER);
        } catch (ClassNotFoundException e) {
            System.out.println(e.getMessage());
        }
        try {
            dbConnection = DriverManager.getConnection(DB_CONNECTION, DB_USER,
                    DB_PASSWORD);
            return dbConnection;
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        return dbConnection;
    }
}

Leave a Reply

Your email address will not be published. Required fields are marked *