AWS Dynamo DB设计的CSV文件

fiei3ece  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(145)

我是AWS的新手,即将通过AWS Amplify托管一个网站。我在一个csv文件中有一些数据(大约200万行)。我每个月都会收到一个新的csv,里面有更新的数据。新的csv更新了以前的行和新的附加行。csv文件中的每一行都没有唯一的标识符,因为任何列都可以在新更新的csv中进行调整。我想将数据存储在dynamo db表中,但我真的不知道如何更新数据。
我考虑过几个选择:
1.删除先前的dynamo db表并使用新的csv文件创建一个新表(不确定这个表的逻辑)
1.我不使用dynamodb,只从存储在s3中的csv中读取(不确定每次需要访问数据时从csv阅读的性能影响)
1.比较新的csv与dynamo db中的旧数据,删除dynamo db中没有出现在新csv中的条目,添加新csv中没有出现在dynamo db中的所有条目(考虑到我的数据集的大小,似乎比较太多了)
1.只需从csv向dynamo db添加新行并忽略对以前行的更改(最后的手段)
我愿意接受任何建议!
我还没有尝试过任何考虑过的选择。

scyqe7ek

scyqe7ek1#

最具成本效益的解决方案是选项1。使用DynamoDB Import from S3,它为您提供了一个简单的API调用来创建表并指向S3中的数据源。DynamoDB完成了创建表和导入数据的繁重工作,您需要为导入的每GB付费。
没有其他方法会如此简单或具有成本效益。使用CSV的一个警告是,CSV文件中的所有数据都将被解释为字符串,如果这是一个交易破坏者,那么你必须使用另一种方法将数据导入DynamoDB,例如AWS Glue或AWS Lambda。

syqv5f0l

syqv5f0l2#

既然你提到没有记录标识符,我假设没有update操作本身,只有deleteinsert
如果deleted记录在新的CSV中不再存在,并且如果没有信息来确定哪些行是新的(如create_timestamp),则选项3是一个非常昂贵的操作。您必须遍历数据库中所有现有的行,以确定哪些行需要delete。然后,您必须遍历CSV中的所有新行,以确定哪些行需要insert
在这种情况下,选择1应该是最有效的选择。
或者,让生成CSV的进程仅向您发送要删除和插入的记录。

jv4diomz

jv4diomz3#

我假设你已经有了一种将数据导入DynamoDB的方法,并且你在定义的时间段内获得了新的csv文件。
根据这个假设,我会说为DynamoDB记录创建一个TTL值,这样数据将按照TTL的定义过期。这样,您就不必担心删除或更新以前的数据。(https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/TTL.html)。此外,导入指定时间段的数据。

相关问题