Differences from DynamoDB

May 19, 2026 · View on GitHub

This document lists all known behavioral differences between ExtendDB and real Amazon DynamoDB. Use it to understand what works identically and what requires adaptation when switching between ExtendDB and the real service.

Storage and Infrastructure

AreaDynamoDBExtendDB
Storage backendProprietary distributed storagePostgreSQL
Global TablesCreateGlobalTable, replicationNot implemented (returns UnknownOperationException)
DAX (Accelerator)In-memory caching layerNot applicable
PartiQLExecuteStatement, BatchExecuteStatementNot implemented (returns UnknownOperationException)

Authentication and Authorization (AWS IAM/STS auth surface used by DynamoDB)

AreaDynamoDBExtendDB
Credential managementAWS IAM console/APIextenddb manage CLI and /management REST API
Access key prefixesAKIA (long-term), ASIA (session) AWS-wide IAM/STS conventionsAKIAEXTENDDB (long-term), ASIAEXTENDDB (session)
Federated rolesAssumeRoleWithSAML, AssumeRoleWithWebIdentityNot implemented
Role chainingSupportedNot implemented
SourceIdentity, TransitiveTagKeysSupportedNot implemented
Resource policiesSupportedNot implemented (deferred)

Import and Export

AreaDynamoDBExtendDB
Import sourceS3BucketSource (S3 bucket)FileSource (local filesystem path)
Export destinationS3 bucketLocal filesystem path
Import formatsCSV, DYNAMODB_JSON, IONCSV, DYNAMODB_JSON, ION
Export formatsDYNAMODB_JSON, IONDYNAMODB_JSON, ION
Import executionAsynchronous (background job)Synchronous (completes before returning)
Export executionPoint-in-time snapshotCurrent snapshot, synchronous

Control Plane

AreaDynamoDBExtendDB
Table creation delayReturns CREATING immediately; transitions to ACTIVE typically within seconds. Same behavior for on-demand and provisionedConfigurable via control_plane_delay_seconds runtime setting (default: 5s)
DeletionProtectionEnabledEnforcedEnforced (accepted and stored, DeleteTable rejects when enabled)

Time to Live (TTL)

AreaDynamoDBExtendDB
TTL attribute nameAny UTF-8 string (1–255 bytes)Restricted to [a-zA-Z0-9._-]+ (1–255 bytes). Names with spaces, quotes, or other special characters are rejected. This eliminates SQL injection risk in the TTL expression index.
TTL deletionBackground process, items deleted within 48 hours of expiryBackground worker with indexed sweep, configurable target via ttl_deletion_target_seconds (default: 300s)
TTL stream recordsREMOVE events with userIdentity: {type: "Service", principalId: "dynamodb.amazonaws.com"}Supported — TTL deletions generate REMOVE stream records with the same userIdentity
TTL modification cooldownEnforces a cooldown period between enable/disable changes ("Time to live has been modified multiple times within a fixed interval")No cooldown — TTL can be enabled and disabled immediately. Intentional divergence for faster local development.

Tagging

AreaDynamoDBExtendDB
TagResource / UntagResourceValidates resource ARN exists, returns ResourceNotFoundException for missing tablesMatches DynamoDB — validates resource ARN and returns ResourceNotFoundException for missing tables.

Secondary Indexes

AreaDynamoDBExtendDB
GSI update propagationEventually consistent (milliseconds to seconds)Per-GSI propagation delay. System default: gsi_propagation_delay_ms setting (default 10ms). Each GSI can override with its own propagation_delay_ms (stored in catalog). A value of 0 means synchronous (future sync GSI feature).
Multi-part base table keysNot supportedPreview extension (opt-in via enable_multipart_keys setting). Standard single/composite keys work identically.

Capacity and Throttling

AreaDynamoDBExtendDB
Provisioned throughputToken bucket per table/partitionToken bucket per table/partition, matching DynamoDB's burst and refill behavior
On-demand capacityAutomatic scalingFixed initial burst capacity (4000 WCU / 12000 RCU), no auto-scaling
ThrottlingAlways on; throttles requests that exceed provisioned/burst capacity. No setting to disableConfigurable via throttling_enabled runtime setting (default: true)

Operations Not Implemented

The following operations return UnknownOperationException:

  • CreateGlobalTable, DescribeGlobalTable, ListGlobalTables, UpdateGlobalTable
  • DescribeGlobalTableSettings, UpdateGlobalTableSettings
  • ExecuteStatement, BatchExecuteStatement, ExecuteTransaction
  • DescribeContributorInsights, UpdateContributorInsights
  • DescribeKinesisStreamingDestination, EnableKinesisStreamingDestination, DisableKinesisStreamingDestination
  • DescribeTableReplicaAutoScaling, UpdateTableReplicaAutoScaling

Runtime Configuration

ExtendDB exposes runtime settings that have no DynamoDB equivalent:

SettingDefaultDescription
control_plane_delay_seconds5Simulated delay for table state transitions (CREATING → ACTIVE, DELETING → removed)
gsi_propagation_delay_ms10System-wide default GSI propagation delay (milliseconds). Per-GSI overrides stored in catalog. 0 = synchronous.
throttling_enabledtrueEnable provisioned capacity throttling (token bucket per table/partition)
enable_multipart_keysfalseEnable multi-part base table key extension
log_levelinfoRuntime log level (trace, debug, info, warn, error)
sqlx_log_levelwarnSeparate log level for sqlx query traces
allow_credential_importtrueAllow importing credentials via the management API

Web Console

ExtendDB includes a built-in web management console at /console for credential and account management. DynamoDB uses the AWS Management Console.


License

Copyright 2026 ExtendDB contributors. Licensed under the Apache License, Version 2.0. See LICENSE for the full text.

This software is provided "as is" without warranty of any kind. ExtendDB is not affiliated with, endorsed by, or sponsored by Amazon Web Services. "DynamoDB" is a trademark of Amazon.com, Inc.