Welcome to Citizendium - the Citizens' Compendium!

See something needing your input? Click here to Join us in providing quality, expert-guided information to the public for free!

Wednesday, November 14: November 2012 Monthly Donor Day. - Donate here - Monthly Donor Honor Roll

Erlang (programming language)/Tutorials/ETS

From Citizendium, the Citizens' Compendium

Jump to: navigation, search
This article is developing and not approved.
Main Article
Talk
Related Articles  [?]
Bibliography  [?]
External Links  [?]
Tutorials [?]
 
A tutorial relating to the topic of Erlang (programming language).

ETS local data storage

ETS is the erlang table storage system, which provides hash storage and access functions. ETS data is stored in a process as long as it is running. Here is a sample of how to use some simple functions in ETS

Sample program: test_ets.erl

-module(test_ets).
-compile(export_all).

start() -> start( mouse ).

start( Animal ) ->
	Kingdom = ets:new( 'magic',  [] ),
	% note: table is not square
	populate( Kingdom, [{micky,mouse}, {mini,mouse}, {goofy}] ),
	Member = ets:member( Kingdom, micky ),
	io:format( " member ~w ~n ", [ Member ] ),
	show_next_key( Kingdom, micky ),
	find_animal( Kingdom, Animal ).
	
show_next_key( _Kingdom, '$end_of_table' ) -> done;
show_next_key( Kingdom,  Key) ->
	Next = ets:next( Kingdom, Key ),
	io:format( " next ~w ~n ", [ Next ] ),
	show_next_key( Kingdom, Next ).

populate( _Kingdom, [] ) -> {done,start};
populate( Kingdom, [H | T] ) ->
		ets:insert( Kingdom, H ),
		populate( Kingdom, T ).
	
find_animal( Kingdom, Animal ) ->
	ets:match( Kingdom, { '$1', Animal } ).
% ==============
% sample output
% ==============
% 53> test_ets:start().
% member true 
%  next mini 
%  next goofy 
%  next '$end_of_table' 
%  [[mini],[micky]]

Advanced options

There are a number of options for ets data.

Data structure options include: set, ordered set, bag, and duplicate bag. A set has only unique keys and values. A sorted version of set exists. A bag can have duplicate keys. A duplicate bag can have duplicate keys and values.

set           [{zod, alice},{smith, joe}]
ordered set   [{smith, joe},{zod, alice}]
bag           [{smith, joe},{smith, ann}]
duplicate bag [{smith, joe},{smith, joe]]

Access options include: private, protected, and public. Private ets data is limited to the owning process. Protected ets tables are readable by other processes. Public ets tables have read and write access by other processes.

The options are passed in the List_of_options.

ets:new( 'magic', List_of_options)

An empty List_of_options leaves the default values active:

[set, protected, {keypos,1}]
Views
Personal tools