[erlang-questions] Key-value stores and value part

Anthony Molinaro <>
Sat Feb 25 21:02:20 CET 2012


Also, if it's not clear, version1 and version2 could be records which you can match in multiple clauses.

-Anthony

On Feb 25, 2012, at 8:24 AM, Jesper Louis Andersen <> wrote:

> On 2/25/12 3:37 AM, Vinayak Pawar wrote:
>> 
>> Question: is it possible to store values in KV store so that I don't have to update the KV store whenever there is change in tuple structure? store values in JSON form?
>> 
> The "Trick" is to version your values. That is, given data
> 
> {E1, E2}
> 
> you build a tagged variant:
> 
> {'version1', {E1, E2}}
> 
> Now when you need to alter the structure, you change the version tag:
> 
> {'version2', {E1, E2, E3}}
> 
> and henceforth, when you load the data from the underlying store, you define a function that is akin to a code_change/3 function in a gen_server:
> 
> data_change({'version1', {E1, E2}}) ->
>  produce_version2_structure_here;
> data_change({'version2', {E1, E2, E3}}) ->
>  {E1, E2, E3].
> 
> This means you now factorize every load of your data through data_change/1 and you always store data in the newest version you know about. This means you can lazily update your data as you go along processing them. You can also force a persist in the new version right away so subsequent reads will get the new version.
> 
> This is not a new idea. To a certain extent this is what Facebook does with their data as they have too much in their store to be able to convert all of it. It also means you can do database changes easily: First make your erlang code cope with the new format. Then gradually change the data store to the new format.
> 
> It takes some more work, but this is one way to do it.
> 
> -- 
> Jesper Louis Andersen
>  Erlang Solutions Ltd., Copenhagen, DK
> 
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions



More information about the erlang-questions mailing list