Регистрация  |  Вход

SOQL For Loops avoid Heap size

Появился такой вопрос мы используем SOQL query в цикле что бы обойти ошибку heap size при больших данных, то есть можно использовать batch и принципе сделать тоже самое,но так значительно проще при работе с большими данными,Так же я помню что секюрити scanner баннет SOQL query в цикле.То есть сразу несколько вопросов зачем было это делать если это не проходит по секюрити сканеру следовательно не может быть выложенно в ApexChange,чего я еще не знаю про запросы в циклах и какие засады там есть ?

ссылка : http://www.salesforce.com/us/developer/docs/apexcode/Content/langCon_apex_loops_for_SOQL.htm

Появился такой вопрос мы используем SOQL query в цикле что бы обойти ошибку heap size при больших данных, то есть можно использовать batch и принципе сделать тоже самое,но так значительно проще при работе с большими данными,Так же я помню что секюрити scanner баннет SOQL query в цикле.То есть сразу несколько вопросов зачем было это делать если это не проходит по секюрити сканеру следовательно не может быть выложенно в ApexChange,чего я еще не знаю про запросы в циклах и какие засады там есть ?

ссылка : [url]http://www.salesforce.com/us/developer/docs/apexcode/Content/langCon_apex_loops_for_SOQL.htm[/url]

Почитал доку по твоей ссылке - это не SOQL в for. Это вообще что-то интересное Первый раз такое вижу -

for (Account[] tmp : [SELECT Id FROM Account WHERE Name = 'yyy']) {

}

DML statements can only process up to 10,000 records at a time, and sObject list for loops process records in batches of 200

Получается что SOQL запрос отдает не всю пачку (List) сразу, а пачки по 200 записей. Похоже такой lazy load по описанию получается, чтобы не опрокинуть heap size.

По ходу на эту структуру Security Scanner не должен ругаться.

Почитал доку по твоей ссылке - это не SOQL в for. Это вообще что-то интересное :) Первый раз такое вижу - 

for (Account[] tmp : [SELECT Id FROM Account WHERE Name = 'yyy']) {

}

[quote]DML statements can only process up to 10,000 records at a time, and sObject list for loops process records in batches of 200[/quote]

Получается что SOQL запрос отдает не всю пачку (List) сразу, а пачки по 200 записей. Похоже такой lazy load по описанию получается, чтобы не опрокинуть heap size.

По ходу на эту структуру Security Scanner не должен ругаться.

Сергей, Дима.
Спасибо за интересную "пищу для ума".

Есть над чем подумать...

Вот еще какой-то документ (вытекает из предыдущего)

https://www.salesforce.com/us/developer/docs/apexcode/Content/langCon_apex_SOQL_VLSQ.htm

Сергей, Дима.
Спасибо за интересную "пищу для ума".

Есть над чем подумать...

Вот еще какой-то документ (вытекает из предыдущего)

[url]https://www.salesforce.com/us/developer/docs/apexcode/Content/langCon_apex_SOQL_VLSQ.htm[/url]

Dmitry Shnyrev
Почитал доку по твоей ссылке - это не SOQL в for. Это вообще что-то интересное Первый раз такое вижу -

for (Account[] tmp : [SELECT Id FROM Account WHERE Name = 'yyy']) {

}

DML statements can only process up to 10,000 records at a time, and sObject list for loops process records in batches of 200

Получается что SOQL запрос отдает не всю пачку (List) сразу, а пачки по 200 записей. Похоже такой lazy load по описанию получается, чтобы не опрокинуть heap size.

По ходу на эту структуру Security Scanner не должен ругаться.


Cпециально проверю еще раз.насчет сканера.

[quote="Dmitry Shnyrev"]Почитал доку по твоей ссылке - это не SOQL в for. Это вообще что-то интересное :) Первый раз такое вижу - 

for (Account[] tmp : [SELECT Id FROM Account WHERE Name = 'yyy']) {

}

[quote]DML statements can only process up to 10,000 records at a time, and sObject list for loops process records in batches of 200[/quote]

Получается что SOQL запрос отдает не всю пачку (List) сразу, а пачки по 200 записей. Похоже такой lazy load по описанию получается, чтобы не опрокинуть heap size.

По ходу на эту структуру Security Scanner не должен ругаться.[/quote]
Cпециально проверю еще раз.насчет сканера.

Dmitry Shnyrev
Почитал доку по твоей ссылке - это не SOQL в for. Это вообще что-то интересное Первый раз такое вижу

Ну как это первый раз видишь! А кто вам "мозг сломал" несколько месяцев назад этой схемой?

Я нашел ее в базовом APEX workbook:
http://www.salesforce.com/us/developer/docs/apex_workbook/Content/apex_govlimits_overview.htm
в самом низу.

но ни разу ее не использовал. Как и батч.

Так что вопрос остается: когда использовать такой подход - цикл-обертка выкверивающий пачками по 200 и подающие эти пачки в работу или батч.

[quote="Dmitry Shnyrev"]Почитал доку по твоей ссылке - это не SOQL в for. Это вообще что-то интересное :) Первый раз такое вижу[/quote]

Ну как это первый раз видишь! А кто вам "мозг сломал" несколько месяцев назад этой схемой?

Я нашел ее в базовом APEX workbook:
[url]http://www.salesforce.com/us/developer/docs/apex_workbook/Content/apex_govlimits_overview.htm[/url]
в самом низу.

но ни разу ее не использовал. Как и батч.

Так что вопрос остается: когда использовать такой подход - цикл-обертка выкверивающий пачками по 200 и подающие эти пачки в работу или батч.

Ну как это первый раз видишь! А кто вам "мозг сломал" несколько месяцев назад этой схемой?

Всё! Старею :)

[quote]Ну как это первый раз видишь! А кто вам "мозг сломал" несколько месяцев назад этой схемой?[/quote]

Всё! Старею :)

Если вдруг комуто будет интересно, вот прикольная стаття
https://developer.salesforce.com/page/Apex_Code_Best_Practices

А что такое Security Scanner? Для чего он предназначен?

Если вдруг комуто будет интересно, вот прикольная стаття  :D 
[url]https://developer.salesforce.com/page/Apex_Code_Best_Practices[/url]

А что такое Security Scanner? Для чего он предназначен?