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需要确定某个记录属于哪个片段时开始。它通常开始于read
,write
和delete
。
match_spec_to_frag_numbers(State, MatchSpec) -> FragNums | abort(Reason)
类型
只要Mnesia需要确定需要为MatchSpec搜索哪些片段,就会调用此函数。 它通常由select和match_object调用。
另见
mnesia(3)