[RUBY] [Rails] Ich habe versucht, die Stapelverarbeitung mit der Rake-Task zu implementieren

Einführung

Umgebung

Rails: 5.2.3 Ruby: 2.6.3 MySQL: 5.6.40

Inhalt

user.rb


has_many :questions, dependent: false
has_many :only_questions_visible_to_user, -> { where(question_id: nil).visible_to_user }, class_name: 'Question', dependent: false

scope :visible_to_user, -> { where(is_invalid: false).where(deleted: false) }

def update_question_count!
  update!(question_count: count_questions)
end

private

# question_Methode zur Aggregation beim Aktualisieren der Anzahl
#
# @return [Integer]
def count_questions
  only_questions_visible_to_user.size
end

question.rb


belongs_to :user, optional: true

Code implementiert

lib/tasks/one_shot/update_users_question_count.rake


# frozen_string_literal: true

namespace :user do
  desc 'Update users_question_count'
  task update_question_count: :environment do |_task|
    index = 0
    updated_question_counts = 0
    user_count = User.count
    logger = Logger.new($stdout)
    logger.info 'Start'

    User.find_each do |user|
      begin
        if user.question_count != user.only_questions_visible_to_user.size
          user.update_question_count!
          updated_question_counts += 1
        end
      rescue ActiveRecord::RecordInvalid => e
        logger.info "Failed to update user_id: #{user.id}"
        logger.info("#{e.class}: #{e.message}")
        next
      end

      index += 1
      case index
      when 4000, 8000, 12_000, 16_000
        logger.info "Progress: #{index}/#{user_count}"
      end
    end
    logger.info "Updated User Count: #{updated_user_counts}"
    logger.info 'Finished'
  end
end

Stapelausführung

bundle exec rake user:update_question_count

――Das Aktualisieren von ca. 19.000 Datensätzen dauerte ca. 45 Sekunden.

Recommended Posts

[Rails] Ich habe versucht, die Stapelverarbeitung mit der Rake-Task zu implementieren
Ich habe versucht, die Ajax-Verarbeitung der ähnlichen Funktion in Rails zu implementieren
Ich habe versucht, die Bildvorschau mit Rails / jQuery zu implementieren
[Schienen] Implementieren Sie die Rechenaufgabe
Ich habe versucht, das Hochladen von Dateien mit Spring MVC zu implementieren
Ich habe versucht, Sterling Sort mit Java Collector zu implementieren
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit spiritueller Technik zu erhöhen
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, eine flexible ODER-Zuordnung mit MyBatis Dynamic SQL zu implementieren
Ich habe versucht, mit Rails eine Gruppenfunktion (Bulletin Board) zu erstellen
Ich habe versucht, Processing auf VS Code zu migrieren
Ich habe versucht, mit Web Assembly zu beginnen
Ich habe versucht, das Iterator-Muster zu implementieren
[Rails] Ich habe versucht, eine Transaktion zu implementieren, die mehrere DB-Prozesse kombiniert
[iOS] Ich habe versucht, mit Swift eine insta-ähnliche Verarbeitungsanwendung zu erstellen
Schienen: Wie man eine Rechenaufgabe schön schreibt
Ich habe versucht, AdoptOpenJDK 11 (11.0.2) mit dem Docker-Image zu überprüfen
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Ich habe versucht, polymorph in Nogizaka zu implementieren.
Ich habe versucht, die Federbeinkonfiguration mit Coggle zu verwalten
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
Ich habe versucht, Anmeldeinformationen mit JMX zu verwalten
Ich möchte mit Firestore von Rails spielen
Rails-Anfänger haben versucht, mit RSpec zu beginnen
Ich habe versucht, einen Server mit Netty zu implementieren
Ich habe versucht, den Block mit Java zu brechen (1)
Rails-API-Modus Ich habe versucht, die Mehrfachsuchfunktion für Schlüsselwörter mithilfe von Arrays und iterativer Verarbeitung zu implementieren.
Ich möchte die Aggregationsverarbeitung mit Spring-Batch durchführen
[Rails] Ich möchte CSS mit Webpacker laden
Ich habe versucht, mit HCE-F von Android eine Funktion zu implementieren, die Felica Lite entspricht
Ich habe Spring Batch ausprobiert
Ich habe versucht, was ich mit Stream leise versuchen wollte.
Ich habe versucht, CSV mit Outsystems zu lesen und auszugeben
Ich habe versucht, die Firebase-Push-Benachrichtigung in Java zu implementieren
[Java 11] Ich habe versucht, Java auszuführen, ohne mit Javac zu kompilieren
Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen
Ich habe versucht, mit Spring Data JPA zu beginnen
Ich möchte Benutzer mit Devise + OmniAuth bei Rails authentifizieren
Ich habe versucht, Animationen mit der Blazor + Canvas-API zu zeichnen
Rails6 Ich habe versucht, Docker in eine vorhandene Anwendung einzuführen
[Java] Ich habe versucht, die Yahoo API-Produktsuche zu implementieren
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
Beachten Sie, dass ich süchtig nach Stapelverarbeitung mit Spring Boot war
[Swift] Ich habe versucht, mit UICollectionView eine Instagram-ähnliche Benutzeroberfläche mit nur Code ohne Storyboard zu implementieren
Ich habe versucht, das Ruby on Rails-Plugin mit vim-plug zu installieren
Ich habe versucht, die ähnliche Funktion durch asynchrone Kommunikation zu implementieren
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe DI mit Ruby versucht
Ich möchte eine mit Rails 6 erstellte App an GitHub senden