On 04/21/2012 03:58 PM, Hash wrote:
Dear Agavi Users,

I am looking for advice on the best approach to synchronisation of data 
entities with a 1:n relationship in a REST system.

[...]
3. The system performs some sort of synchronisation by loading all addresses 
for a person and then removes, updates or adds the records accordingly. However 
this seems to present a possible overhead when dealing with many associations.

Is there a more fundamentally better approach to designing this common scenario?

There isn't one, really, but your option 3 is less complicated and load-imposing than it seems. In a UI scenario where secondary entities such as addresses are associated directly with a primary entity, it is very likely that the secondaries are rather few - otherwise you would find it necessary to have a separate UI to manage them. The implementation then is quite simple. Submitted address records that do not have an ID field are new records. Those that do are existing ones, and you will be validating these IDs anyway, in order to ensure that the user isn't overwriting objects that do not belong to them. At this point, you can preload the IDs or bodies of the addresses associated with the person object being edited, and through simple logic e.g. array_diff() determine the IDs that were deleted. The remainder of records are those that need updating, and you can either refresh them all directly, or hash previous and current versions and only update those where the hashes differ (in which case you might want to load the entire bodies of related records into the cache at validation stage).

Bear in mind that overall, such update operations will be more seldom than any others in most cases. The performance impact is negligible, if any.

Some ORMs have built-in tools to assist with this kind of problems.


_______________________________________________
users mailing list
[email protected]
http://lists.agavi.org/mailman/listinfo/users

Reply via email to