Perhaps you could use propolitors.
Suppose you saved some user profile.
User = [{name,"John"},{surname,"Dow"}]. store_profile(User).
Then after a couple of years you decided to expand the user profile with the age of the user.
User = [{name,"John"},{surname,"Dow"},{age,23}]. store_profile(User).
Now you need to get the user profile from DB
get_val(Key,Profile) -> V = lists:keyfind(Key,1,Profile), case V of {_,Val} -> Val; _ -> undefined end. User = get_profile(). UserName = get_val(name,User). UserAge = get_val(age,User).
If you get the user profile "version 2", you will get the actual age (23 in this particular case).
If you get the user profile “version 1” (“old”), you will get “undefined” as the age, and then you can update the profile and save it with a new value, so this will be the object of the “new version”.
Thus, the version conflict does not change.
This may not be the best way to do it, but in some cases it may be a solution.