The calls for ProcessRecord (export destination) and GetNextRecord (import/export source) are synchronous calls from a single thread. Because records being processed could be interdependent on other records we do not process them concurrently (e.g. a constituent may need to be processed before a relationship record, etc.). If you have any specific questions or scenarios, let us know and we'll be glad to review.
over 4 years ago
Do you have a sense of approximately what rate ProcessRecord is called? I'm trying to determine if my implementation of it can use a simpler, but less performant API for the destination system, or if I will need to use the more complex (to call) but more performant one.
Never mind, as long as they aren't concurrent I should be fine. Thanks
about 4 years ago
Its difficult to put any numbers on the rate of the call. It is based on so many factors (e.g. the source of the data, the amount of interaction by the user, etc.). Generally we find it best practice (on the import side) to make asynchronous calls to get the data in batches so IOM can start processing quickly and we can keep the stack loaded with more data when needed. On the export side, it would be dependent on your destination system, but to accurately report on the success/failure of a record being processed would normally require that it be done one at a time and reported back to IOM on each call to ProcessRecord.