全部产品
Search
文档中心

云数据库 MongoDB:DynamoDB协议兼容版实例支持详情

更新时间:Dec 10, 2024

云数据库MongoDB版对DynamoDB协议提供了支持。本文详细介绍云数据库MongoDB对DynamoDB协议的兼容情况。

重要

DynamoDB协议兼容版实例已停止新购,如需使用分片集群实例,建议选择MongoDB协议。更多说明,请参见【通知】分片集群DynamoDB协议兼容版实例停止新购

背景信息

Amazon DynamoDB是一种完全托管的NoSQL数据库服务,提供快速且可预测的性能,能够实现无缝扩展。阿里云数据库MongoDB版现在兼容了DynamoDB协议,您可以在创建云数据库MongoDB实例时选择支持DynamoDB协议即可使用DynamoDB协议。

注意事项

  • 仅云数据库MongoDB版4.0版本的分片集群实例支持DynamoDB协议。

  • 存量实例可通过开启兼容DynamoDB协议来获取支持。

  • 目前DynamoDB兼容功能仅支持在VPC环境下使用,使用时无需鉴权。

DynamoDB接口支持情况

接口名

参数

是否支持

备注

CreateTable

请求参数

必选参数:AttributeDefinitions

必选参数:KeySchema

必选参数:TableName

  • 不能包含以下特殊字符:美元符号 ($)。

  • 不能以system.前缀开头。

  • 长度限制:1~100字节。

可选参数:BillingMode

可选参数:GlobalSecondaryIndexes

可选参数:LocalSecondaryIndexes

可选参数:ProvisionedThroughput

可选参数:SSESpecification

可选参数:StreamSpecification

StreamViewType参数当前仅支持如下值:

  • KEYS_ONLY

    说明

    KEYS_ONLY当前仅支持包含分区键(Partition key),不支持表中存在排序键(Sort key)。

  • NEW_IMAGE

可选参数:Tags

返回参数

TableDescription

UpdateTable

请求参数

可选参数:AttributeDefinitions

可选参数:BillingMode

必选参数:GlobalSecondaryIndexesUpdates

支持Create和Delete,不支持Update。

可选参数:ProvisionedThroughput

可选参数:ReplicaUpdates

可选参数:SSESpecification

可选参数:StreamSpecification

StreamViewType参数当前仅支持如下值:

  • KEYS_ONLY

    说明

    KEYS_ONLY当前仅支持包含分区键(Partition key),不支持表中存在排序键(Sort key)。

  • NEW_IMAGE

必选参数:TableName

返回参数

TableDescription

参见TableDescription

DescribeTable

请求参数

必选参数:TableName

返回参数

Table

参见TableDescription

ListTables

请求参数

可选参数:ExclusiveStartTableName

不支持分页查询,没有返回记录条数的限制。

可选参数:Limit

不支持分页查询,没有返回记录条数的限制。

返回参数

LastEvaluatedTableName

TableNames

DeleteTable

请求参数

必选参数:TableName

返回参数

TableDescription

参见TableDescription

PutItem

请求参数

必选参数:Item

必选参数:TableName

可选参数:ConditionalOperator

可选参数:ConditionExpression

参见表达式支持情况

可选参数:Expected

可选参数:ExpressionAttributeNames

参见表达式支持情况

可选参数:ExpressionAttributeValues

参见表达式支持情况

可选参数:ReturnConsumedCapacity

可选参数:ReturnItemCollectionMetrics

可选参数:ReturnValues

返回参数

Attributes

ConsumedCapacity

ItemCollectionMetrics

UpdateItem

请求参数

必选参数:Key

必选参数:TableName

可选参数:AttributeUpdates

可选参数:ConditionalOperator

可选参数:ConditionExpression

参见表达式支持情况

可选参数:Expected

可选参数:ExpressionAttributeNames

参见表达式支持情况

可选参数:ExpressionAttributeValues

参见表达式支持情况

可选参数:ReturnConsumedCapacity

可选参数:ReturnItemCollectionMetrics

可选参数:ReturnValues

可选参数:UpdateExpression

参见表达式支持情况

返回参数

Attributes

ConsumedCapacity

ItemCollectionMetrics

GetItem

请求参数

必选参数:Key

必选参数:TableName

可选参数:AttributesToGet

可选参数:ConsistentRead

可选参数:ExpressionAttributeNames

参见表达式支持情况

可选参数:ProjectionExpression

参见表达式支持情况

可选参数:ReturnConsumedCapacity

返回参数

ConsumedCapacity

Item

DeleteItem

请求参数

必选参数:Key

必选参数:TableName

可选参数:ConditionalOperator

可选参数:ConditionExpression

参见表达式支持情况

可选参数:Expected

可选参数:ExpressionAttributeNames

参见表达式支持情况

可选参数:ExpressionAttributeValues

参见表达式支持情况

可选参数:ReturnConsumedCapacity

可选参数:ReturnItemCollectionMetrics

可选参数:ReturnValues

返回参数

Attributes

ConsumedCapacity

ItemCollectionMetrics

BatchWriteItem

请求参数

必选参数:RequestItems

可选参数:ReturnConsumedCapacity

可选参数:ReturnItemCollectionMetrics

返回参数

ConsumedCapacity

ItemCollectionMetrics

UnprocessedItems

BatchGetItem

请求参数

必选参数:RequestItems

Item元素不支持AttributesToGetConsistentRead参数。

可选参数:ReturnConsumedCapacity

返回参数

ConsumedCapacity

Responses

UnprocessedKeys

Query

请求参数

必选参数:TableName

可选参数:AttributesToGet

可选参数:ConditionalOperator

可选参数:ConsistentRead

可选参数:ExclusiveStartKey

可选参数:ExpressionAttributeNames

参见表达式支持情况

可选参数:ExpressionAttributeValues

参见表达式支持情况

可选参数:FilterExpression

参见表达式支持情况

可选参数:IndexName

可选参数:KeyConditionExpression

参见表达式支持情况

可选参数:KeyConditions

可选参数:Limit

可选参数:ProjectionExpression

参见表达式支持情况

可选参数:QueryFilter

可选参数:ReturnConsumedCapacity

可选参数:ScanIndexForward

可选参数:Select

返回参数

ConsumedCapacity

Count

Items

LastEvaluatedKey

ScannedCount

Scan

请求参数

必选参数:TableName

可选参数:AttributesToGet

可选参数:ConditionalOperator

可选参数:ConsistentRead

可选参数:ExclusiveStartKey

可选参数:ExpressionAttributeNames

参见表达式支持情况

可选参数:ExpressionAttributeValues

参见表达式支持情况

可选参数:FilterExpression

参见表达式支持情况

可选参数:IndexName

可选参数:Limit

可选参数:ProjectionExpression

参见表达式支持情况

可选参数:ReturnConsumedCapacity

可选参数:ScanFilter

可选参数:Segment

可选参数:Select

可选参数:TotalSegments

返回参数

ConsumedCapacity

Count

Items

LastEvaluatedKey

ScannedCount

DynamoDBStreams接口支持情况

接口名

参数

是否支持

备注

DescribeStream

请求参数

必选参数:StreamArn

可选参数:Limit

可选参数:ExclusiveStartShardId

返回参数

必选参数:StreamDescription

对比Amazon DynamoDB实例,该返回参数返回结果有如下区别:

  • StartingSequenceNumber字段固定为unknown

  • EndingSequenceNumber字段以时间戳体现。

  • 由于DynamoDB协议兼容版实例仅有一个Shard,ShardId字段固定为arn:alibaba:mongo-dynamodb@shard-only-1

ListStreams

请求参数

可选参数:TableName

可选参数:Limit

可选参数:ExclusiveStartStreamArn

返回参数

必选参数:Streams

每个表中最多只能返回一个Stream。

GetShardIterator

请求参数

必选参数:StreamArn

必选参数:ShardId

由于DynamoDB协议兼容版实例仅有一个Shard,本字段固定为arn:alibaba:mongo-dynamodb@shard-only-1

必选参数:ShardIteratorType

当前仅支持传入LATESTAFTER_SEQUENCE_NUMBER

可选参数:SequenceNumber

ShardIteratorTypeAFTER_SEQUENCE_NUMBER时使用,可传入32位秒级时间戳。

返回参数

必选参数:ShardIterator

GetRecords

请求参数

必选参数:ShardIterator

可选参数:Limit

不指定时默认按照每101条记录进行分页,而非1MB数据大小。

返回参数

必选参数:Records

DynamoDB接口相关数据结构

数据类型

字段

是否支持

TableDescription

ArchivalSummary

AttributeDefinitions

BillingModeSummary

CreationDateTime

GlobalSecondaryIndexes

GlobalTableVersion

ItemCount

KeySchema

LatestStreamArn

LatestStreamLabel

LocalSecondaryIndexes

ProvisionedThroughput

Replicas

RestoreSummary

SSEDescription

StreamSpecification

TableArn

TableId

TableName

TableSizeBytes

TableStatus

表达式支持情况

  • .属性名的处理:一个带.的属性名可能表示一个scalar属性,也可能表示一个嵌入文档。在DynamoDB中的处理规则是:如果在表达式属性名中能够找到该属性名对应的映射,就按照scalar属性进行处理,否则按照嵌入文档进行处理。

    说明

    目前暂不支持带.scalar属性的相关处理,如查询、投影等。

  • ProjectionExpression: 只支持一维数组,并且当表达式中只包含数组某个元素时则会返回其他字段。

  • ConditionExpression:

    • DynamoDB中的ConditionExpression语法如下:

      condition-expression ::=
            operand comparator operand
          | operand BETWEEN operand AND operand
          | operand IN ( operand (',' operand (, ...) ))
          | function
          | condition AND condition
          | condition OR condition
          | NOT condition
          | ( condition )
      
      comparator ::=
          =
          | <>
          | <
          | <=
          | >
          | >=
      
      function ::=
          attribute_exists (path)
          | attribute_not_exists (path)
          | attribute_type (path, type)
          | begins_with (path, substr)
          | contains (path, operand)
          | size (path)
    • operand1 comparator operand2语法中,operand1必须为pathoperand2必须为表达式属性值。

    • operand1 BETWEEN operand2 AND operand3语法中,operand1必须为path,其余operand必须为表达式属性值。

    • operand1 IN ( operand2 (',' operand3 (, ...) ))语法中,operand1必须为path,其余operand必须为表达式属性值。

    • 对于function中的size(path)函数,只支持path字段为字符串类型(判断长度)或Set/List类型,用于判断大小,不支持BinaryMap类型。

  • UpdateExpression:

    • DynamoDB中的UpdateExpression语法如下:

      update-expression ::=
          [ SET action [, action] ... ]
          [ REMOVE action [, action] ...]
          [ ADD action [, action] ... ]
          [ DELETE action [, action] ...]
      
      set-action ::=
          path = value
      
      value ::=
          operand
          | operand '+' operand
          | operand '-' operand
      
      operand ::=
          path | function
      
      function ::=
          if_not_exists (path, value)
          | list_append (list1, list2)
      
      remove-action ::=
          path
      
      add-action ::=
          path value
      
      delete-action ::=
          path value
    • set-action:

      • SET path = operand语法中,不支持operandpath的场景。

      • SET path = operand1 '+'|'-' operand2语法中,operand1必须等于path,即在此场景下只支持字段自增或自减。

      • SET path = if_not_exists (path, value)语法中,两个path必须相等,且value只能是表达式属性值。

      • SET path = if_not_exists (path, value)语法中,在同时指定多个时不支持部分更新,即需要满足全部条件才能执行成功。

      • SET path = list_append(list1, list2)语法中,list1list2中必须有一个等于path,另外一个是表达式属性值。

    • remove-action:用于移除List中某个元素时,用null代替被移除的元素,List大小不变,剩下的元素不会发生移位。

数据类型映射说明

DynamoDB提供的数据类型和MongoDB的不同,因此,阿里云会在DynamoDB协议兼容版以及MongoDB的数据类型之间做映射,使二者相互兼容彼此的数据类型。

数据类型映射关系表:

DynamoDB数据类型

MongoDB数据类型

B

Binary data

BOOL

Boolean

BS

*

L

Array

M

Object

N

Double

NS

*

NULL

Null

S

String

SS

*

说明

DynamoDB中的BS(binary set)、NS(number set)、SS(string set)数据类型不允许重复数据。例如,在NS中插入1,2,2,3,NS会对数据做去重操作,最终结果会变成1,2,3。而DynamoDB协议兼容版当前暂不支持对这三种数据类型进行去重,因此上面表格中标记为星号(*)的部分都将作为数组(Array)进行处理。阿里云会在后续版本中对这三种数据类型进行优化以支持去重。