功能:数据实时写入缓存,定时同步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};
分享到:
相关推荐
Mnesia的设计理念是与Erlang的并发和分布式特性紧密结合,使得它在处理大量并发事务和在网络节点之间同步数据时表现出色。以下是对Mnesia关键特性和功能的深入探讨: 1. 分布式能力:Mnesia可以跨多个Erlang节点...
Mnesia 支持数据的自动复制,可以在集群中的多个节点之间同步数据,提高系统的可用性和容错性。当节点发生故障时,Mnesia 能够自动恢复,并从其他节点获取丢失的数据。 7. **性能和优化** 由于Mnesia是为Erlang...
• 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支持...
- 分布式缓存:用于加速数据访问和减少主数据库的负载。 - 游戏服务器:处理大量玩家的在线状态和游戏数据。 #### 结论 Mnesia作为一款专为电信级应用设计的分布式数据库管理系统,其独特的分布式架构、高容错性和...
Mnesia 是一个分布式数据库管理系统,它是 Erlang 语言环境的一部分,专门设计用于在分布式系统中存储和查询数据。随着业务需求的增长,单个 Mnesia 表的大小和性能可能会成为瓶颈。为了解决这个问题,Mnesia 提供了...
- **分布式数据**:由于其电信应用背景,Mnesia支持跨多个节点分布数据,这有助于提高容错能力和扩展性。 - **高容错性**:Mnesia具有内置的容错机制,能够在节点故障时继续运行。 - **动态重配置**:即使在运行时也...
5. 并发事务执行:Mnesia能够保证多个事务并发执行,并由数据库管理系统同步执行,确保不会有两个进程同时对同一数据进行操作,从而避免了数据冲突和不一致性。 Mnesia的其他特性还包括索引、分布和容错、表分片、...
- 为了提高可用性和性能,Mnesia 允许将数据复制到多个节点上,并支持数据分片,即把数据分布到不同的物理节点上,以实现负载均衡和扩展性。 **3. 查询语言** - Mnesia 提供了一种基于SQL的查询语言,称为QL,它...
1.2.Mnesia.数据库管理系统(DBMS 2、开始.Mnesia 2.1.首次启动.Mnesia 2.2.一个示例 3、构建.Mnesia.数据库 3.1.定义模式 3.2.数据模型 3.3.启动.Mnesia 3.4.创建新表 4、事务和其他上下文存取 ...
Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时特性的Erlang应用。 目 录 1 、介绍 . . .. . .. . . .. . 4 1.1 关于 Mnesia . . .. . .. . . .. . 4 1.2 Mnesia ...
2. **复杂的数据管理需求**:电信系统处理大量的数据,并且这些数据经常需要跨多个节点进行同步。 3. **多样化的业务需求**:电信应用程序需要同时满足多种不同的业务需求,这往往超出了传统DBMS的功能范畴。 ...
5. **分布式系统设计**:讨论如何在Erlang和PostgreSQL之间构建分布式系统,包括数据同步,故障恢复,以及性能优化。 6. **概念验证(Proof of Concept, PoC)**:PoC是验证新技术或解决方案可行性的一种方法,了解...
Mnesia的设计理念是分布式,这意味着它可以在多个节点之间同步数据,允许在集群中的不同服务器上进行数据读写。这种特性使得Mnesia在构建分布式系统时非常有用,特别是在需要高可用性和容错性的场景下。 2. **实时...
Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。下面的内容将着重说明 如何做 Mnesia ...
[WIP]香气 cachet的健忘症。 前言 Mnesia数据库对于您的可用内存而言开始变得太大了? 对于ram_copies和disc_copies ,整个表都保留... mnesia数据库,其中一些数据需要快速访问,而许多数据则需要通过慢速访问来保存
通过《ets数据结构总结1.txt》和《ets数据结构总结2-Mnesia.txt》,你可以深入了解ETS的各类数据结构及其在连接外部数据库(如《ets数据结构总结3-连接外部数据库.txt》中提到的MySQL)时的应用场景和策略。...