[erlang-questions] maps or records?

Michael Truog <>
Sun Feb 28 02:17:17 CET 2016


On 02/27/2016 04:42 PM, Björn-Egil Dahlberg wrote:
> Whoa there ..
>
> I just want to point out that you shouldn't have record sizes of 
> upwards 100 elements. If the only thing you do is read them you are 
> fine but normally we do both reads and updates. I would say 50 is the 
> limit but even then you are pushing it. Above 30 I would consider 
> splitting the array into a tree.
Records are preprocessing syntax (sweet syntactic sugar) for tuples and 
I am just going based on my benchmarking of tuples.  I know tuples are 
generally ok for 100 elements and less (not trying to encourage making 
large records with tons of values).  I also know that record use can 
minimize tuple changes via 
http://erlang.org/doc/efficiency_guide/commoncaveats.html#id57442 which 
would not happen with small maps that are only using tuples (i.e., a map 
that is not larger than 32 elements, |MAP_SMALL_MAP_LIMIT).|

>
> I think records has there place. There is some overlap between maps 
> and records for sure and I think I agree with most of the things that 
> has already been said.
> The dialyzer support for maps could be stronger. It is pretty weak at 
> the moment. Data modeling with records is easier.
>
> I would consider using records within a module, if it's never changed 
> or upgraded and never leaks out to any other modules. Maybe between 
> modules within an application. Maybe. But I think you are better off 
> with maps in that case.
Yes, records can cause maintenance and dependency problems.  If the code 
needs to be tied to changes of a database or protocol, it might be worth 
it, but it depends on the situation.

>
> // Björn-Egil
>
>
> 2016-02-28 1:17 GMT+01:00 Michael Truog < 
> <mailto:>>:
>
>     On 02/26/2016 06:50 AM, Benoit Chesneau wrote:
>>     Hi all,
>>
>>     i tends these days to use maps instead of records, so you dont'
>>     have to include a file to retrieve the "schema" but I wonder if
>>     this is a good idea or not. Is there still some usage for records
>>     vs maps?
>>
>>     - benoît
>>
>>
>>     _______________________________________________
>>     erlang-questions mailing list
>>       <mailto:>
>>     http://erlang.org/mailman/listinfo/erlang-questions
>     Records allow you to specify type specification information, while
>     maps do not.  Records are basic and efficient with the number of
>     elements 100 or less, while maps are great for dynamic use that
>     doesn't depend on type specification information.  So, for process
>     state information, records provide more information when checking
>     dialyzer for problems.  Records can also provide more checking
>     with dialyzer when storing database or protocol data (two places
>     where types are generally important for development).
>
>     For dynamic key/value data, dict can use type specification
>     information while maps don't, so there can also be motivation to
>     use dicts instead of maps, even if only switching between the two
>     for running dialyzer.  maps are great for efficient key/value
>     access though.
>
>     _______________________________________________
>     erlang-questions mailing list
>      <mailto:>
>     http://erlang.org/mailman/listinfo/erlang-questions
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20160227/7d6f7bd3/attachment.html>


More information about the erlang-questions mailing list