Limits and Constraints
This page lists every hard limit and configurable constraint in ConvergeDB. Other pages link here rather than repeating these values.
Hard limits
Section titled “Hard limits”These limits are fixed by the wire protocol and storage format. They cannot be changed through configuration.
| Resource | Limit | Reason |
|---|---|---|
| Sources (SourceId) | 64 (0 to 63) | Source set is stored as a u64 bitmask. |
| Fields per kind | 64 top-level fields | PATCH presence mask and ChangedFields bitmask are u64. |
| Array elements per field | 1,024 | Validation cap enforced at schema registration. |
| String / VarString / Bytes / VarBytes max length | 65,535 bytes | u16 length prefix (String/Bytes) or u16 count in directory entry (VarString/VarBytes). |
| Entity ID size | Exactly 32 bytes | Fixed-width row layout for cache-aligned storage. |
| Registered kinds | 65,535 | KindId is a u16. |
| Metadata per write | 65,535 bytes | u16 length prefix on the wire. |
| Kind name prefix | convergedb_ is reserved | System kinds managed by the server use this prefix. User-defined kinds with this prefix are rejected at registration. |
Configurable constraints
Section titled “Configurable constraints”These values have defaults that work well for most workloads but can be tuned.
| Parameter | Default | Description |
|---|---|---|
| Coalescing window | 20 ms | Duration 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 retention | 5 minutes | How 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 deadline | 30 seconds | If 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 interval | 15 seconds | How often the client sends keep-alive frames. Must be less than the liveness deadline. |
| Reconnect max delay | 10 seconds | Maximum exponential backoff between reconnection attempts. |
| Subscriber buffer size | 4,096 notifications | Per-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). |
Derived constraints
Section titled “Derived constraints”These are not configured directly but follow from the limits above.
| Constraint | Value | Notes |
|---|---|---|
| Maximum entity row size | Header (50 bytes) + field data + padding to 64-byte boundary | Depends 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 streams | 32,768 | Wire protocol uses a 16-bit stream ID for request-response multiplexing. |
| Struct nesting depth | 1 level | Sub-structs cannot contain other sub-structs. |