• Home
  • Tutorials
  • API Documentation
Search Results for

    Show / Hide Table of Contents
    • Oracle.NoSQL.SDK
      • AddReplicaOptions
        • AddReplicaOptions
        • Compartment
        • MatchETag
        • PollDelay
        • ReadUnits
        • Timeout
        • WriteUnits
      • AddReplicaRequest
        • Options
        • RegionId
      • AdminOptions
        • AdminOptions
        • PollDelay
        • Timeout
      • AdminRequest
        • Options
        • Statement
      • AdminResult
        • Output
        • State
        • Statement
        • WaitForCompletionAsync
      • AdminState
        • Complete
        • InProgress
        • value__
      • AdminStatusRequest
        • AdminResult
        • Options
      • ArrayValue
        • Add
        • ArrayValue
        • Clear
        • Contains
        • CopyTo
        • Count
        • DbType
        • IndexOf
        • Insert
        • Item
        • Remove
        • RemoveAt
        • SerializeAsJson
      • AuthorizationException
        • AuthorizationException
        • IsRetryable
      • AuthorizationStringProvider
        • ApplyAuthorizationAsync
        • AuthorizationStringProvider
        • ConfigureAuthorization
        • GetAuthorizationStringAsync
      • BadProtocolException
        • BadProtocolException
      • BatchOperationNumberLimitException
        • BatchOperationNumberLimitException
      • BinaryValue
        • AsByteArray
        • BinaryValue
        • DbType
        • SerializeAsJson
      • BooleanValue
        • AsBoolean
        • DbType
        • False
        • SerializeAsJson
        • True
      • CapacityMode
        • OnDemand
        • Provisioned
        • value__
      • ConnectionOptions
        • ConnectionOptions
        • DisableHostnameVerification
        • TrustedRootCertificateFile
        • TrustedRootCertificates
      • Consistency
        • Absolute
        • Eventual
        • value__
      • ConsumedCapacity
        • RateLimitDelay
        • ReadKB
        • ReadRateLimitDelay
        • ReadUnits
        • ToString
        • WriteKB
        • WriteRateLimitDelay
        • WriteUnits
      • ControlOperationThrottlingException
        • ControlOperationThrottlingException
      • DbType
        • Array
        • Binary
        • Boolean
        • Double
        • Empty
        • Integer
        • JsonNull
        • Long
        • Map
        • Null
        • Number
        • String
        • Timestamp
        • value__
      • DeleteIfVersionOperation
        • MatchVersion
      • DeleteIfVersionRequest<TRow>
        • MatchVersion
      • DeleteManyOptions
        • AbortIfUnsuccessful
        • DeleteManyOptions
      • DeleteOperation
        • AbortIfUnsuccessful
        • Options
        • PrimaryKey
        • TableName
      • DeleteOptions
        • Compartment
        • DeleteOptions
        • Durability
        • MatchVersion
        • Namespace
        • ReturnExisting
        • Timeout
      • DeleteRangeContinuationKey
      • DeleteRangeOptions
        • Compartment
        • ContinuationKey
        • DeleteRangeOptions
        • Durability
        • FieldRange
        • MaxWriteKB
        • Namespace
        • Timeout
      • DeleteRangeRequest
        • FieldRange
        • Options
        • PartialPrimaryKey
      • DeleteRangeResult
        • ConsumedCapacity
        • ContinuationKey
        • DeletedCount
      • DeleteRequest<TRow>
        • Options
        • PrimaryKey
      • DeleteResult<TRow>
        • ConsumedCapacity
        • ExistingModificationTime
        • ExistingRow
        • ExistingVersion
        • Success
      • DeploymentLimitException
        • DeploymentLimitException
      • DoubleValue
        • AsDouble
        • DbType
        • DoubleValue
        • SerializeAsJson
        • ToDecimal
        • ToInt32
        • ToInt64
      • DropReplicaOptions
        • Compartment
        • DropReplicaOptions
        • MatchETag
        • PollDelay
        • Timeout
      • DropReplicaRequest
        • Options
        • RegionId
      • Durability
        • CommitNoSync
        • CommitSync
        • CommitWriteNoSync
        • Durability
        • Equality
        • Equals
        • GetHashCode
        • Inequality
        • MasterSync
        • ReplicaAck
        • ReplicaSync
      • ETagMismatchException
        • ETagMismatchException
      • EvolutionLimitException
        • EvolutionLimitException
      • FieldRange
        • EndsBefore
        • EndsWith
        • EndValue
        • FieldName
        • FieldRange
        • IsEndInclusive
        • IsStartInclusive
        • StartsAfter
        • StartsWith
        • StartValue
      • FieldValue
        • AsArrayValue
        • AsBoolean
        • AsByteArray
        • AsDateTime
        • AsDecimal
        • AsDouble
        • AsInt32
        • AsInt64
        • AsMapValue
        • AsRecordValue
        • AsString
        • CompareTo
        • Count
        • DbType
        • DeserializeFromJson
        • Equality
        • Equals
        • Explicit
        • FieldValue
        • FromJsonString
        • GetHashCode
        • GreaterThan
        • GreaterThanOrEqual
        • Implicit
        • Inequality
        • Item
        • JsonNull
        • LessThan
        • LessThanOrEqual
        • Null
        • SerializeAsJson
        • ToBoolean
        • ToByteArray
        • ToDateTime
        • ToDecimal
        • ToDouble
        • ToInt32
        • ToInt64
        • ToJsonString
        • ToString
      • GetAdminStatusOptions
        • GetAdminStatusOptions
        • Timeout
      • GetIndexesRequest
        • Options
      • GetIndexOptions
        • Compartment
        • GetIndexOptions
        • Namespace
        • Timeout
      • GetIndexRequest
        • IndexName
      • GetOptions
        • Compartment
        • Consistency
        • GetOptions
        • Namespace
        • Timeout
      • GetReplicaStatsOptions
        • Compartment
        • GetReplicaStatsOptions
        • Limit
        • StartTime
        • Timeout
      • GetReplicaStatsRequest
        • Options
        • RegionId
      • GetRequest<TRow>
        • Options
        • PrimaryKey
      • GetResult<TRow>
        • ConsumedCapacity
        • ExpirationTime
        • ModificationTime
        • Row
        • Version
      • GetTableOptions
        • Compartment
        • GetTableOptions
        • Namespace
        • Timeout
      • GetTableRequest
        • Options
      • GetTableUsageOptions
        • Compartment
        • EndTime
        • FromIndex
        • GetTableUsageOptions
        • Limit
        • StartTime
        • Timeout
      • GetTableUsageRequest
        • Options
      • IAMAuthorizationProvider
        • ApplyAuthorizationAsync
        • CacheDuration
        • ConfigFile
        • ConfigureAuthorization
        • CreateWithInstancePrincipal
        • CreateWithInstancePrincipalForDelegation
        • CreateWithInstancePrincipalForDelegationFromFile
        • CreateWithOKEWorkloadIdentity
        • CreateWithOKEWorkloadIdentityAndTokenFile
        • CreateWithResourcePrincipal
        • CreateWithSessionToken
        • Credentials
        • CredentialsProvider
        • DelegationTokenFile
        • DelegationTokenProvider
        • Dispose
        • FederationEndpoint
        • IAMAuthorizationProvider
        • ProfileName
        • RefreshAhead
        • RequestTimeout
        • ServiceAccountTokenFile
        • UseInstancePrincipal
        • UseOKEWorkloadIdentity
        • UseResourcePrincipal
        • UseSessionToken
      • IAMCredentials
        • Fingerprint
        • IAMCredentials
        • Passphrase
        • PrivateKey
        • PrivateKeyFile
        • PrivateKeyPEM
        • TenantId
        • UserId
      • IAuthorizationProvider
        • ApplyAuthorizationAsync
        • ConfigureAuthorization
      • IndexExistsException
        • IndexExistsException
      • IndexLimitException
        • IndexLimitException
      • IndexNotFoundException
        • IndexNotFoundException
      • IndexResult
        • Fields
        • FieldTypes
        • IndexName
      • InstanceMetadataClient
        • Dispose
        • GetRegionAsync
        • InstanceMetadataClient
      • IntegerValue
        • AsInt32
        • DbType
        • IntegerValue
        • SerializeAsJson
        • ToDateTime
        • ToDecimal
        • ToDouble
        • ToInt64
      • InvalidAuthorizationException
        • InvalidAuthorizationException
      • IRateLimiter
        • ConsumeUnitsAsync
        • HandleThrottlingException
        • SetLimit
      • IRetryHandler
        • GetRetryDelay
        • ShouldRetry
      • IWriteOperation
        • AbortIfUnsuccessful
        • TableName
      • JsonInputOptions
        • AllowComments
        • AllowTrailingCommas
        • JsonInputOptions
        • PreferDecimal
      • JsonNullValue
        • DbType
        • SerializeAsJson
      • JsonOutputOptions
        • DateTimeAsMillis
        • DateTimeFormatString
        • DefaultDateTimeFormatString
        • Indented
        • JsonOutputOptions
      • JsonParseException
        • JsonParseException
      • KeySizeLimitException
        • KeySizeLimitException
      • KVStoreAuthorizationProvider
        • AutoRenew
        • ConfigureAuthorization
        • Credentials
        • CredentialsFile
        • CredentialsProvider
        • Dispose
        • GetAuthorizationStringAsync
        • KVStoreAuthorizationProvider
        • RequestTimeout
      • KVStoreCredentials
        • KVStoreCredentials
        • Password
        • UserName
      • ListTablesOptions
        • Compartment
        • FromIndex
        • Limit
        • ListTablesOptions
        • Namespace
        • Timeout
      • ListTablesRequest
        • Options
      • ListTablesResult
        • NextIndex
        • TableNames
      • LongValue
        • AsInt64
        • DbType
        • LongValue
        • SerializeAsJson
        • ToDateTime
        • ToDecimal
        • ToDouble
        • ToInt32
      • MapValue
        • Add
        • Clear
        • ContainsKey
        • Count
        • DbType
        • Item
        • Keys
        • MapValue
        • Remove
        • SerializeAsJson
        • TryGetValue
        • Values
      • NoSQLClient
        • AddReplicaAsync
        • AddReplicaWithCompletionAsync
        • DeleteAsync
        • DeleteIfVersionAsync
        • DeleteManyAsync
        • DeleteRangeAsync
        • Dispose
        • DropReplicaAsync
        • DropReplicaWithCompletionAsync
        • ExecuteAdminAsync
        • ExecuteAdminWithCompletionAsync
        • ExecuteTableDDLAsync
        • ExecuteTableDDLWithCompletionAsync
        • GetAdminStatusAsync
        • GetAsync
        • GetDeleteRangeAsyncEnumerable
        • GetIndexAsync
        • GetIndexesAsync
        • GetListTablesAsyncEnumerable
        • GetQueryAsyncEnumerable
        • GetReplicaStatsAsync
        • GetTableAsync
        • GetTableUsageAsync
        • GetTableUsageAsyncEnumerable
        • ListNamespacesAsync
        • ListRolesAsync
        • ListTablesAsync
        • ListUsersAsync
        • NoSQLClient
        • PrepareAsync
        • PutAsync
        • PutIfAbsentAsync
        • PutIfPresentAsync
        • PutIfVersionAsync
        • PutManyAsync
        • QueryAsync
        • ServiceType
        • SetTableLimitsAsync
        • SetTableLimitsWithCompletionAsync
        • SetTableTagsAsync
        • SetTableTagsWithCompletionAsync
        • WaitForLocalReplicaInitAsync
        • WaitForTableStateAsync
        • WriteManyAsync
      • NoSQLConfig
        • AdminPollDelay
        • AdminPollTimeout
        • AdminTimeout
        • AuthorizationProvider
        • Compartment
        • ConnectionOptions
        • Consistency
        • Durability
        • Endpoint
        • FromJsonFile
        • FromJsonString
        • MaxMemoryMB
        • Namespace
        • NoRetries
        • NoSQLConfig
        • RateLimiterCreator
        • RateLimiterPercent
        • RateLimitingEnabled
        • Region
        • RetryHandler
        • ServiceType
        • TableDDLTimeout
        • TablePollDelay
        • TablePollTimeout
        • Timeout
      • NoSQLException
        • IsRetryable
        • Message
        • NoSQLException
        • Request
      • NoSQLRateLimiter
        • ConsumeUnitsAsync
        • HandleThrottlingException
        • NoSQLRateLimiter
        • SetLimit
      • NoSQLRetryHandler
        • BaseDelay
        • ControlOperationBaseDelay
        • GetRetryDelay
        • MaxRetryAttempts
        • NoSQLRetryHandler
        • ShouldRetry
      • NullValue
        • DbType
        • SerializeAsJson
      • NumberValue
        • AsDecimal
        • DbType
        • NumberValue
        • SerializeAsJson
        • ToDouble
        • ToInt32
        • ToInt64
      • PreparedStatement
        • ClearVariables
        • ConsumedCapacity
        • CopyStatement
        • QueryPlan
        • ResultSchema
        • SetVariable
        • SQLText
        • Variables
      • PrepareOptions
        • Compartment
        • GetQueryPlan
        • GetResultSchema
        • Namespace
        • PrepareOptions
        • Timeout
      • PrepareRequest
        • Options
        • Statement
      • PutIfAbsentOperation
      • PutIfAbsentRequest<TRow>
      • PutIfPresentOperation
      • PutIfPresentRequest<TRow>
      • PutIfVersionOperation
        • MatchVersion
      • PutIfVersionRequest<TRow>
        • MatchVersion
      • PutManyOptions
        • AbortIfUnsuccessful
        • PutManyOptions
      • PutOperation
        • AbortIfUnsuccessful
        • Options
        • Row
        • TableName
      • PutOptions
        • Compartment
        • Durability
        • ExactMatch
        • IdentityCacheSize
        • IfAbsent
        • IfPresent
        • MatchVersion
        • Namespace
        • PutOptions
        • ReturnExisting
        • Timeout
        • TTL
        • UpdateTTLToDefault
      • PutRequest<TRow>
        • Options
        • Row
      • PutResult<TRow>
        • ConsumedCapacity
        • ExistingModificationTime
        • ExistingRow
        • ExistingVersion
        • GeneratedValue
        • Success
        • Version
      • QueryContinuationKey
      • QueryOptions
        • Compartment
        • Consistency
        • ContinuationKey
        • Durability
        • Limit
        • MaxMemoryMB
        • MaxReadKB
        • MaxWriteKB
        • Namespace
        • QueryOptions
        • Timeout
      • QueryRequest
      • QueryRequest<TRow>
        • IsPrepared
        • Options
        • PreparedStatement
        • Statement
      • QueryRequestBase
      • QueryResult<TRow>
        • ConsumedCapacity
        • ContinuationKey
        • Rows
      • ReadRequest
      • ReadThrottlingException
        • ReadThrottlingException
      • RecordValue
        • Equals
        • GetKeyAtIndex
        • GetValueAtIndex
        • Insert
        • Item
        • RecordValue
        • RemoveAt
      • Region
        • AF_JOHANNESBURG_1
        • AP_CHIYODA_1
        • AP_CHUNCHEON_1
        • AP_DCC_CANBERRA_1
        • AP_DCC_GAZIPUR_1
        • AP_DCC_OSAKA_1
        • AP_DCC_TOKYO_1
        • AP_HOBSONVILLE_1
        • AP_HYDERABAD_1
        • AP_IBARAKI_1
        • AP_MELBOURNE_1
        • AP_MUMBAI_1
        • AP_OSAKA_1
        • AP_SEOUL_1
        • AP_SINGAPORE_1
        • AP_SINGAPORE_2
        • AP_SYDNEY_1
        • AP_TOKYO_1
        • CA_MONTREAL_1
        • CA_TORONTO_1
        • Endpoint
        • EU_AMSTERDAM_1
        • EU_DCC_DUBLIN_1
        • EU_DCC_DUBLIN_2
        • EU_DCC_MILAN_1
        • EU_DCC_MILAN_2
        • EU_DCC_RATING_1
        • EU_DCC_RATING_2
        • EU_DCC_ROME_1
        • EU_DCC_ZURICH_1
        • EU_FRANKFURT_1
        • EU_FRANKFURT_2
        • EU_JOVANOVAC_1
        • EU_MADRID_1
        • EU_MADRID_2
        • EU_MARSEILLE_1
        • EU_MILAN_1
        • EU_PARIS_1
        • EU_STOCKHOLM_1
        • EU_ZURICH_1
        • FromRegionCodeOrId
        • FromRegionId
        • IL_JERUSALEM_1
        • ME_ABUDHABI_1
        • ME_ABUDHABI_3
        • ME_DCC_DOHA_1
        • ME_DCC_MUSCAT_1
        • ME_DUBAI_1
        • ME_JEDDAH_1
        • MX_MONTERREY_1
        • MX_QUERETARO_1
        • RegionCode
        • RegionId
        • SA_BOGOTA_1
        • SA_SANTIAGO_1
        • SA_SAOPAULO_1
        • SA_VALPARAISO_1
        • SA_VINHEDO_1
        • SecondLevelDomain
        • ToString
        • UK_CARDIFF_1
        • UK_GOV_CARDIFF_1
        • UK_GOV_LONDON_1
        • UK_LONDON_1
        • US_ASHBURN_1
        • US_CHICAGO_1
        • US_DCC_PHOENIX_1
        • US_DCC_PHOENIX_2
        • US_DCC_PHOENIX_4
        • US_DCC_SWJORDAN_1
        • US_DCC_SWJORDAN_2
        • US_GOV_ASHBURN_1
        • US_GOV_CHICAGO_1
        • US_GOV_PHOENIX_1
        • US_LANGLEY_1
        • US_LUKE_1
        • US_PHOENIX_1
        • US_SALTLAKE_2
        • US_SANJOSE_1
        • US_TACOMA_1
        • US_WESTJORDAN_1
        • Values
      • ReplicaAckPolicy
        • All
        • None
        • SimpleMajority
        • value__
      • ReplicaInfo
        • CapacityMode
        • Region
        • ReplicaName
        • ReplicaOCID
        • TableState
        • WriteUnits
      • ReplicaStatsRecord
        • CollectionTime
        • ReplicaLag
        • ToString
        • UnknownLag
      • ReplicaStatsResult
        • NextStartTime
        • StatsRecords
        • TableName
      • Request
        • Exceptions
        • LastException
        • PriorException
        • RetryCount
      • RequestSizeLimitException
        • RequestSizeLimitException
      • RequestWithTable
        • TableName
      • ResourceExistsException
        • ResourceExistsException
      • ResourceNotFoundException
        • ResourceNotFoundException
      • RetryableException
        • IsRetryable
        • RetryableException
      • RowSizeLimitException
        • RowSizeLimitException
      • RowVersion
        • Bytes
        • Encoded
        • RowVersion
        • ToString
      • SecurityInfoNotReadyException
        • SecurityInfoNotReadyException
      • ServerException
        • ServerException
      • ServiceResponseException
        • IsRetryable
        • ResponseMessage
        • ServiceResponseException
        • StatusCode
        • StatusMessage
      • ServiceType
        • Cloud
        • CloudSim
        • KVStore
        • Unspecified
        • value__
      • ServiceUnavailableException
        • ServiceUnavailableException
      • StringValue
        • AsString
        • DbType
        • SerializeAsJson
        • StringValue
        • ToBoolean
        • ToByteArray
        • ToDateTime
        • ToDecimal
        • ToDouble
        • ToInt32
        • ToInt64
      • SyncPolicy
        • NoSync
        • Sync
        • value__
        • WriteNoSync
      • TableBusyException
        • TableBusyException
      • TableCompletionOptions
        • PollDelay
        • TableCompletionOptions
      • TableDDLOptions
        • Compartment
        • DefinedTags
        • FreeFormTags
        • MatchETag
        • Namespace
        • PollDelay
        • TableDDLOptions
        • TableLimits
        • Timeout
      • TableDDLRequest
        • Options
        • Statement
      • TableExistsException
        • TableExistsException
      • TableLimitException
        • TableLimitException
      • TableLimits
        • CapacityMode
        • ReadUnits
        • StorageGB
        • TableLimits
        • WriteUnits
      • TableLimitsRequest
        • TableLimits
      • TableNotFoundException
        • TableNotFoundException
      • TableNotReadyException
        • TableNotReadyException
      • TableOperationRequest
      • TableResult
        • CompartmentId
        • DefinedTags
        • ETag
        • FreeFormTags
        • IsLocalReplicaInitialized
        • IsReplicated
        • IsSchemaFrozen
        • Namespace
        • Replicas
        • TableDDL
        • TableLimits
        • TableName
        • TableOCID
        • TableSchema
        • TableState
        • WaitForCompletionAsync
      • TableSizeLimitException
        • TableSizeLimitException
      • TableState
        • Active
        • Creating
        • Dropped
        • Dropping
        • Updating
        • value__
      • TableTagsRequest
        • DefinedTags
        • FreeFormTags
      • TableUsageRecord
        • Duration
        • MaxShardUsagePercent
        • ReadThrottleCount
        • ReadUnits
        • StartTime
        • StorageGB
        • StorageThrottleCount
        • TableUsageRecord
        • ToString
        • WriteThrottleCount
        • WriteUnits
      • TableUsageResult
        • NextIndex
        • TableName
        • UsageRecords
      • TimestampValue
        • AsDateTime
        • DbType
        • SerializeAsJson
        • TimestampValue
        • ToInt64
      • TimeToLive
        • DoNotExpire
        • FromExpirationTime
        • OfDays
        • OfHours
        • TimeUnit
        • ToExpirationTime
        • ToString
        • Value
      • TTLTimeUnit
        • Days
        • Hours
        • value__
      • UnauthorizedException
        • UnauthorizedException
      • UnsupportedProtocolException
        • UnsupportedProtocolException
      • UnsupportedQueryVersionException
        • UnsupportedQueryVersionException
      • UserInfo
        • Id
        • Name
      • WriteManyOptions
        • AbortIfUnsuccessful
        • Compartment
        • Durability
        • Namespace
        • Timeout
        • WriteManyOptions
      • WriteManyRequest
      • WriteManyRequest<TRow>
        • DeleteManyOptions
        • Operations
        • PutManyOptions
        • TableName
        • WriteManyOptions
      • WriteManyResult<TRow>
        • ConsumedCapacity
        • FailedOperationIndex
        • FailedOperationResult
        • Results
        • Success
      • WriteOperationCollection
        • AddDelete
        • AddDeleteIfVersion
        • AddPut
        • AddPutIfAbsent
        • AddPutIfPresent
        • AddPutIfVersion
        • Clear
        • Count
        • WriteOperationCollection
      • WriteOperationResult<TRow>
        • ExistingModificationTime
        • ExistingRow
        • ExistingVersion
        • GeneratedValue
        • Success
        • Version
      • WriteRequest
      • WriteThrottlingException
        • WriteThrottlingException

    Interface IRateLimiter

    Cloud Service or Cloud Simulator only. An interface to handle rate limiting in the SDK.
    Namespace: Oracle.NoSQL.SDK
    Assembly: Oracle.NoSQL.SDK.dll
    Syntax
    public interface IRateLimiter
    Remarks

    Rate limiting is used to provide efficient access to Oracle NoSQL Database Cloud Service, maximize throughput and protect from resource starvation. The SDK provides built-in rate limiting functionality for data operations on tables such as GetAsync(String, MapValue, GetOptions, CancellationToken), PutAsync(String, MapValue, PutOptions, CancellationToken), DeleteAsync(String, MapValue, DeleteOptions, CancellationToken), DeleteRangeAsync, WriteManyAsync, PrepareAsync(String, PrepareOptions, CancellationToken), QueryAsync and their variants. Rate limiting in the driver allows spreading the operations over time thus maximizing throughput by avoiding costly throttling exceptions (see ReadThrottlingException and WriteThrottlingException) and the associated retry handling.

    Each operation listed above does reads and/or writes on a table and thus consumes certain number of read and write units (see ConsumedCapacity). Each table in NoSQL Database Cloud Service defines limits on the maximum number of read and write units that can be consumed by all clients accessing the table, per 1 second time. For provisioned tables (see Provisioned) these limits are defined in TableLimits, for on-demand tables (see OnDemand), higher predefined limits are used. Thus, the total rate of operations on a given table is limited. If a client tries to perform the operations at faster rate, the service will respond with a read or write throttling exception, in which case the client can retry the operation after certain time (this behavior may be defined by NoSQLRetryHandler). Handling throttling exceptions and their retries is costly both for the service and the client application since the application has to wait before an operation can be retried (retrying immediately or not waiting enough will only result in another throttling exception and more load on the service). A much better strategy for a client is to spread out the operations over time to an extent that the table limits for a given table are not exceeded and thus avoiding throttling errors and their retries. Rate limiting built in to the SDK provides this functionality.

    Enable rate limiting by setting the property RateLimitingEnabled of the initial configuration to true.

    An instance of IRateLimiter is used to enforce one table limit. Thus the driver will instantiate two instances of IRateLimiter for each table in use, one for read limit and another for write limit. You have a choice of using a default implementation of rate limiter provided by the SDK or providing a custom implementation of IRateLimiter interface. See NoSQLRateLimiter for details on default rate limiter used by the SDK. To use custom rate limiter implementation, set property RateLimiterCreator of the initial configuration, which is factory function to create your custom instances of IRateLimiter.

    In order to create pair of rate limiters for a table, the driver will need to know its table limits. The table limits are already known if one of table APIs have been called, such as ExecuteTableDDLAsync, SetTableLimitsAsync(String, TableLimits, TableDDLOptions, CancellationToken), GetTableAsync, WaitForCompletionAsync(Nullable<TimeSpan>, Nullable<TimeSpan>, CancellationToken) or any of their variants. Otherwise, the driver will call GetTableAsync(String, GetTableOptions, CancellationToken) in the background to obtain the table limits as soon as any data operation is issued for that table. This means that enabling rate limiting for a table may be delayed until its table limits are obtained successfully in the background.

    The main operation of rate limiting in the driver is to call ConsumeUnitsAsync(Int32, TimeSpan, Boolean, CancellationToken) to consume a number of (read or write) units for a given operation. Depending on rate limiting implementation, its current state and the number of units to consume, this call may asynchronously block (sleep) for certain amount of time (and return Task returning this amount of time) before letting the operation proceed. This API also needs to correctly operate in the presence of timeout set by the caller. Note that it may be possible to consume certain amount of units without blocking (e.g. if there has been no or very little recent activity). In this state the rate limiter is said to be under its limit. Conversely, even consuming 0 units may block as a result of consuming units for recent past operations. In this state the rate limiter is said to be over its limit.

    Rate limiting works best when we know in advance how many units each operation will consume, which would allow to know precisely how long to wait before issuing each operation. Unfortunately, we don't know how many units an operation requires until we get the result back, with this information returned as part of ConsumedCapacity. It may be difficult or impossible to estimate number of units required before the operation completes. The approach is taken where ConsumeUnitsAsync(Int32, TimeSpan, Boolean, CancellationToken) is called twice, once before the operation passing 0 units to (possibly) wait until the rate limiter is under its limit and then after the operation passing the number of units returned as part of ConsumedCapacity of the result. This will allow to delay subsequent operations and stagger subsequent concurrent operations over time.

    Note that by default the rate limiting only works as expected when used within one NoSQLClient instance. When using multiple NoSQLClient instances against the same service, whether in the same process, different process or even running on different machines, rate limiters in one instance will not be aware of operations performed by other instances and thus will not correctly rate limit the operations. If multiple concurrent NoSQLClient instances are required, you can set RateLimiterPercent property of the initial configuration to allocate only a percentage of each table's limits to each NoSQLClient instance. Although not optimal (not accounting for under-utilization at some instances), this will allow to rate limit operations on multiple concurrent instances.

    Unfortunately, there is no perfect driver-side rate limiting strategy so it is still possible for throttling exceptions to occur. IRateLimiter provides HandleThrottlingException(RetryableException) method that the driver will call when an operation results in throttling error. When creating custom rate limiter, implementing this method will allow you to adjust the rate limiter's state to account for this information.

    Instances of IRateLimiter are used by multiple concurrent threads and thus must be thread-safe.

    Methods

    Name Description
    ConsumeUnitsAsync(Int32, TimeSpan, Boolean, CancellationToken) Consumes the specified number of units and blocks (sleeps) asynchronously if required before an operation can proceed.
    HandleThrottlingException(RetryableException) Defines the behavior of the rate limiter when throttling exception occurs.
    SetLimit(Double) Configures rate limiter by setting its limit in units per second.

    See Also

    NoSQLRateLimiter
    RateLimitingEnabled
    RateLimiterCreator
    In This Article
    Back to top Copyright © 2020, 2024 Oracle and/or its affiliates. All rights reserved.