Erlang comes with numerous data structures ranging from built-in lists, tuples, records, and (recently) maps to standard lib offerings such as orddict, dict, gbtrees, sets, orddsets, queue, and array. Likewise, use cases that need a concurrent data structure can use ETS in various ways as a concurrent hash map, concurrent ordered tree, or even a set of concurrent counters.
While these built-in offerings are often adequate, anyone who has tried to build high performance Erlang system often runs into performance challenges with these existing offerings. Often times, these systems move to using external systems or custom native code (via NIFs) to meet the performance demands.
This talk presents on-going work to build a new set of high performance data structures for Erlang, including both single process data structures as well as various concurrent data structures.
The primary goal of this work is to provide data structures that have good performance, are memory-efficient, and play well with the Erlang scheduler and therefore enable more code to be written in Erlang rather than resorting to native code or external systems/libraries.
Talk objectives:
After this talk, attendees should have an understanding the performance challenges of existing Erlang data structures, insight into an approach to building high performance Erlang code/data structures, as well as familiarity with the data structures that are presented in this talk and how they could be used in current/future Erlang applications;
Target audience:
- Erlang/Elixir developers of all skill levels who are interested in performance, concurrency, and/or data structures;
Slides
Joseph Blomstedt is a Principal Engineer at Basho and has worked on nearly all aspects of the Riak distributed database since joining in 2011. Most recently, Joe was the lead developer on the riak_ensemble project that provides a paxos-based framework for building scalable, consistent systems in Erlang. Joe happily resides in Seattle, WA and enjoys the city's vibrant and growing Erlang community. Twitter: @jtuple Github: jtuple