Bulk Task Assignment

General Guidance

This page explains how to create a process to assign tasks in bulk.  Many of the recommendations follow general Appian best practice on using memory-efficient process models.  

Do

  • Take advantage of Appian's ability to balance engine load by utilizing Start Process smart services
  • Run during off-peak hours when creating large numbers of tasks
  • Create batches when dealing with large numbers of tasks
  • Update archive settings to delete processes that are not needed in the system
  • Run Health Check to monitor any side effects of bulk processes (uneven engine load, performance issues, disk usage, memory usage, etc)

Don’t

  • Use synchronous subprocesses for task assignment when the parent process flow does not depend on the results of the completed task
  • Create process loops for each task

Preferred Design Patterns

Run Process Asynchronously Using Multiple Exec Engines

This is the recommended approach since this method benefits from parallel execution and engine load distribution.  The key is to optimize the number of running processes for maximum throughput, without affecting end users or experiencing timeouts.  For more information, see ways to start a process.

When creating new processes for tasks, use the Start Process smart service rather than using direct subprocesses.

If the tasks are to be kicked off from a User Input Task or web API, use the a!startProcess() component. When starting multiple tasks this way, the process called should be a wrapper process which handles the individual task kickoff.

 

If there are more than 1000 tasks to initialize, you will need to batch the tasks into smaller groups. Each group can then be treated the same as already discussed. The below example uses multiple executions of a subprocess to batch the tasks, but this can also be done via a Start Process smart service. 

Performance Considerations

By using the above methods, Appian engines should be able to efficiently balance the load caused by the tasks. However, if you are still encountering problems with performance, consider the following methods:

  • Processes can be configured to wait until off-peak hours before assigning tasks
  • If the load is significant, consider storing tasks in a database queue and utilizing techniques for processing large data sets