我想将所有dynamoDB表复制到另一个没有s3的aws帐户来保存数据。我看到了使用数据管道复制表的解决方案,但所有都使用s3来保存数据。我想跳过s3步骤,因为该表包含大量数据,因此s3写入和s3读取过程可能需要一些时间。所以我需要直接将表从一个帐户复制到另一个帐户。
答案 0 :(得分:23)
如果你不介意使用Python,并添加boto3库(sudo python -m pip install boto3),那么我会这样做(我假设你知道如何填写键,区域和表名)代码分别):
import boto3
import os
dynamoclient = boto3.client('dynamodb', region_name='eu-west-1',
aws_access_key_id='ACCESS_KEY_SOURCE',
aws_secret_access_key='SECRET_KEY_SOURCE')
dynamotargetclient = boto3.client('dynamodb', region_name='us-west-1',
aws_access_key_id='ACCESS_KEY_TARGET',
aws_secret_access_key='SECRET_KEY_TARGET')
dynamopaginator = dynamoclient.get_paginator('scan')
tabname='SOURCE_TABLE_NAME'
targettabname='TARGET_TABLE_NAME'
dynamoresponse = dynamopaginator.paginate(
TableName=tabname,
Select='ALL_ATTRIBUTES',
ReturnConsumedCapacity='NONE',
ConsistentRead=True
)
for page in dynamoresponse:
for item in page['Items']:
dynamotargetclient.put_item(
TableName=targettabname,
Item=item
)
答案 1 :(得分:9)
试试这个<form>
<text-input-comp [directiveName]="mydirective" ></text-input-comp>
<text-input-comp></text-input-comp>
<text-input-comp></text-input-comp>
</form>
module
nodejs
答案 2 :(得分:5)
使用boto对Amazon DynamoDB进行简单的备份和还原
https://github.com/bchew/dynamodump
可以执行以下操作:
答案 3 :(得分:2)
读取和写入S3不会成为你的瓶颈。
虽然从Dynamo扫描的速度非常快,但将项目写入目标表的速度会很慢。每个分区每秒最多只能写入1000个项目。所以,我不担心中间S3存储。
但是,数据管道也不是将表复制到另一个表的最有效方法。
如果您需要快速转型,那么最好的办法就是实施自己的解决方案。根据所需的传输吞吐量配置目标表(但要注意不需要的分区拆分),然后使用多个线程写入并行扫描,这也会写入目标表。
Java中有一个开源实现,您可以将其用作AWS实验室存储库中的起点。
答案 4 :(得分:1)
您可以使用deepcopy和dynamodb_json:
import boto3
import json
from dynamodb_json import json_util as djson
from copy import deepcopy
REGION = 'eu-west-1'
# init your sessions to the different accounts (session_a and session_b)
dynamo_a = session_a.client('dynamodb', region_name=REGION)
dynamo_b = session_b.resource('dynamodb', region_name=REGION)
table = dynamo_b.Table('abc')
result_data = table.scan()
result_item = []
result_item.extend(result_data['Items'])
while 'LastEvaluatedKey' in result_data:
result_data = my_table.scan(
FilterExpression=filter_expression,
ExclusiveStartKey=result_data['LastEvaluatedKey']
)
result_item.extend(result_data['Items'])
translated_items = []
for r in result_item:
updated_item = deepcopy(r)
translated_items.append(updated_item)
for r in translated_items:
item = json.loads(djson.dumps(r))
dynamo_a.put_item(TableName='def', Item=item)
答案 5 :(得分:0)
您可以使用DynamoDb Streams和Lambda来实现此目的。 http://searchaws.techtarget.com/tip/DynamoDB-Streams-keep-database-tables-in-sync
答案 6 :(得分:0)
S3绝对不是瓶颈。我几乎会争辩说,对于99%的用例,您应该使用Data Pipeline + S3来完成,这是AWS推荐的最佳实践。 我在这里提供了更详细的答案:https://stackoverflow.com/a/57465721/126382
真正的问题是,您是否组织其他系统和实时读取/写入数据的客户端来进行迁移,而不会导致停机。如果这是您对任务计时的最大担忧-那么您想设计一种定制解决方案,该解决方案将确保所有写入到两个帐户中的两个DDB表中,并在最终切换写入该数据的客户端之前,将读取数据的客户端切换到目标DDB表中。数据。也可以将此迁移计划的其他风味结合在一起。