mnesia_frag_hash(3)



mnesia_frag_hash(3erl)     Erlang Module Definition     mnesia_frag_hash(3erl)

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(3erl)

Ericsson AB                       mnesia 4.17           mnesia_frag_hash(3erl)

Man(1) output converted with man2html
list of all man pages