Concurrency

In many scenarios, it will be important that the application design can scale up to handle large concurrent volumes. In these scenarios, multiple brokers and/or execution groups or threads will be used and the database can become a source of resource contention if the application design and implementation are not optimal.

The following areas should be considered for optimum concurrency:
  • Object Selectors:
    • Object selectors should be quick running queries that make optimal use of indexes. Typically they should always query by object ID and STATUS, some may require a query on STATUS only.
  • Object Filters:
    • Base object filters on indexed columns.
    • Avoid object filter selections that result in more than one FSM object selector selecting the same object, thus creating a lock conflict.
  • Database Indexes:
    • Review database indexes in light of the queries the application generates. New indexes may need to be added for object filters using columns that do not already have an index.
  • Fragmentation:
    • Use of fragmentation can provide mapping concurrency.
  • Other contention/synchronization points:
    • Batch records on counting transaction events
    • Transmission or fragment records on counting batch events