首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

数据同步后 剔除mnesia缓存数据

2012-11-08 
数据同步后 删除mnesia缓存数据功能:数据实时写入缓存,定时同步mnesia缓存数据到DB并删除已同步的缓存数据

数据同步后 删除mnesia缓存数据
功能:数据实时写入缓存,定时同步mnesia缓存数据到DB并删除已同步的缓存数据(不再使用)。方法:1、哥们推荐 缓存如果用redis的话可以利用它的队列实现此功能2、利用热代码替换原理还有个方法,更新程序,把新的log写入新的表里,然后再开始操作老表,用两个表交替进行3、利用dump_tables,就是说,能备份一堆表的数据到磁盘上,当节点再次启动的时候,这些数据就作为这些ramcopis的表的数据被恢复出来,他跟disc_copies的差别就是,这个备份动作是程序指定的,disc_copies是实时的? ? ? ?4、利用?mnesia:dirty_next(tablename,Key),dirty_delete(Key),尾递归(NextKey)5、因为想到用 Key 删除。所以直接用all_keys 方法读取即可。在查询所有记录时用read锁即可保证数据一致性。? ? 实现方式如下:

201 handle_info({writing_db}, State) ->202     ?DEBUG("In ~p on ~p line handle_info function start ~n",[?MODULE, ?LINE]),203     F = fun() ->204             Data = mnesia:match_object(langxwevent, {langxwevent,'_','_', '_', '_','_','_','_'}, read),205             Keys = mnesia:all_keys(langxwevent),206             {Data, Keys}207         end,208     case mnesia:transaction(F) of209          {aborted, Reason} ->210             ?DEBUG("In ~p on ~p line handle_info function Reason=~p ~n",[?MODULE, ?LINE, Reason]);211          {atomic,{[],[]}} -> 212             ?DEBUG("In ~p on ~p line handle_info function [] ~n",[?MODULE, ?LINE]),213             [];214          {atomic,{L,Keys}} ->215             ?DEBUG("In ~p on ~p line handle_info function L= ~p ..~n Kyes=~p..~n",[?MODULE, ?LINE , L, Keys]),216             writing_db(L),217             ?DEBUG("In ~p on ~p line handle_info function delete_data L= ~p ..~n Kyes=~p..~n",[?MODULE, ?LINE , L, Keys]),218             Fun = fun(Key) ->219                     ?DEBUG("In ~p on ~p line handle_info function Key= ~p ~n",[?MODULE, ?LINE , Key]),220                     mnesia:dirty_delete(langxwevent,Key)221                 end,222             ?DEBUG("In ~p on ~p line handle_info function Keys= ~p ~n",[?MODULE, ?LINE , Keys]),223             lists:foreach(Fun, Keys)224     end,225     timer:send_after(5000, self(), {writing_db}), 226     {noreply, State};
?

热点排行