Народ расскажите какие методы API вы используете для того чтобы создать на орге пачку записей.
Не буду выкладывать пока те способы что я нашел, хочу сперва услышать про реальный опыт.
Народ расскажите какие методы API вы используете для того чтобы создать на орге пачку записей. Не буду выкладывать пока те способы что я нашел, хочу сперва услышать про реальный опыт.
BulkApi
RestApi
ExecuteAnonimous
[quote="Dmitry Shnyrev"]Народ расскажите какие методы API вы используете для того чтобы создать на орге пачку записей. Не буду выкладывать пока те способы что я нашел, хочу сперва услышать про реальный опыт.[/quote] BulkApi RestApi ExecuteAnonimous
Ок.
С Bulk API все понятно - работает асинхронно, лишний оверхед
Rest API
я нашел https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_composite_sobject_tree_flat.htm
Но там лимит 200 записей за один запрос.
ExecuteAnonimous
Вот здесь про него тема
https://salesforce-developer.ru/forum/topic-execute-anonymous-chere-api
Ок. С Bulk API все понятно - работает асинхронно, лишний оверхед Rest API я нашел https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_composite_sobject_tree_flat.htm Но там лимит 200 записей за один запрос. ExecuteAnonimous Вот здесь про него тема https://salesforce-developer.ru/forum/topic-execute-anonymous-chere-api
Я к тому что мне например надо синхронно (не через Bulk API) залить 10k записей.
Это вообще можно сделать?
Я к тому что мне например надо синхронно (не через Bulk API) залить 10k записей. Это вообще можно сделать?
пачками по 200 заливай.
через execute anonymous все равно нужно будет дробить на части, ибо вылетишь за пределы cpu size и dml rows.
пачками по 200 заливай. через execute anonymous все равно нужно будет дробить на части, ибо вылетишь за пределы cpu size и dml rows.
На счет CPU time и DML rows пока сомневаюсь.
Десереализировать скажем 1k записей - одна команда, должно пройти быстро
DML rows у нас лимит в 10к.
Просто как то не сталкивался раньше и сейчас немного в прострации от того что нет варианта синхронно выполнить insert для 10k записей через API.
Но способ с execute anonymous все равно не дает покоя.
Скажем я хочу в одном запросе передать сам скрипт который мне десериализирует json в структуру данных и произведет insert + сами данные в виде json.
Я полагаю что есть вероятность упереться в размер самого запроса. Как к примеру remote action кушает 3mb. НО в 3mb можно запихнуть гораздо больше чем 200 записей и к тому же это могут быть записи для разных объектов, которые разберет сам скрипт.
Короче надо будет на досуге поэкспериментировать!
На счет CPU time и DML rows пока сомневаюсь. Десереализировать скажем 1k записей - одна команда, должно пройти быстро DML rows у нас лимит в 10к. Просто как то не сталкивался раньше и сейчас немного в прострации от того что нет варианта синхронно выполнить insert для 10k записей через API. Но способ с execute anonymous все равно не дает покоя. Скажем я хочу в одном запросе передать сам скрипт который мне десериализирует json в структуру данных и произведет insert + сами данные в виде json. Я полагаю что есть вероятность упереться в размер самого запроса. Как к примеру remote action кушает 3mb. НО в 3mb можно запихнуть гораздо больше чем 200 записей и к тому же это могут быть записи для разных объектов, которые разберет сам скрипт. Короче надо будет на досуге поэкспериментировать!
так в чем проблема загрузить чанками по 200 записей?
со стороны форса это число взялось не просто так, даже при инсерте 10к записей форс это дробит на чанки по 200 записей.
cpu лимит тратится не только на десериализацию, но и на сам инсерт, который может идти через триггеры, бп, и валидация.
так в чем проблема загрузить чанками по 200 записей? со стороны форса это число взялось не просто так, даже при инсерте 10к записей форс это дробит на чанки по 200 записей. cpu лимит тратится не только на десериализацию, но и на сам инсерт, который может идти через триггеры, бп, и валидация.
То что сам форс дробит это его проблемы.
в одну DML операцию можно запихнуть до 10k. А 1 dml операция это одна транзакция.
Чет не очень хочется заморачиваться с проверкой и откатом изменений при ошибке.
Если дробить по 200 то что тогда делать если за 499 запросе отвалится insert?
А мне надо либо все, либо ничего. - придется писать еще такой же скрипт который после неудачной загрузке мне все откатит (удалит).
То что сам форс дробит это его проблемы. в одну DML операцию можно запихнуть до 10k. А 1 dml операция это одна транзакция. Чет не очень хочется заморачиваться с проверкой и откатом изменений при ошибке. Если дробить по 200 то что тогда делать если за 499 запросе отвалится insert? А мне надо либо все, либо ничего. - придется писать еще такой же скрипт который после неудачной загрузке мне все откатит (удалит).
Чет wilder куда-то испарился. Тема 100% его и он должен был уже сталкиваться с этим вопросом
Не хочет делиться опытом?
Чет wilder куда-то испарился. Тема 100% его и он должен был уже сталкиваться с этим вопросом :D Не хочет делиться опытом?
Никуда не испарился Я это делаю через свой пакет. Мне обычно хватало 2000 записей для тестов. У меня не предусмотрен откат в случае не удачи. У меня просто все визуально отображается.
Никто не мешает сделать то же самое через execute anonimous и вернуть текстовый лог. Или даже сразу послать его на мыло.
[quote="Dmitry Shnyrev"]Чет wilder куда-то испарился. Тема 100% его и он должен был уже сталкиваться с этим вопросом :D Не хочет делиться опытом?[/quote] Никуда не испарился :) Я это делаю через свой пакет. Мне обычно хватало 2000 записей для тестов. У меня не предусмотрен откат в случае не удачи. У меня просто все визуально отображается. Никто не мешает сделать то же самое через execute anonimous и вернуть текстовый лог. Или даже сразу послать его на мыло.
а где может пригодиться синхронно залить 10к записей? Когда мне что то нужно залить в больших объёмах я всегда использую PHP toolkit, удобно можно какуюто предподготовку провести, отследить выполнилось ли, обработать ошибки, красота.
[quote="Dmitry Shnyrev"]Я к тому что мне например надо синхронно (не через Bulk API) залить 10k записей. Это вообще можно сделать?[/quote] а где может пригодиться синхронно залить 10к записей? Когда мне что то нужно залить в больших объёмах я всегда использую PHP toolkit, удобно можно какуюто предподготовку провести, отследить выполнилось ли, обработать ошибки, красота.
А PHP toolkit через что работает? Не через API?
Там же где и синхронно залить 201 или 1000 записей
[quote="ace"] объёмах я всегда использую PHP toolkit[/quote] А PHP toolkit через что работает? Не через API? [quote="ace"]а где может пригодиться синхронно залить 10к записей?[/quote] Там же где и синхронно залить 201 или 1000 записей
Bulk API
с детства нелюблю синхронную передачу данных, както это не аккуратненько, хотя сейчас это можно нормально организовывать.
[quote="Dmitry Shnyrev"] А PHP toolkit через что работает? Не через API?[/quote] Bulk API [quote="Dmitry Shnyrev"]Там же где и синхронно залить 201 или 1000 записей[/quote] с детства нелюблю синхронную передачу данных, както это не аккуратненько, хотя сейчас это можно нормально организовывать.
Ничего не имею против Bulk API
Просто я не использую сторонние toolkits, а предпочитаю напрямую использовать API.
Пока проще послать одну команду и получить ответ чем писать обертки над асинхронной обработкой загрузки.
Как бы данная тема не проблема - я уже скрипт запилил. Просто я почему-то был уверен что есть способ синхронной загрузки. А оказалось что и нет его! Столько разных API а тупо залить 201 запись одним запросом нельзя - как-то в голове трудно улеглось. Понятно что можно написать обработчик любой сложности и он будет не только заливать, но и одновременно проигрывать mp3. Но чет много оверхеда для простой операции.
[quote="ace"]Bulk API[/quote] Ничего не имею против Bulk API Просто я не использую сторонние toolkits, а предпочитаю напрямую использовать API. Пока проще послать одну команду и получить ответ чем писать обертки над асинхронной обработкой загрузки. Как бы данная тема не проблема - я уже скрипт запилил. Просто я почему-то был уверен что есть способ синхронной загрузки. А оказалось что и нет его! Столько разных API а тупо залить 201 запись одним запросом нельзя - как-то в голове трудно улеглось. Понятно что можно написать обработчик любой сложности и он будет не только заливать, но и одновременно проигрывать mp3. Но чет много оверхеда :D для простой операции.
кстати а магиическое число 200 кто-нибудь знает почему они выбрали именно его?
[quote="Dmitry Shnyrev"] Как бы данная тема не проблема - я уже скрипт запилил. Просто я почему-то был уверен что есть способ синхронной загрузки. А оказалось что и нет его! Столько разных API а тупо залить 201 запись одним запросом нельзя - как-то в голове трудно улеглось. Понятно что можно написать обработчик любой сложности и он будет не только заливать, но и одновременно проигрывать mp3. Но чет много оверхеда :D для простой операции.[/quote] кстати а магиическое число 200 кто-нибудь знает почему они выбрали именно его?
Ну через Exec Anon можно залить больше 200 записей, но все зависит от текущей логики на объекте.
Ну через Exec Anon можно залить больше 200 записей, но все зависит от текущей логики на объекте.
Да, это обсуждается в соседней ветке.
https://salesforce-developer.ru/forum/topic-execute-anonymous-chere-api
Да, это обсуждается в соседней ветке. https://salesforce-developer.ru/forum/topic-execute-anonymous-chere-api