2016-03-21 1 views
0

Ich bin neu auf sidekiq. meine Website ist in HerokuSidekiq was ist der beste Weg, wie wir eine begrenzte Anzahl von Daten durch einen API-Anruf abrufen können?

und in meinem Code bereitstellen habe ich config/sidekiq.yml

# Place this file at config/sidekiq.yml and Sidekiq will 
# pick it up automatically. 
--- 
:verbose: false 
:concurrency: 20 

# Set timeout to 8 on Heroku, longer if you manage your own systems. 
:timeout: 30 

# Sidekiq will run this file through ERB when reading it so you can 
# even put in dynamic logic, like a host-specific queue. 
# http://www.mikeperham.com/2013/11/13/advanced-sidekiq-host-specific-queues/ 


# you can override concurrency based on environment 
production: 
    :concurrency: 25 
staging: 
    :concurrency: 15 

In meinem workeer erkläre ich die Daten von api

Mein procfile worker: bundle exec sidekiq -C config/sidekiq.yml

holen haben

Mein Arbeiter ist aussehen wie

class SfApifetch 
    include Sidekiq::Worker 
    sidekiq_options retry: false 
    def perform(name, count) 
    # do something 
    Net::Http...rest of the code 
    end 
end 

Kann anyon Ich schlage vor, wie kann ich die Daten in Batch-Limit holen, wie ich 1000 Datensatz erste Seite holen und dann 1000 Datensatz auf diese Weise holen, so dass es die Leistung nicht behindert, aber die Geschwindigkeit zu verbessern.

: Ich bin auf sidekiq und BG wird jeder Vorschlag eine große Hilfe für mich sein

Ich folge haben http://railscasts.com/episodes/366-sidekiq?view=asciicast

+1

Können Sie bitte Ihren Worker posten. – spickermann

+0

ok ich amposing the worker –

+0

@spickermann danke für das zeigen von interesse an meinem post .. bitte vorschlagen, wie kann ich optimieren, um die daten schneller zu holen mit 1000, 1000, 1000 auf diese weise seitenweise –

Antwort

0

Wenn die externe API einige id oder andere Feld liefert Ihnen an die etwas retten könnte Variable und übergeben Sie es an den nächsten Worker-Aufruf, z

class AwesomeWorker 
    LIMIT = 1000 

    include Sidekiq::Worker 

    def perform(name, count, last_id = nil) 
    # fetching data from last_id, limited by LIMIT 
    # fetching from the beginning if last_id is nil 

    # running worker with id of the last record 
    AwesomeWorker.perform_async(name, count, data.last_id) 
    end 
end 
Verwandte Themen