Небольшой вопрос для сообщества, у меня есть следующий код, и я хотел бы знать, является ли нормальное время выполнения кода 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());
}