将大量数据传递给解析查询
Passing a big amount of data to a Parse Query
我正在使用一个应用程序,该应用程序使用 table 和(姓名、性别)作为模式。这用于检索给定名称的性别。所以我在这里努力实现的是解析一个包含数千个名字的数组,结果 return 每个名字的性别。我可以只调用一次 Parse 吗?
我尝试使用 Parse.Query.or 查询每个名称,但遗憾的是这只支持 10 个不同的查询。
有什么想法吗?
解析每个查询最多只能return 1000 条记录。所以如果你有 N 个名字。它至少需要 N/1000 个查询。
解析限制参考http://profi.co/all-the-limits-of-parse/
为了优化查询,您可以批量生成 1000 个名称并查询 Parse 并将限制设置为 1000。然后迭代所有记录并生成字典。但为了让它更快,您可以异步进行这些调用。
例子
// function to fetch gender of list of names
function fetchGenderOfNames(arrayOfNames, successCallback, errorCallback){
var numberOfBatches = (arrayOfNames.length/1000 + (arrayOfNames.length % 1000)? 1 : 0),
callCount = 0,
genderOfNames = {},
errorFlag = false;
function querySuccessCallback(records){
if(!errorFlag){
records.forEach(function(record){
genderOfNames[record.get('name')] = record.get('gender');
});
callCount++;
if(callCount == numberOfBatches){
successCallback(genderOfNames);
}
}
}
function queryErrorCallback(error){
if(!errorFlag){
errorFlag = true;
errorCallback(error);
}
}
for(var arrayIndex = 0; arrayIndex < arrayOfNames.length; arrayIndex += 1000){
if(!errorFlag){
var genderQuery = new Parse.Query('Table_name');
// following match will be case sensitive
genderQuery.containedIn('name', arrayOfNames.slice(arrayIndex, arrayIndex + 1000);
genderQuery.limit(1000);
genderQuery.find({success: querySuccessCallback, error: queryErrorCallback});
}
}
}
我正在使用一个应用程序,该应用程序使用 table 和(姓名、性别)作为模式。这用于检索给定名称的性别。所以我在这里努力实现的是解析一个包含数千个名字的数组,结果 return 每个名字的性别。我可以只调用一次 Parse 吗?
我尝试使用 Parse.Query.or 查询每个名称,但遗憾的是这只支持 10 个不同的查询。
有什么想法吗?
解析每个查询最多只能return 1000 条记录。所以如果你有 N 个名字。它至少需要 N/1000 个查询。
解析限制参考http://profi.co/all-the-limits-of-parse/
为了优化查询,您可以批量生成 1000 个名称并查询 Parse 并将限制设置为 1000。然后迭代所有记录并生成字典。但为了让它更快,您可以异步进行这些调用。
例子
// function to fetch gender of list of names
function fetchGenderOfNames(arrayOfNames, successCallback, errorCallback){
var numberOfBatches = (arrayOfNames.length/1000 + (arrayOfNames.length % 1000)? 1 : 0),
callCount = 0,
genderOfNames = {},
errorFlag = false;
function querySuccessCallback(records){
if(!errorFlag){
records.forEach(function(record){
genderOfNames[record.get('name')] = record.get('gender');
});
callCount++;
if(callCount == numberOfBatches){
successCallback(genderOfNames);
}
}
}
function queryErrorCallback(error){
if(!errorFlag){
errorFlag = true;
errorCallback(error);
}
}
for(var arrayIndex = 0; arrayIndex < arrayOfNames.length; arrayIndex += 1000){
if(!errorFlag){
var genderQuery = new Parse.Query('Table_name');
// following match will be case sensitive
genderQuery.containedIn('name', arrayOfNames.slice(arrayIndex, arrayIndex + 1000);
genderQuery.limit(1000);
genderQuery.find({success: querySuccessCallback, error: queryErrorCallback});
}
}
}