性能 - 在Java中进行迭代与查询数据库

时间:2016-12-28 13:16:13

标签: java database lambda iterator

我很难想到如何问这个问题所以我会创建一个例子来证明我的要求:

假设我有我的模特:

public class UserEvaluation {
    String name;
    Date respondedAt;
}

public class Evaluation {
    String name;
    List<UserEvaluation> userEvaluations;
{

然后在我的EvaluationService中,我需要知道已响应的用户评估量(respondedAt != null)。

可能的解决方案:

1迭代所有项目:

Evaluation evaluation = evaluationRepository.get(1);

Long count = 0;

for(UserEvaluation userEvaluation : evaluation.getUserEvaluations()) {
    if(userEvaluation.getRespondedAt() != null) {
        count++;
    }
}

2 Lambda表达式:

Evaluation evaluation = evaluationRepository.get(1);

Long count = evaluation.getUserEvaluations().stream()
                  .filter(ue -> ue.getRespondedAt() != null)
                  .count();

3通过查询数据库:

Evaluation evaluation = evaluationRepository.get(1);

Long count  = userEvaluationRepository.getRespondedCountByEvaluation(evaluation); //And implement this simple count query.

所以这是最简单的事情。我会选哪个?我在我的应用程序中使用了很多迭代器和lambda流迭代器表达式。但我担心这应该是一个错误,我需要与数据库进行更多的交互?我是不是该?我不应该吗?

1 个答案:

答案 0 :(得分:0)

如果您不确定我会设计它,那么您可以根据需要进行更改。有一个访问数据库的DAO实现,但如果确定使用数据库,可以更改为在内存数据中使用的实现速度不够快。

interface DatabaseDAO {
    long getRespondedCountByEvaluation(Evaluation e);
}

这取决于哪种方法可以检索更少的数据。如果你抓取一次数据并从那里多次提取信息它可以更快,但如果你每次只获得一小部分并拥有一个索引数据库,它可以更快。我会设计它