尝试运行作业时解析错误代码 1 内部错误
Parse error code 1 internal error when attempting to run a job
我创建了以下作业来清除不需要的记录。我已经简化了下面的代码来解决根本原因,但仅此而已,超过 80% 的时间我运行它都找不到任何东西,因为错误代码 1 "internal error":
Parse.Cloud.job('cleanStories', function(request, status) {
Parse.Cloud.useMasterKey();
var counter = 0;
var query = new Parse.Query('Story');
query.doesNotExist("username");
query.limit(1000);
query.find({
success: function(results) {
counter += results.length;
status.success(counter + " stories found.");
},
error: function(error) {
status.error(counter + " stories found. Error: " + error.code + " " + error.message);
}
});
});
我目前有大约 568k 条记录。这比我开始运行此作业以清理记录时的近 800k 有所下降。它通常运行良好,但自从开始非常一致地出错。我做错了什么?
编辑:
我已经将限制降低到 50 并且执行成功率更高。在 100(默认值)时,它仍然经常失败。无论如何我可以把它恢复到 1000 以更快地完成其余记录吗?
这是基于一个较弱的理论,即较小的限制会有所帮助(如果它确实是超时问题,希望它是每个查询超时而不是每个作业超时,否则这个想法根本无济于事)。但是这里有一个想法如何使用 limit/skip:
进行大查找
function findN(query, results) {
results = results || [];
query.skip(results.length);
return query.find().then(function(findResults) {
results = results.concat(findResults);
return (findResults.length === 0)? results : findN(query, results);
});
}
// to run this, build a query
var query = new Parse.Query("MyClass");
// qualify the query however you wish
// set any limit up to 1000, but our guess is that yours should be small
query.limit(20);
var results = [];
findN(query, results).then(function(r) {
console.log("found " + r.length + " rows");
// r will contain all of the rows matching the query, found 20 at a time
});
我创建了以下作业来清除不需要的记录。我已经简化了下面的代码来解决根本原因,但仅此而已,超过 80% 的时间我运行它都找不到任何东西,因为错误代码 1 "internal error":
Parse.Cloud.job('cleanStories', function(request, status) {
Parse.Cloud.useMasterKey();
var counter = 0;
var query = new Parse.Query('Story');
query.doesNotExist("username");
query.limit(1000);
query.find({
success: function(results) {
counter += results.length;
status.success(counter + " stories found.");
},
error: function(error) {
status.error(counter + " stories found. Error: " + error.code + " " + error.message);
}
});
});
我目前有大约 568k 条记录。这比我开始运行此作业以清理记录时的近 800k 有所下降。它通常运行良好,但自从开始非常一致地出错。我做错了什么?
编辑:
我已经将限制降低到 50 并且执行成功率更高。在 100(默认值)时,它仍然经常失败。无论如何我可以把它恢复到 1000 以更快地完成其余记录吗?
这是基于一个较弱的理论,即较小的限制会有所帮助(如果它确实是超时问题,希望它是每个查询超时而不是每个作业超时,否则这个想法根本无济于事)。但是这里有一个想法如何使用 limit/skip:
进行大查找function findN(query, results) {
results = results || [];
query.skip(results.length);
return query.find().then(function(findResults) {
results = results.concat(findResults);
return (findResults.length === 0)? results : findN(query, results);
});
}
// to run this, build a query
var query = new Parse.Query("MyClass");
// qualify the query however you wish
// set any limit up to 1000, but our guess is that yours should be small
query.limit(20);
var results = [];
findN(query, results).then(function(r) {
console.log("found " + r.length + " rows");
// r will contain all of the rows matching the query, found 20 at a time
});