我正在使用lambda、API网关和Dynamodb
我正在创建一个batchWrite函数,在一个函数中上载25个以上的项目
但我发现,当我上传35个项目时,前25个项目成功上传到dynamodb,但最后10个项目失败,但没有记录任何错误
该函数在node.js中编写
'use strict'
const AWS = require('aws-sdk');
const sha1 = require('sha1');
const documentClient = new AWS.DynamoDB.DocumentClient();
exports.handler = async function (event, context, callback) {
let responseBody = "";
let statusCode = 0;
const { excelObject } = JSON.parse(event.body);
if(excelObject){
await uploadFileByBatch(excelObject)
}
const response = {
statusCode: statusCode,
headers:{
"Content-Type": "application/json",
"access-control-allow-origin": "*"
},
body: responseBody
}
console.log(response)
return response
}
let uploadFileByBatch = async function (payload) {
var items = [];
var params={};
if(payload.length > 25){
console.log("> 25")
let newObj = payload.slice(0,25)
payload.splice(0,25)
console.log("new Payload length")
console.log(payload.length)
newObj.forEach(obj =>{
let hash = sha1(Buffer.from(new Date().toString()+ Math.random()));
items.push(
{
PutRequest:{
Item: {
id: obj.id?obj.id:hash,
organization_EN: obj.organization_EN,
email: obj.email,
isActive: obj.isActive
}
}
}
)
})
params = {
RequestItems:{
"Community": items
}
}
console.log(params)
try{
const data = await documentClient.batchWrite(params).promise();
}catch(err){
console.log(err)
}
uploadFileByBatch(payload)
}else{
console.log("less than 25")
payload.forEach(obj =>{
let hash = sha1(Buffer.from(new Date().toString()+ Math.random()));
items.push(
{
PutRequest:{
Item: {
id: obj.id?obj.id:hash,
organization_EN: obj.organization_EN,
email: obj.email,
isActive: obj.isActive
}
}
}
)
})
params = {
RequestItems:{
"Community": items
}
}
console.log(params)
try{
console.log("first BatchWrite")
const data = await documentClient.batchWrite(params).promise();
console.log("first Data")
}catch(err){
console.log(err)
}
}
}
日志如下所示。
>25
New Payload length
10
{
RequestItems: {
'Community': [
[Object], [Object], [Object],
[Object], [Object], [Object],
[Object], [Object], [Object],
[Object], [Object], [Object],
[Object], [Object], [Object],
[Object], [Object], [Object],
[Object], [Object], [Object],
[Object], [Object], [Object],
[Object]
]
}
}
first BatchWrite
Less than 25
{
RequestItems: {
'Community': [
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object], [Object]
]
}
}
{
statusCode: 0,
headers: {
'Content-Type': 'application/json',
'access-control-allow-origin': '*'
},
body: ''
}
对于DynamoDB的batchWrite函数,您不能在一次请求中上载超过25个
如果以下一项或多项为真,DynamoDB将拒绝整个批处理写入操作:
您可以在此处检索有关此的信息https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html
有很多方法可以处理大批量操作,您可以执行25个并行请求,但您应该小心。
我正在使用hibernate jpa执行批处理更新。 更新:我得到了解决方案:问题是我正在刷新已经刷新的事务,因此它没有给我任何事务正在进行中的错误以及我上面发布的错误,所以我只是删除了`getem().flush();和getEm().clear();从finally块开始工作:)
我试图使用batchWrite将一个数据插入Dynamodb,但它无法插入数据。它只显示此消息(但没有错误消息)。 然后,无法插入数据。我试着用put,效果很好。我用的是Lambda。这是代码。
知道为什么下面的代码会出现以下错误吗? java.lang.NullPointerException:org.springframework.batch.item.database.HibernateCursoritemReader.DoRead处为null(HibernateCursoritemReader.java:155)
我知道ConcurrentKafkaListenerContainerFactory具有属性“setBatchListener(true)”,但就我对Kafka文档的理解而言,这种类型的工厂配置仅与@KafKalistener注释一起使用。 任何帮助都将不胜感激。
我需要在我的MySQL数据库中进行批量插入(近10000个)。我正在使用JPA/Hibernate和spring Boot。我从hibernate文档中读到了在hibernate中执行大容量插入/更新,我认为我的代码不能正常工作,因为它顺序地插入hibernate查询,而不是在批处理插入中执行它们。下面是我的代码。我是不是漏掉了什么? 这是我的数据源配置。 我是不是漏掉了什么? 请帮帮忙。
我想从mysql读取数据,然后写入sftp。现在我将文件写入本地,从本地写入sftp,最好的方法是什么?