`
langzhe
  • 浏览: 286775 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数据同步后 删除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) of
209          {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};
 
0
0
分享到:
评论

相关推荐

    Mnesia用户手册.zip

    Mnesia的设计理念是与Erlang的并发和分布式特性紧密结合,使得它在处理大量并发事务和在网络节点之间同步数据时表现出色。以下是对Mnesia关键特性和功能的深入探讨: 1. 分布式能力:Mnesia可以跨多个Erlang节点...

    Mnesia用户手册(docx版)

    Mnesia 支持数据的自动复制,可以在集群中的多个节点之间同步数据,提高系统的可用性和容错性。当节点发生故障时,Mnesia 能够自动恢复,并从其他节点获取丢失的数据。 7. **性能和优化** 由于Mnesia是为Erlang...

    Mnesia User's Guide

    • Mnesia provides an introduction to Mnesia. • Getting Started introduces Mnesia with an example database. Examples are included how to start an Erlang session, specify a Mnesia database directory, ...

    mnesia数据库文档

    - 分布式缓存:用于加速数据访问和减少主数据库的负载。 - 游戏服务器:处理大量玩家的在线状态和游戏数据。 #### 结论 Mnesia作为一款专为电信级应用设计的分布式数据库管理系统,其独特的分布式架构、高容错性和...

    Mnesia table fragmentation 过程及算法分析

    Mnesia 是一个分布式数据库管理系统,它是 Erlang 语言环境的一部分,专门设计用于在分布式系统中存储和查询数据。随着业务需求的增长,单个 Mnesia 表的大小和性能可能会成为瓶颈。为了解决这个问题,Mnesia 提供了...

    Mnesia 用户手册中文版 pdf

    5. 并发事务执行:Mnesia能够保证多个事务并发执行,并由数据库管理系统同步执行,确保不会有两个进程同时对同一数据进行操作,从而避免了数据冲突和不一致性。 Mnesia的其他特性还包括索引、分布和容错、表分片、...

    Erlang Mnesia

    - 为了提高可用性和性能,Mnesia 允许将数据复制到多个节点上,并支持数据分片,即把数据分布到不同的物理节点上,以实现负载均衡和扩展性。 **3. 查询语言** - Mnesia 提供了一种基于SQL的查询语言,称为QL,它...

    erlang——Mnesia用户手册.pdf

    1.2.Mnesia.数据库管理系统(DBMS 2、开始.Mnesia 2.1.首次启动.Mnesia 2.2.一个示例 3、构建.Mnesia.数据库 3.1.定义模式 3.2.数据模型 3.3.启动.Mnesia 3.4.创建新表 4、事务和其他上下文存取 ...

    Mnesia用户手册 4.4.10版.rar

    Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时特性的Erlang应用。 目 录 1 、介绍 . . .. . .. . . .. . 4 1.1 关于 Mnesia . . .. . .. . . .. . 4 1.2 Mnesia ...

    Mnesia Overview

    2. **复杂的数据管理需求**:电信系统处理大量的数据,并且这些数据经常需要跨多个节点进行同步。 3. **多样化的业务需求**:电信应用程序需要同时满足多种不同的业务需求,这往往超出了传统DBMS的功能范畴。 ...

    mnesia_pg:Postgres后端通过mnesia_ext到Mnesia

    5. **分布式系统设计**:讨论如何在Erlang和PostgreSQL之间构建分布式系统,包括数据同步,故障恢复,以及性能优化。 6. **概念验证(Proof of Concept, PoC)**:PoC是验证新技术或解决方案可行性的一种方法,了解...

    备忘录:Mnesia分布式数据库的简单+强大接口

    Mnesia的设计理念是分布式,这意味着它可以在多个节点之间同步数据,允许在集群中的不同服务器上进行数据读写。这种特性使得Mnesia在构建分布式系统时非常有用,特别是在需要高可用性和容错性的场景下。 2. **实时...

    erlang mnesia 数据库基本查询

    Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。下面的内容将着重说明 如何做 Mnesia ...

    cachet:Mnesia的内存光盘分派器

    [WIP]香气 cachet的健忘症。 前言 Mnesia数据库对于您的可用内存而言开始变得太大了? 对于ram_copies和disc_copies ,整个表都保留... mnesia数据库,其中一些数据需要快速访问,而许多数据则需要通过慢速访问来保存

    Erlang6大数据存储方式总结

    通过《ets数据结构总结1.txt》和《ets数据结构总结2-Mnesia.txt》,你可以深入了解ETS的各类数据结构及其在连接外部数据库(如《ets数据结构总结3-连接外部数据库.txt》中提到的MySQL)时的应用场景和策略。...

Global site tag (gtag.js) - Google Analytics