将数据从 Amazon S3 导入到 DynamoDB 的最佳实践
以下是将数据从 Amazon S3 导入到 DynamoDB 的最佳实践。
保持在 50000 个 S3 对象的限制以下
每个导入作业最多支持 50000 个 S3 对象。如果您的数据集包含超过 50000 个对象,请考虑将它们合并为更大的对象。
避免过大的 S3 对象
S3 对象是并行导入的。如果有大量中型 S3 对象,可以执行并行导入,而不会产生过多的开销。对于 1 KB 以下的项目,可以考虑在每个 S3 对象中放入 400 万个项目。如果您的平均项目大小较大,则按比例在每个 S3 对象中放入较少的项目。
随机排列排序的数据
如果 S3 对象按排序顺序保存数据,则它会创建滚动热分区。在这种情况下,一个分区接收所有活动,之后是下一个分区,依此类推。按排序顺序的数据定义为 S3 对象中的顺序项目,这些项目将在导入期间写入同一目标分区。数据按排序顺序的一种常见情况是 CSV 文件,其中项目按分区键排序,这样重复的项目可以共享同一个分区键。
为了避免出现滚动热分区,我们建议您在这些情况下随机排列顺序。这可以通过分散写入操作来提高性能。有关更多信息,请参阅 在 DynamoDB 中的数据上传期间高效分配写入活动。
压缩数据以使 S3 对象的总大小保持在区域限制以下
在从 S3 导入过程中,对要导入的 S3 对象数据的总大小有限制。在 us-east-1、us-west-2 和 eu-west-1 区域中的限制是 15 TB,在所有其他区域中的限制是 1 TB。该限制基于原始 S3 对象的大小。
压缩功能可以实现在限制范围内导入更多原始数据。如果仅靠压缩不足以使导入量保持在限制范围内,您也可以联系 Amazon Premium Support
注意项目大小对性能的影响
如果您的平均项目大小非常小(低于 200 字节),则相对于较大的项目大小,导入过程花费的时间可能要长一点。
在活跃导入期间请勿修改 S3 对象
当导入操作正在进行时,请确保源 S3 对象保持不变。如果在导入过程中修改了 S3 对象,则操作将失败,并显示错误代码 ObjectModifiedInS3DuringImport 和消息“The S3 object could not be imported because it was overwritten”。
如果您遇到此错误,请使用稳定版本的 S3 对象重新启动导入操作。为避免出现此问题,请等待当前导入完成,然后再对源文件进行更改。
考虑在没有任何全局二级索引的情况下导入
导入任务的持续时间可能取决于是否存在一个或多个全局二级索引 (GSI)。如果您计划使用基数低的分区键创建索引,则如果将索引创建推迟到导入任务完成之后(而不是将其包含在导入任务中),则导入速度可能会更快。
注意
在导入期间创建 GSI 不会产生写入费用(导入后创建 GSI 会产生写入费用)。