|Welcome to the Monastery|
in my homegrown solution i do this:
all data goes into _PROFILE into one of 3 structures: _text , _array , _hash
when i update an object, information goes into _SUBMITTED , into the same structure
i compare _SUBMITTED to _PROFILE. if a field is different, it gets tossed into an update clause
once the db commits, _SUBMITTED fields are copried to _PROFILE
i also cache/session all objects based on _PROFILE, not on the class. this way i can use multiple languages to handle the same objects , and get a bit more flexibility
re: loads a_ create a 'listing' class that just loads the info you want b_ load everything at once, store in memcached w/a timeout.