ApsaraDB for MongoDB對DynamoDB協議提供了支援。本文詳細介紹ApsaraDB for MongoDB對DynamoDB協議的相容情況。
背景資訊
Amazon DynamoDB是一種完全託管的NoSQL資料庫服務,提供快速且可預測的效能,能夠實現無縫擴充。ApsaraDB for MongoDB版現在相容了DynamoDB協議,您可以在建立ApsaraDB for MongoDB執行個體時選擇支援DynamoDB協議即可使用DynamoDB協議。如何建立DynamoDB協議相容版執行個體,請參見建立DynamoDB協議相容版執行個體。
注意事項
- 僅ApsaraDB for MongoDB4.0版本的分區叢集執行個體支援DynamoDB協議。
- 存量執行個體可通過開啟相容DynamoDB協議來擷取支援。
- 目前DynamoDB相容功能僅支援在VPC環境下使用,使用時無需鑒權。
DynamoDB介面支援情況
介面名 | 參數 | 是否支援 | 備忘 | |
CreateTable | 請求參數 | 必選參數:AttributeDefinitions | 是 | 無 |
必選參數:KeySchema | 是 | 無 | ||
必選參數:TableName | 是 |
| ||
選擇性參數:BillingMode | 否 | 無 | ||
選擇性參數:GlobalSecondaryIndexes | 是 | 無 | ||
選擇性參數:LocalSecondaryIndexes | 是 | 無 | ||
選擇性參數:ProvisionedThroughput | 否 | 無 | ||
選擇性參數:SSESpecification | 否 | 無 | ||
選擇性參數:StreamSpecification | 是 | StreamViewType 參數當前僅支援如下值:
| ||
選擇性參數:Tags | 否 | 無 | ||
返回參數 | TableDescription | 是 | 無 | |
UpdateTable | 請求參數 | 選擇性參數:AttributeDefinitions | 是 | 無 |
選擇性參數:BillingMode | 否 | 無 | ||
必選參數:GlobalSecondaryIndexesUpdates | 是 | 支援Create和Delete,不支援Update。 | ||
選擇性參數:ProvisionedThroughput | 否 | 無 | ||
選擇性參數:ReplicaUpdates | 否 | 無 | ||
選擇性參數:SSESpecification | 否 | 無 | ||
選擇性參數:StreamSpecification | 是 | StreamViewType 參數當前僅支援如下值:
| ||
必選參數: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元素不支援AttributesToGet 和ConsistentRead 參數。 |
選擇性參數: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執行個體,該返回參數返回結果有如下區別:
| |
ListStreams | 請求參數 | 選擇性參數:TableName | 是 | 無 |
選擇性參數:Limit | 否 | 無 | ||
選擇性參數:ExclusiveStartStreamArn | 否 | 無 | ||
返回參數 | 必選參數:Streams | 是 | 每個表中最多隻能返回一個Stream。 | |
GetShardIterator | 請求參數 | 必選參數:StreamArn | 是 | 無 |
必選參數:ShardId | 是 | 由於DynamoDB協議相容版執行個體僅有一個Shard,本欄位固定為arn:alibaba:mongo-dynamodb@shard-only-1 。 | ||
必選參數:ShardIteratorType | 是 | 當前僅支援傳入LATEST 和AFTER_SEQUENCE_NUMBER 。 | ||
選擇性參數:SequenceNumber | 是 | 當ShardIteratorType 為AFTER_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
必須為path
,operand2
必須為運算式屬性值。operand1 BETWEEN operand2 AND operand3
文法中,operand1
必須為path
,其餘operand
必須為運算式屬性值。operand1 IN ( operand2 (',' operand3 (, ...) ))
文法中,operand1
必須為path
,其餘operand
必須為運算式屬性值。- 對於
function
中的size(path)
函數,只支援path
欄位為字串類型(判斷長度)或Set/List
類型,用於判斷大小,不支援Binary
和Map
類型。
- DynamoDB中的ConditionExpression文法如下:
- 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
文法中,不支援operand
是path
的情境。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)
文法中,list1
和list2
中必須有一個等於path
,另外一個是運算式屬性值。
- remove-action:用於移除
List
中某個元素時,用null
代替被移除的元素,List
大小不變,剩下的元素不會發生移位。
- DynamoDB中的UpdateExpression文法如下:
資料類型映射說明
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)進行處理。阿里雲會在後續版本中對這三種資料類型進行最佳化以支援去重。