Hi Kyle,

Thank you for the detailed description of your goals and the problems
you have encountered. Some points I'd like to mention:

- A simple way to improve the performance of keyword updates is to
only send the information you wish to change.  So for instance if you
only want to change the bid on a keyword only send the adGroupId,
criteriaId, and bids fields.  Sending other fields that you aren't
changing can often lead to increased request time since those other
fields must also be processed and can sometimes trigger other
workflows.

- CONCURRENT_MODIFICATION errors can happen when you attempt to update
the same keyword in quick succession.  After you update a keyword it
may need to be re-approved, and the back end approval workflow can
sometimes try to modify a keyword at the same time you do.  For this
reason it is best to leave a few seconds before attempting to to make
another update to the same keyword.

- It is possible to retrieve the resulting IDs with the
BulkMutateJobService, by setting the resultPartIndex on the
BulkMutateJobSelector.  We have an example of this included with our
client libraries:

  
http://code.google.com/p/google-api-adwords-java/source/browse/trunk/examples/v200909/PerformBulkMutateJob.java#334

In general though the BMJS makes no guarantees that it will process
results any faster than the synchronous services, as that is not the
main goal of the service.  Under certain circumstances you may see
some improvement, but the service is best used for changes that aren't
as time-sensitive.

Best,
- Eric Koleda, AdWords API Team

On Jan 26, 2:51 pm, Kyle LeNeau <[email protected]> wrote:
> I have a process that maintains an Adwords campaign on behalf of a
> customer.  The process will either purchase new keywords, or update
> keywords (destination URL only) nightly.  The source of truth for what
> keywords to maintain is in a database on our end and a user/customer
> was the ability to insert new records into the table, thus triggering
> a purchase of a new keyword.
>
> When a new keyword is purchased the record that exists in my database
> is updated with the criterion id, adgroup id, campaign id, url,
> keywords and more.  I then use the URL later to determine if the
> keyword should be updated.  In the previous version of the API (v13) I
> was able to just update the keyword quickly and catch/handle any
> errors.  This happened very quickly; our small customer of 7000
> keywords would run and usually update 80% of the keywords in a little
> over an hour.  With the new API (v200909) it is extremely slow, the
> same 7000 keywords and 80% update is approaching the 6 hour mark and
> has only updated 1/3 of the total.
>
> This is a C# program and I am using the client library off of google
> code.  I have been debuging it all day and am getting a lot of
> Database.CONCURRENT_MODIFICATION errors and am only running on one
> thread.  While debugging I have noticed that the call to update/mutate
> a criterion is sometimes taking 30+ seconds to return, this was not
> the case in the last version.
>
> Which brings me to my main question about the Bulk Mutate Job.  Is
> there a way to pass along extra identifiers to the job/operation so
> that when it returns and the job is complete I can loop over the
> results and grab my database ID's (primary key) from the criterion to
> update my system accordingly?  If not, what are some alternatives to
> keeping two systems connected like this?  If this is not currently
> supported can it be a feature request, sometime we want or need to
> pass along our identifiers so we know what to do with it when it
> returns.
>
> Thanks for the help, Kyle.

-- 
You received this message because you are subscribed to the Google Groups 
"AdWords API Forum" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/adwords-api?hl=en.

Reply via email to