Does FME process features on an individual basis or as a group - How might this affect my translation process
From fmepedia
| To help you forward this info a TinyURL (http://tinyurl.com/) has been defined. The URL for this page can be quoted as: http://tinyurl.com/okwm7 |
Q) Does FME process features on an individual basis or as a group? How might this affect my translation process?
A) By default FME processes features on an individual basis; that is each feature is processed separately within each transformer before being passed on to the next. This is because most transformers work on Feature-Based Restructuring where the processing of one feature does not affect the next. Length measurement is one example of this; measuring the length of a line doesn't affect the length of the next (FME doesn't work at the quantum level).
However, some transformers work on Group-Based Restructuring where the processing of one feature DOES affect the next. Change Detection is one example of this; you can't detect whether a feature has changed unless you compare it against every other feature.
One consequence of group based processing is a hit on the available memory. If the process involves every feature in the dataset they must all be held in memory whilst that process is carried out, as opposed to a feature-based process which can read a feature into memory and release it to move onto the next. The Sorter transformer is a good example of the group-processing type of function.
A second consequence is that some transformers will give different results depending on how features are being processed. For example, a GlobalVariableSetter / GlobalVariableRetriever combination may not give the expected results if you don't consider how features are being processed (the first feature through a GlobalVariableSetter will go straight on through the GlobalVariableRetriever and retrieve the value it set itself - but if you insert a Sorter transformer between to hold up the features then the last feature will pass the GVSetter before the first passes the GVRetriever thus retrieving a different value) - Confused? Check out the attached workspace.
