Add support for eventual consistent reads on sagas with optimistic concurrency to reduce read operations #855
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #324
By default, the AWS SDK uses eventual consistency for reads. However, from the beginning, the DynamoDB persister has opted for consistent reads to ensure that saga data is always retrieved in its most up-to-date form. This provides safety and correctness, especially when using optimistic concurrency—but comes at the cost of twice the read capacity units compared to eventual consistency.
This PR introduces a global configuration option that allows customers to opt into eventual consistent reads for saga data when using optimistic concurrency. This gives users more flexibility to trade off consistency for cost savings. In scenarios where eventual consistency is acceptable, this can help reduce DynamoDB read costs, although it may increase the likelihood of immediate or delayed retries if version mismatches occur.
Note: This setting only applies to optimistic concurrency. For pessimistic concurrency, eventual consistent reads are not supported, as the concurrency mechanism relies on obtaining an up-to-date record via a conditional update (lease), which requires consistent reads.
Documentation: https://docs.particular.net/persistence/dynamodb/sagas#saga-concurrency-pessimistic-locking-configuration