Erlang (programming language)/Tutorials/ETS: Difference between revisions

From Citizendium
Jump to navigation Jump to search
imported>Eric Evers
imported>Eric Evers
Line 47: Line 47:
  %  [[mini],[micky]]
  %  [[mini],[micky]]


Advanced options
==Advanced options==


There are a number of options for ets data.
There are a number of options for ets data.
Line 54: Line 54:
set, ordered set, bag, and duplicate bag.
set, ordered set, bag, and duplicate bag.
A set has only unique keys and values. An sorted version of set. A bag can have duplicate keys. A duplicate bag can have duplicate keys and values.
A set has only unique keys and values. An sorted version of set. 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:
Access options include:
private, protected, and public.
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.

Revision as of 08:32, 27 June 2008


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. An sorted version of set. 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.