Giter Site home page Giter Site logo

Comments (5)

pokonski avatar pokonski commented on May 23, 2024

Hi @carlthuringer! That is indeed an extreme case. Do you have 4k unique job classes or are you generating those dynamically? This sounds more like you need simpler batching and/or splitting into smaller workflows.

from gush.

carlthuringer avatar carlthuringer commented on May 23, 2024

The workflow I'm attempting to orchestrate is a "Seeding" workflow. Just imagine a typical rails monolith riddled with vast and complex belongs_to and has_many relationships, and you'll have some idea what I'm trying to produce.

Generating all the data in one shot is unreliable and time-consuming. There's no way I can do it in a transaction, so logically the next step is to break it down into idempotent stages. Gush seemed like a great solution to elegantly declare what data needed to be created, and which data depended upon which, all without needing to juggle specific references or use confusing flow control.

I've got about 18 job classes and I'm using a lot of looping to run MyJobs with various after: [batch, of, jobs] type configuration. In the leaves I end up with M * N * O combinations that I want to generate data for and orchestrate with Gush.

The biggest advantage to using Gush is that I can specify complex convergent workflows, which is impossible with Sidekiq Batches.
Without the convergence, I have to have several breakpoints where data is prepared, the system arrives in a known state, and then the next stage is started. The programming becomes more procedural and literal, instead of the elegant and implicit way I can set up all the initial data with Gush, and then have various downstream jobs dependent on initial data waiting for those jobs to complete.

from gush.

pokonski avatar pokonski commented on May 23, 2024

Thanks for the detailed explanation. There are ways to improve storing the state I will explore. My colleague here at Chaps suggested some good ideas which we will try to implement as the current one is rather naive (we never expected such large workflows :) )

Stay tuned!

from gush.

pokonski avatar pokonski commented on May 23, 2024

@carlthuringer year later but I just pushed a change to activejob (will be in 1.0) branch which greatly reduces time needed to spawn hundreds or thousands of jobs. Overall should speed up execution by a lot.

from gush.

pokonski avatar pokonski commented on May 23, 2024

Closing this as 1.0.0 was released with major improvements to performance. If issue still occurs please open a new ticket.

from gush.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.