让我先解释一下我在做什么,这样你就可以更容易地给我解答了。
在localhost(mongodb)中,我的java应用程序与同一个数据库交互,我有三种配置,我应该计算java应用程序对这三种数据库执行的操作的性能(以毫秒为单位),为此,我使用google的stopwatch。
问题是,如果我按顺序计算操作的计时,那么最先启动的计时器总是最慢的。为什么?
代码如下:
public void Find_By_Name(int number) {
try {
Generator generator = new Generator();
Mongo mongo = new Mongo();
Mongo_Export mongo_export = new Mongo_Export();
Mongo_Export_2 mongo_export_2 = new Mongo_Export_2();
Mongo_Export_3 mongo_export_3 = new Mongo_Export_3();
generator.Generate_players(number);
mongo.Drop_database("FootballStats"); //Drop Database_1.
mongo.Drop_database("FootballStats_2"); //Drop Database_2.
mongo.Drop_database("FootballStats_3"); //Drop Database_3.
ArrayList<Player> all_players = generator.getAll_players();
ArrayList<Goalkeeper> all_goalkeepers = generator.getAll_goalkeepers();
Stopwatch time = null;
Stopwatch time_2 = null;
Stopwatch time_3 = null;
long ms = 0;
long ms_2 = 0;
long ms_3 = 0;
mongo_export.Insert_players(all_goalkeepers, all_players); // Insert documents in Database_1.
mongo_export_2.Insert_players(all_goalkeepers, all_players); // Insert documents in Database_2.
mongo_export_3.Insert_players(all_goalkeepers, all_players); // Insert documents in Database_3.
/**Start timer Database configuration 1 */
mongo_export.Find_by_name(all_goalkeepers, all_players); //Search in the Database_1
time.stop();
/**----------------------------------------------------------------------*/
/**Start timer Database configuration 2 */
time_2 = Stopwatch.createStarted();
mongo_export_2.Find_by_name(all_goalkeepers, all_players); //Search in the Database_2
time_2.stop();
/**----------------------------------------------------------------------*/
/**Start timer Database configuration 3 */
time_3 = Stopwatch.createStarted();
mongo_export_3.Find_by_name(all_goalkeepers, all_players); //Search in the Database_3
time_3.stop();
/**----------------------------------------------------------------------*/
ms = time.elapsed(TimeUnit.MILLISECONDS);
ms_2 = time_2.elapsed(TimeUnit.MILLISECONDS);
ms_3 = time_3.elapsed(TimeUnit.MILLISECONDS);
System.out.println("Timer for Database_1: " + ms + " ms.");
System.out.println("Timer for Database_2:: " + ms_2 + " ms.");
System.out.println("Timer for Database_3:: " + ms_3 + " ms.");
} catch (Exception e) {
System.out.println("Error in Find_By_Name().");
}
}
例如,如果我首先启动 db2 的计时器,那么这将是与数据库计时器1和3相比具有最高值的计时器。如果我先启动数据库定时器3也是一样的。
我也试着不按顺序求值,而是对每个数据库一次执行一次函数,这样所有的数据库都处于相同的条件,具有相同的延迟增量,但是在3个数据库中这样做,它们不会插入相同的文档,因为它们是在每次执行任何函数时随机生成的,因此文件大小不同。我希望所有的数据库有相同的文件,以及相同数量的文件。
我不想消除“延迟”,但我希望所有的数据库都能得到同等的评估。有什么解决办法吗?
暂无答案!
目前还没有任何答案,快来回答吧!