В настоящее время я пытаюсь разработать API и этап, на котором я сейчас нахожусь, заполнить таблицу полным набором данных (ID, имя, фамилия, доба и т. д.).cfhttp в cfloop limit? use cfthread
Способ, которым я написал это, использовать cfloop от 1 до 500 000 (поскольку я не знаю, от какого диапазона варьируются ID и до), и внутри каждого cfloop я вызываю функцию, которая делает запрос cfhttp сервер и получить содержимое.
Затем я десериализую возвращенный JSON, вызываю функцию для запроса моей таблицы, чтобы узнать, существует ли текущий идентификатор элемента, а если нет, вызовите функцию для вставки записи.
Однако cfloop, кажется, останавливается вокруг отметки в 300 пунктов, поэтому мне было интересно, есть ли лучший способ сделать то, что я делаю? Возможно, используя тег CFTHREAD, который у меня никогда не было опыта использования.
Раздел кода для этого заключается в следующем:
<cfset Variables.url = "someurl.html" />
<cfloop from=100000 to=500000 index="itemNo">
<cfset Variables.itemID = itemNo />
<cfset getItemData = Application.cfcs.Person.getPersonData(Variables.url,Variables.itemID) />
<cfif StructKeyExists(Variables,"getPersonData.FileContent")>
<cfset Variables.getPersonData = DeserializeJSON(getPersonData.FileContent)>
<cfscript>
// CHECK IF PERSON ALREADY IN DATABASE
Variables.getPerson = Application.cfcs.Person.getPersonRecord(Variables.itemID);
// INSERT ITEM IN TO TABLE
Variables.DOB = CreateDate(Year(Variables.getPersonData.Item.DateOfBirth.Year),Month(Variables.getPersonData.Item.DateOfBirth.Month),Day(Variables.getPersonData.Item.DateOfBirth.Day));
Variables.insPerson = Application.cfcs.Person.insPerson(Variables.getPersonData.personID,Variables.getPersonData.Item.FirstName,Variables.getPersonData.Item.LastName,Variables.getPersonData.Item.CommonName,Variables.DOB);
</cfscript>
</cfif>
</cfloop>
«Похоже, что cfloop останавливается вокруг отметки« 300 »- это сообщение об ошибке? Что-нибудь в журналах? – imthepitts
Откуда cfcs.Person.getPersonData() получить его данные? –
Если ошибка: из памяти вы должны делать это небольшими партиями, потому что воспоминания AFAIK не освобождаются до тех пор, пока запрос не закончится в CF. – Henry