MySQL вопрос - сколько времени эта функция занимает нормально? - PullRequest
0 голосов
/ 27 сентября 2019

Небольшой вопрос для сообщества, у меня есть следующий код, и я хотел бы знать, является ли нормальное время выполнения кода 60 мс (59383645 нс), или это слишком много, и мы должны оптимизировать его ..60 мс - это долгое время для того, что делает код?

На самом деле, код просто запрашивает операторы, используя ListenableFuture Guava и устанавливая данные для объекта CommonUser.

    @Override
    public void load() {
        // Listen for timings loggings
        final long timingStart = System.nanoTime();

        // Get Database Client instance
        final IDatabaseClient databaseClient = CoreBukkit.getCoreBukkit().getDatabaseClient();

        // Prepare statements
        final PreparedStatement insertStatement = databaseClient.prepareStatement("INSERT INTO network.userdata VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE username=?");
        final PreparedStatement selectStatement = databaseClient.prepareStatement("SELECT * FROM network.userdata WHERE username=?");

        // Try to set statements variables, otherwise throw SQLException
        try {
            insertStatement.setString(1, this.getUniqueId());
            insertStatement.setString(2, this.getUsername());
            insertStatement.setString(3, "developing");
            insertStatement.setString(4, this.getFirstJoin().toString());
            insertStatement.setString(5, this.getLastSeen().toString());
            insertStatement.setBoolean(6, this.isHiding());
            insertStatement.setBoolean(7, this.isAcceptingRequests());
            insertStatement.setInt(8, this.getCurrency());
            insertStatement.setInt(9, this.getBoxTokens());
            insertStatement.setString(10, this.getRank().toString());
            insertStatement.setString(11, this.getFacebook());
            insertStatement.setString(12, this.getTwitter());
            insertStatement.setString(13, this.getInstagram());
            insertStatement.setInt(14, this.getLevel());
            insertStatement.setLong(15, this.getExperience());
            insertStatement.setString(16, this.getUsername());

            selectStatement.setString(1, this.getUsername());
        } catch (SQLException exception) {
            CoreBukkit.getCoreBukkit().getLogger().log(Level.INFO, "Exception ocurred while setting value for statement: " + exception.getMessage()  + " " + exception.getErrorCode());
        }

        // Query -insert statement- asynchronously, if the user doesn't exist on database, create new data.
        databaseClient.queryAsync(insertStatement);

        // Query -select statement- asynchronously using ListenableFuture
        final ListenableFuture<ResultSet> resultSetFuture = databaseClient.queryResultAsync(selectStatement);

        CallbackWrapper.addCallback(resultSetFuture, result -> {
            try {
                if (result.next()) {
                    this.setIpHistory(List.empty());
                    this.setFirstJoin(new Date());
                    this.setLastSeen(new Date());
                    this.setHiding(result.getBoolean("hiding"));
                    this.setAcceptingRequests(result.getBoolean("isAcceptingRequests"));
                    this.setCurrency(result.getInt("currency"));
                    this.setBoxTokens(result.getInt("boxTokens"));
                    this.setRank(Rank.valueOf(result.getString("rank")));
                    this.setFacebook(result.getString("facebook"));
                    this.setTwitter(result.getString("twitter"));
                    this.setInstagram(result.getString("instagram"));
                    this.setLevel(result.getInt("level"));
                    this.setExperience(result.getLong("experience"));
                }
            } catch (SQLException exception) {
                CoreBukkit.getCoreBukkit().getLogger().log(Level.INFO, "Exception ocurred while checking ResultSet#next: " + exception.getMessage()  + " " + exception.getErrorCode());
            }
        });

        // Listen for timings logging
        final long end = System.nanoTime();

        CoreBukkit.getCoreBukkit().getLogger().log(Level.INFO, "---[ TIMINGS ] ---");
        CoreBukkit.getCoreBukkit().getLogger().log(Level.INFO, "Data loaded in " + (timingStart - end) + "ns"); // Latest: 59383645ns

        CoreBukkit.getCoreBukkit().getLogger().log(Level.INFO, "Loaded data for " + this.getUsername());
    }
...