绕过很多用户是好的设计吗? - SpringBoot

时间:2018-01-02 15:20:14

标签: spring performance spring-boot design-patterns

我正在研究良好的设计原则,并希望得到一些反馈。

我想浏览我的应用程序中的每个用户,检查他们的预定活动,查看是否有即将发布的用户并向他们发送电子邮件。它看起来有点像这样:

 List<Patient> listOfAllPatients = patientRepositoryJPA.findAll();

    if (listOfAllPatients.size() != 0) {

        for (Patient patient : listOfAllPatients) {

            user = userRepositoryJPA.findByUsername(patient.getUsername());

            Timestamp currentTimeAndDate = new Timestamp(System.currentTimeMillis());
            Long closestDate = Integer.toUnsignedLong(31);;

            List<Activity> activities = activityRepositoryJPA.findByPatientAndStartDateTimeAfter(patient, currentTimeAndDate);

            for (Activity activity : activities) {

                Timestamp activityDateAndTime = activity.getStartDateTime();

                Long difference = getTimeDifferenceByMinutes(currentTimeAndDate, activityDateAndTime);

                if (difference < closestDate) {

                    LocalDateTime upcomingDate = activity.getStartDateTime().toLocalDateTime();

                    emailHandler.sendEmail(javaMailSender, "Upcoming Activity Reminder", "The activity, " + activity.getName() + " is starting soon! (" +
                            upcomingDate.getHour() + ":" + upcomingDate.getMinute() + ")", user);
                }

            }
        }

现在我在这里循环遍历应用程序中的每个患者,然后遍历他们的每个活动。如果有很多用户(数百万)肯定会有一些瓶颈或其他东西。

有人对大公司如何处理这样的数据有任何建议吗?

或者我正在做得好吗?感谢。

  

经过一些建议后,我对此进行了改进:

    Timestamp currentTimeAndDate = new Timestamp(System.currentTimeMillis());
    LocalDateTime add31Minutes = LocalDateTime.now().plus(31, ChronoUnit.MINUTES);
    Timestamp noLaterThanDateAndTime = Timestamp.valueOf(add31Minutes);

      for (Activity activity : activityRepositoryJPA.findByStartDateTimeBetween(currentTimeAndDate, noLaterThanDateAndTime)) {

        Patient patient = activity.getPatient();

        LocalDateTime upcomingDate = activity.getStartDateTime().toLocalDateTime();

        emailHandler.sendEmail(javaMailSender, "BAA - Upcoming Activity Reminder", "The activity, " + activity.getName() + " is starting soon! (" +
                upcomingDate.getHour() + ":" + upcomingDate.getMinute() + ")", patient.getUser());
    }

现在我在1次查询中找到现在和31分钟之间的所有活动。

0 个答案:

没有答案