Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
mnesia_frag_hash(3)	   Erlang Module Definition	   mnesia_frag_hash(3)

NAME
       mnesia_frag_hash	- Defines mnesia_frag_hash callback behavior

DESCRIPTION
       This module defines a callback behavior for user-defined	hash functions
       of fragmented tables.

       Which module that is selected to	implement the mnesia_frag_hash	behav-
       ior  for	 a  particular fragmented table	is specified together with the
       other frag_properties. The hash_module defines  the  module  name.  The
       hash_state defines the initial hash state.

       This module implements dynamic hashing, which is	a kind of hashing that
       grows nicely when new fragments are added. It is	well suited for	 scal-
       able hash tables.

EXPORTS
       init_state(Tab, State) -> NewState | abort(Reason)

	      Types:

		 Tab = atom()
		 State = term()
		 NewState = term()
		 Reason	= term()

	      Starts when a fragmented table is	created	with the function mne-
	      sia:create_table/2 or when a normal (unfragmented) table is con-
	      verted to	be a fragmented	table with mnesia:change_table_frag/2.

	      Notice that the function add_frag/2 is started one time for each
	      of the other fragments (except number 1) as a part of the	 table
	      creation procedure.

	      State is the initial value of the	hash_state frag_property. New-
	      State is stored as hash_state among the other frag_properties.

       add_frag(State)	->  {NewState,	 IterFrags,   AdditionalLockFrags}   |
       abort(Reason)

	      Types:

		 State = term()
		 NewState = term()
		 IterFrags = [integer()]
		 AdditionalLockFrags = [integer()]
		 Reason	= term()

	      To  scale	well, it is a good idea	to ensure that the records are
	      evenly distributed over all fragments, including the new one.

	      NewState is stored as hash_state among  the  other  frag_proper-
	      ties.

	      As  a  part  of the add_frag procedure, Mnesia iterates over all
	      fragments	corresponding to  the  IterFrags  numbers  and	starts
	      key_to_frag_number(NewState,RecordKey)  for  each	record.	If the
	      new fragment differs from	the old	fragment, the record is	 moved
	      to the new fragment.

	      As  the  add_frag	 procedure  is a part of a schema transaction,
	      Mnesia acquires write locks on the  affected  tables.  That  is,
	      both  the	 fragments corresponding to IterFrags and those	corre-
	      sponding to AdditionalLockFrags.

       del_frag(State)	->  {NewState,	 IterFrags,   AdditionalLockFrags}   |
       abort(Reason)

	      Types:

		 State = term()
		 NewState = term()
		 IterFrags = [integer()]
		 AdditionalLockFrags = [integer()]
		 Reason	= term()

	      NewState	is  stored  as hash_state among	the other frag_proper-
	      ties.

	      As a part	of the del_frag	procedure, Mnesia  iterates  over  all
	      fragments	 corresponding	to  the	 IterFrags  numbers and	starts
	      key_to_frag_number(NewState,RecordKey) for each record.  If  the
	      new  fragment differs from the old fragment, the record is moved
	      to the new fragment.

	      Notice that all records in the last fragment must	 be  moved  to
	      another fragment,	as the entire fragment is deleted.

	      As  the  del_frag	 procedure  is a part of a schema transaction,
	      Mnesia acquires write locks on the  affected  tables.  That  is,
	      both  the	 fragments corresponding to IterFrags and those	corre-
	      sponding to AdditionalLockFrags.

       key_to_frag_number(State, Key) -> FragNum | abort(Reason)

	      Types:

		 FragNum = integer()
		 Reason	= term()

	      Starts whenever Mnesia needs to determine	which fragment a  cer-
	      tain  record belongs to. It is typically started at read,	write,
	      and delete.

       match_spec_to_frag_numbers(State, MatchSpec) -> FragNums	 |  abort(Rea-
       son)

	      Types:

		 MatcSpec = ets_select_match_spec()
		 FragNums = [FragNum]
		 FragNum = integer()
		 Reason	= term()

	      This function is called whenever Mnesia needs to determine which
	      fragments	that need to be	searched for a MatchSpec. It is	 typi-
	      cally called by select and match_object.

SEE ALSO
       mnesia(3)

Ericsson AB			 mnesia	4.20.1		   mnesia_frag_hash(3)

NAME | DESCRIPTION | EXPORTS | SEE ALSO

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=mnesia_frag_hash&sektion=3&manpath=FreeBSD+13.1-RELEASE+and+Ports>

home | help