MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

n'exécutez qu'un seul des nombreux travaux en double avec sidekiq ?

Ma suggestion initiale serait un mutex pour ce travail spécifique. Mais comme il est possible que plusieurs serveurs d'applications travaillent sur les tâches sidekiq, je suggérerais quelque chose au niveau de redis.

Par exemple, utilisez redis-semaphore dans votre définition de travailleur sidekiq. Un exemple non testé :

def perform
  s = Redis::Semaphore.new(:map_reduce_semaphore, connection: "localhost")

  # verify that this sidekiq worker is the first to reach this semaphore.
  unless s.locked?

    # auto-unlocks in 90 seconds. set to what is reasonable for your worker.
    s.lock(90)
    your_map_reduce()
    s.unlock
  end
end

def your_map_reduce
  # ...
end