Erlang 20

mnesia_frag_hash

mnesia_frag_hash

模块

mnesia_frag_hash

模块摘要

定义mnesia_frag_hash回调行为

描述

此模块为碎片表的用户定义散列函数定义回调行为。

mnesia_frag_hash与另一个一起指定选择哪个模块来实现特定分段表的行为frag_properties。该hash_module定义的模块名称。在hash_state定义了初始散列状态。

这个模块实现了动态哈希,这是一种哈希,当添加新的片段时,哈希会很好地增长。它非常适合可扩展的哈希表。

输出

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

类型

当使用mnesia:create_table / 2函数创建碎片表时,或者当正常(无碎片)表转换为mnesia:change_table_frag / 2碎片表时开始。

请注意,该函数add_frag/2作为表创建过程的一部分,对其他每个片段(编号1除外)都启动一次。

State的初始值。hash_statefrag_property...NewState存储在hash_state在其他frag_properties...

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

类型

为了更好地扩展,确保记录均匀地分布在所有的片段上,包括新的片段,这是一个好主意。

NewState作为hash_state存储在其他frag_properties中。

作为add_frag过程的一部分,Mnesia遍历与IterFrags数字对应的所有片段,并为每条记录启动key_to_frag_number(NewState,RecordKey)。 如果新片段与旧片段不同,则记录将移至新片段。

就像add_frag过程是模式事务的一部分,Mnesia获取受影响表的写锁。也就是说,两个对应于IterFrags以及相应的AdditionalLockFrags...

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

类型

NewState存储为hash_state在其他frag_properties...

作为del_frag过程的一部分,Mnesia遍历与IterFrags数字对应的所有片段,并为每条记录启动key_to_frag_number(NewState,RecordKey)。 如果新片段与旧片段不同,则记录将移至新片段。

注意,最后一个片段中的所有记录都必须移动到另一个片段中,因为整个片段被删除了。

就像del_frag过程是模式事务的一部分,Mnesia获取受影响表的写锁。也就是说,两个对应于IterFrags以及相应的AdditionalLockFrags...

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

类型

每当Mnesia需要确定某个记录属于哪个片段时开始。它通常开始于readwritedelete

match_spec_to_frag_numbers(State, MatchSpec) -> FragNums | abort(Reason)

类型

只要Mnesia需要确定需要为MatchSpec搜索哪些片段,就会调用此函数。 它通常由select和match_object调用。

另见

mnesia(3)