如何在 Parse Platform NodeJS 中保存千数据
How to save thousand data in Parse Platform NodeJS
我是解析平台的新手,我正在尝试将 81000 行数据插入到解析数据库中,这里是代码
const uri = "/the.json"
const res = await axios.get(uri)
const dataresult = Object.keys(res.data)
if (dataresult.length > 0) {
res.data.forEach(function (datakp) {
var kp = new Parse.Object("theClass");
kp.save(datakp)
.then((res) => {
console.log('oke ' + res.id)
}),
(error) => {
console.log('err : '+ error.message)
}
})
}
控制台日志没有错误,Parse DB中没有保存数据,但是如果我只插入1000行,它会保存到数据库中。
EG:
if (dataresult.length > 0) {
res.data.forEach(function (datakp, index) {
if (index < 1000) {
var kp = new Parse.Object("theClass");
kp.save(datakp)
.then((res) => {
console.log('oke ' + res.id)
}),
(error) => {
console.log('err : '+ error.message)
}
})
}
}
谢谢
更新
我根据@davi-macêdo 的回答解决了这个问题
这里有一个完整的代码
const uri = "/the.json"
const res = await axios.get(uri)
const dataresult = Object.keys(res.data)
const objs = [];
const theKP = Parse.Object.extend("theClass")
if (dataresult.length > 0) {
res.data.forEach(function (datakp) {
var thekp = new theKP()
thekp.set(datakp)
objs.push(thekp);
})
}
Parse.Object.saveAll(objs)
.then((res) => {
console.log('oke updated ' + dataresult.length)
}),
(error) => {
console.log('err : '+ error.message)
}
您可能达到了速率限制,我无法想象一次保存 81,000 条记录对于许多应用程序来说是正常行为。
我查看了文档,找不到任何可能提到保存限制的内容,但是发送 1000 个请求会触发大多数速率限制保护
最有效的方法是使用 Parse.Object.saveAll
函数。像这样:
const uri = "/the.json"
const res = await axios.get(uri)
const dataresult = Object.keys(res.data)
const objs = [];
if (dataresult.length > 0) {
res.data.forEach(function (datakp) {
objs.push(new Parse.Object("theClass", datakp));
})
}
Parse.Object.saveAll(objs)
.then((res) => {
console.log('oke ' + res.id)
}),
(error) => {
console.log('err : '+ error.message)
}
无论如何,由于您没有错误并且当前没有数据正在保存,您可能会遇到一些内存限制。所以这也是你需要注意的事情。
我是解析平台的新手,我正在尝试将 81000 行数据插入到解析数据库中,这里是代码
const uri = "/the.json"
const res = await axios.get(uri)
const dataresult = Object.keys(res.data)
if (dataresult.length > 0) {
res.data.forEach(function (datakp) {
var kp = new Parse.Object("theClass");
kp.save(datakp)
.then((res) => {
console.log('oke ' + res.id)
}),
(error) => {
console.log('err : '+ error.message)
}
})
}
控制台日志没有错误,Parse DB中没有保存数据,但是如果我只插入1000行,它会保存到数据库中。
EG:
if (dataresult.length > 0) {
res.data.forEach(function (datakp, index) {
if (index < 1000) {
var kp = new Parse.Object("theClass");
kp.save(datakp)
.then((res) => {
console.log('oke ' + res.id)
}),
(error) => {
console.log('err : '+ error.message)
}
})
}
}
谢谢
更新
我根据@davi-macêdo 的回答解决了这个问题 这里有一个完整的代码
const uri = "/the.json"
const res = await axios.get(uri)
const dataresult = Object.keys(res.data)
const objs = [];
const theKP = Parse.Object.extend("theClass")
if (dataresult.length > 0) {
res.data.forEach(function (datakp) {
var thekp = new theKP()
thekp.set(datakp)
objs.push(thekp);
})
}
Parse.Object.saveAll(objs)
.then((res) => {
console.log('oke updated ' + dataresult.length)
}),
(error) => {
console.log('err : '+ error.message)
}
您可能达到了速率限制,我无法想象一次保存 81,000 条记录对于许多应用程序来说是正常行为。
我查看了文档,找不到任何可能提到保存限制的内容,但是发送 1000 个请求会触发大多数速率限制保护
最有效的方法是使用 Parse.Object.saveAll
函数。像这样:
const uri = "/the.json"
const res = await axios.get(uri)
const dataresult = Object.keys(res.data)
const objs = [];
if (dataresult.length > 0) {
res.data.forEach(function (datakp) {
objs.push(new Parse.Object("theClass", datakp));
})
}
Parse.Object.saveAll(objs)
.then((res) => {
console.log('oke ' + res.id)
}),
(error) => {
console.log('err : '+ error.message)
}
无论如何,由于您没有错误并且当前没有数据正在保存,您可能会遇到一些内存限制。所以这也是你需要注意的事情。