Skip to content

Limits and Constraints

This page lists every hard limit and configurable constraint in ConvergeDB. Other pages link here rather than repeating these values.

These limits are fixed by the wire protocol and storage format. They cannot be changed through configuration.

ResourceLimitReason
Sources (SourceId)64 (0 to 63)Source set is stored as a u64 bitmask.
Fields per kind64 top-level fieldsPATCH presence mask and ChangedFields bitmask are u64.
Array elements per field1,024Validation cap enforced at schema registration.
String / VarString / Bytes / VarBytes max length65,535 bytesu16 length prefix (String/Bytes) or u16 count in directory entry (VarString/VarBytes).
Entity ID sizeExactly 32 bytesFixed-width row layout for cache-aligned storage.
Registered kinds65,535KindId is a u16.
Metadata per write65,535 bytesu16 length prefix on the wire.
Kind name prefixconvergedb_ is reservedSystem kinds managed by the server use this prefix. User-defined kinds with this prefix are rejected at registration.

These values have defaults that work well for most workloads but can be tuned.

ParameterDefaultDescription
Coalescing window20 msDuration over which writes to the same entity are merged into a single flush. Lower values reduce notification latency. Higher values increase the coalescing ratio for hot entities.
Tombstone retention5 minutesHow long tombstoned entities remain visible to queries and subscriber notifications before being removed by compaction. Subscribers offline longer than this period must re-bootstrap.
Liveness deadline30 secondsIf a source’s connection is silent for this duration, the server considers the source dead. Entities with only that source’s bit are tombstoned.
Heartbeat interval15 secondsHow often the client sends keep-alive frames. Must be less than the liveness deadline.
Reconnect max delay10 secondsMaximum exponential backoff between reconnection attempts.
Subscriber buffer size4,096 notificationsPer-subscription bounded buffer. If the subscriber falls behind and the buffer fills, the subscriber is disconnected. On reconnect, the subscriber must re-subscribe (and optionally re-bootstrap).

These are not configured directly but follow from the limits above.

ConstraintValueNotes
Maximum entity row sizeHeader (50 bytes) + field data + padding to 64-byte boundaryDepends on the schema. The header contains the entity ID (32 bytes), source set (8 bytes), version (8 bytes), schema version (1 byte), and flags (1 byte).
Maximum concurrent streams32,768Wire protocol uses a 16-bit stream ID for request-response multiplexing.
Struct nesting depth1 levelSub-structs cannot contain other sub-structs.