首页 > 解决方案 > 为什么最先启动的计时器最慢?

问题描述

让我先解释一下我在做什么,以便您可以更轻松地给我解决方案。

我在 localhost (MongoDB) 中有三个相同数据库的配置,我的 Java 应用程序与之交互,我应该以毫秒为单位计算 Java 应用程序对三个数据库执行的操作的性能,为此我使用 Google 的秒表。

问题是如果我按顺序计算操作的时间,首先启动的计时器总是最慢的。为什么?

这是代码:

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().");
            
        }
        
    }

例如,如果我首先启动数据库 2 的计时器,这将是与数据库计时器 1 和 3 相比具有最高值的计时器。如果我首先启动数据库计时器 3,情况也是如此。

我还尝试不按顺序评估,而是对每个数据库一次执行一次函数,这样所有数据库都处于相同的条件和相同的延迟增量,但是通过在 3 个数据库中这样做,它们不是插入相同的文档,因为它们是在每次执行任何函数时随机生成的,因此文档具有不同的大小。我希望所有数据库都具有相同的文档以及相同数量的文档。

我不想消除“延迟”,但我希望对所有数据库进行平等评估。有什么解决办法吗?

标签: javamongodb

解决方案


推荐阅读