是否可以一次性将一组对象插入 DynamoDB - Java

Posted

技术标签:

【中文标题】是否可以一次性将一组对象插入 DynamoDB - Java【英文标题】:Is it possible to insert a Set of Objects to DynamoDB in one go - Java 【发布时间】:2018-09-11 14:46:12 【问题描述】:

我可以使用以下代码在 DynamoDB 中插入一个对象(使用 @DynamoDBTable 注释)

@Autowired
private SdnInformationRepository sdnInformationRepository;

SdnInformation inf = new SdnInformation();
inf.setFirstName("firstname");
inf.setLastName("lastname");
sdnInformationRepository.save(inf);

这是我的仓库

public interface SdnInformationRepository extends 
CrudRepository<SdnInformation, String>  

还有我的模特

@DynamoDBTable(tableName = "SdnList")
public class SdnInformation 

@DynamoDBHashKey(attributeName = "Id")
@DynamoDBAutoGeneratedKey
private String id;

private String firstName;

private String lastName;

public String getFirstName() 
    return firstName;


public void setFirstName(String firstName) 
    this.firstName = firstName;


public String getLastName() 
    return lastName;


public void setLastName(String lastName) 
    this.lastName = lastName;



这里一切正常。我想知道是否可以一次插入一个列表/一组 SdnInformation 对象?如果我单独插入大量此类对象,则需要花费太多时间。 所以我想要类似的东西

Set<SdnInformation> listToInsert = new HashSet<SdnInformation>();
... some code to fill my set with thousands of objects ...
sdnInformationRepository.save(listToInsert);

【问题讨论】:

CrudRepository 接口有一个 saveAll 方法... 哇!我错过了。 saveAll 方法完成了这项工作! 【参考方案1】:

DynamoDB 不支持同时插入多个项目。批量处理多个请求(最多 25 个)是可能的,但 Dynamo 仍将它们视为单独的请求(即,有的可能成功,有的可能失败)。

当然,在高层次上,映射器可以假装它正在插入一个项目列表,但底层仍然会有单独的操作。

更新(基于评论)

如果您追求的是速度,您可以并行化插入。只要您有可用的写入容量,您就可以通过这种方式获得很多速度提升。但它可能会很快变得昂贵。并且每个分区的插入次数限制为 1000 次/秒。

【讨论】:

是的,我可以验证使用 saveAll 函数可以将多条记录保存在一起,但总时间几乎与插入单个记录相同。

以上是关于是否可以一次性将一组对象插入 DynamoDB - Java的主要内容,如果未能解决你的问题,请参考以下文章

如何通过一次调用将一组对象推送到猫鼬中的数组中?

如何通过一次调用将一组对象推送到猫鼬中的数组中?

如何仅通过一次调用将一组对象保存到猫鼬数据库?

Pentaho:将一组动态记录插入数据库

是否可以将一组坐标保存到firebase?

如何将一组 powershell 命令转换为可以在需要时运行的脚本?