- 浏览: 288170 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
langzhe:
Mac 下用 sudo cpan Template,依然不能 ...
第一次 使用 tsung -
langzhe:
<server host='127.0.0.1' por ...
ejabberd/tsung 做压力测试万万不可忽视测试工具问题 -
dlliwei:
jabberd_register.xml 内容如下(我的ser ...
ejabberd/tsung 做压力测试万万不可忽视测试工具问题 -
dlliwei:
你好,我安装tsung后执行命令: tsung -f jabb ...
ejabberd/tsung 做压力测试万万不可忽视测试工具问题 -
bit1129:
这么复杂的一个东西,一句话说完了?
keepalive
前提:
mnesia 一张表 privacy
mysql 三张表privacy_list privacy_list_data privacy_default_list
目标:
服务start加载mysql 三个表的数据到mnesia privacy表中
分析分现 ,mysql 的三个表是通过username name id 相互关联起来的,mnesia就是一个结构表
可能习惯了关系数据库我首先想到,关联查询。但发现操mnesia似乎不容易,组合数存在重复的操作。早晚都要遍历干脆 分别从mysql中把表读出来放在内存中,通过erlang的list操作得了,还能顺便写进mnesia中。
代码片段
onload_table(Host) -> ?DEBUG("In ~p module ~p onload data from mysql Host ~p ~n", [?MODULE, ?LINE, Host]), odbc_queries:sql_get_privacy_list_default(Host), PrivacyListDefault = case catch odbc_queries:sql_get_privacy_list_default(Host) of {selected, ["username", "name"], []} ->[]; {selected, ["username", "name"], PrivacyListDefault1} -> PrivacyListDefault1 end, PrivacyListData = case catch odbc_queries:sql_get_privacy_list_data(Host) of {selected, ["id", "t", "value", "action", "ord", "match_all", "match_iq", "match_message", "match_presence_in", "match_presence_out"], []} ->[]; {selected, ["id", "t", "value", "action", "ord", "match_all", "match_iq", "match_message", "match_presence_in", "match_presence_out"], RItems} -> Items = lists:map(fun raw_to_item_with_id/1, RItems), Items end, case catch odbc_queries:sql_get_privacy_list(Host) of {selected, ["username", "name", "id"], []} -> []; {selected, ["username", "name", "id"], PrivacyList} -> assemble_data(PrivacyListDefault, PrivacyList, PrivacyListData, [],Host) end. assemble_data(DList, [P | PList], PLData, Res,Host)-> case P of {UserName, ListName, Id} -> Default = case [{K, V} || {K, V} <- DList, K =:= UserName] of [] -> none; [{UserName, ListName}] -> ListName; _ -> none end, Test = [{listitem, Type, Value, Action, Order, All, Iq, Message, In, Out} ||{Kid, {listitem, Type, Value, Action, Order, All, Iq, Message, In, Out}} <- PLData, Kid =:= Id], ListItems = %case [{listitem, Type, Value, Action, Order, All, Iq, Message, In, Out} % || {listitem, Type, Value, Action, Order, All, Iq, Message, In, Out} % <- PLData, Order =:= Id] of case [ListItem || {Kid, #listitem{}=ListItem} <- PLData, Kid =:= Id] of ListItems1 when is_list(ListItems1)-> ListItems1; [] -> []; _ -> [] end, Privacy = #privacy{us = {UserName, Host}, default = Default, lists = ListItems}, mnesia:dirty_write(Privacy), assemble_data(DList, PList, PLData, Res,Host); _ -> assemble_data(DList, PList, PLData, Res,Host) end; assemble_data(_DList, [], _PLData, Res,_Host)-> Res.
mnesia 一张表
-record(privacy, {us,
default = none,
lists = []}).
Mysql 三张表..
mysql> describe privacy_list_data;
+--------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------+------+-----+---------+-------+
| id | bigint(20) | YES | MUL | NULL | |
| t | char(1) | NO | | NULL | |
| value | text | NO | | NULL | |
| action | char(1) | NO | | NULL | |
| ord | decimal(10,0) | NO | | NULL | |
| match_all | tinyint(1) | NO | | NULL | |
| match_iq | tinyint(1) | NO | | NULL | |
| match_message | tinyint(1) | NO | | NULL | |
| match_presence_in | tinyint(1) | NO | | NULL | |
| match_presence_out | tinyint(1) | NO | | NULL | |
+--------------------+---------------+------+-----+---------+-------+
10 rows in set (0.52 sec)
mysql> select * from privacy_list;
+--------------------+---------+----+---------------------+
| username | name | id | created_at |
+--------------------+---------+----+---------------------+
| server_test_user_2 | newlist | 1 | 2011-03-23 10:53:51 |
| server_test_user_3 | newlist | 2 | 2011-03-23 11:07:57 |
| server_test_user_1 | newlist | 3 | 2011-03-23 11:08:29 |
+--------------------+---------+----+---------------------+
3 rows in set (0.10 sec)
mysql> select * from privacy_default_list;
+--------------------+---------+
| username | name |
+--------------------+---------+
| server_test_user_1 | newlist |
| server_test_user_2 | newlist |
| server_test_user_3 | newlist |
+--------------------+---------+
3 rows in set (0.00 sec)
发表评论
-
ejabberd/riak
2012-06-15 15:50 1138今天ubuntu下编译带riak的ejabberd出现一 ... -
ejabberd 三个没有弄明白的疑问
2012-06-08 17:32 14541> 1794 ... -
ejabberd presence 以前忽略的地方
2012-06-06 17:40 957session_established2 -------& ... -
configure: error: Could not find development files of Expat library
2011-12-28 16:56 3923在64位centos安装ejabberd ./con ... -
ejabberd/tsung 做压力测试万万不可忽视测试工具问题
2011-09-22 18:03 3583这两天 用tsung测试ejabberd服务器。 2万用户在 ... -
ejaberd_s2s presence bug
2011-08-31 21:27 821presence_broadcast_first ... -
erlang数据转换成 xml
2011-06-21 11:57 106519 Content= 20 ... -
ejabberd_c2s wait_for_stream 匹配
2011-06-13 15:45 777wait_for_stream 匹配 1、closed 2 ... -
mysql 与 mnesia同步
2011-04-12 11:46 12091、mysql --------------操作成功-- ... -
ejabberd subscribe订阅后出席 available
2011-04-08 09:14 849ejabberd_c2s roster_change 获取 ... -
list 判断
2011-04-07 11:19 1028L case L of [] -> o ... -
ejabberd:route去向
2011-04-02 15:27 1375ejabberd_local在init中注册了一个服务,pid ... -
ejabberd 存储离线消息 判断用户密码是否为空
2011-03-29 17:02 3359今天对ejabberd服务器做了一个小小的测试,发现后台抛出 ... -
ejabberd-215修正214版本timeout超时
2011-03-28 17:06 796ejabberd-215修正214版本timeout超时 我 ... -
ejabberd中mod_privacy_odbc.erl实现没有完全遵循xmpp协议
2011-03-17 17:14 1113修改privacy 利用推送 方式 更新pr ... -
采用message消息 privacy list check_packet
2011-03-11 11:26 954采用message消息 privacy list ... -
ejabberd-xml
2011-03-10 10:58 874过滤 非法xml数据 remove_cdata( ... -
发布与订阅 publish-subscribe
2011-02-24 13:43 970基本操作 5. Entity Use Cases ... -
ejabberd修改get_roster方法使其能获的组用户
2011-01-07 17:47 1080与一个网友的聊天,虚拟机重装了,前面的聊天丢失了 上 ... -
ejabberd_listener:247) : (#Port<0.3947>) Failed TCP accept: enfile
2010-12-22 15:16 1572=INFO REPORT==== 2010-12-22 ...
相关推荐
3. 表模式:Mnesia支持多种表类型,如简单记录(flat files)、行链接表(linked-in disk tables)和内存表(RAM tables)。这些不同的表类型可以根据性能和持久性需求进行选择。 4. 查询语言:Mnesia提供了一个...
- **本地内容表**:一种特殊类型的数据表,仅存在于单个节点上。 - **无盘节点**:支持无需硬盘即可运行的节点,适用于内存敏感的环境。 - **模式管理**:提供对数据库模式的高级管理功能。 - **Mnesia事件处理*...
Mnesia的系统信息部分涵盖了数据库配置数据、内核转储、表转储、检查点、文件操作以及在启动时加载表等。Mnesia还具备从通信失败中恢复、事务恢复、备份、回滚和灾难恢复等功能。 除此之外,Mnesia支持与SNMP(简单...
- **数据模型**:Mnesia 支持两种主要的数据模型:*正交表(Table)* 和 *活动数据表(Active Data Table, ADT)*。正交表用于存储静态数据,而ADT则用于动态数据,支持实时更新和查询。 - **启动 Mnesia**:启动...
Mnesia 是一个分布式数据库管理系统,它是 Erlang 语言环境的一部分,专门设计用于在分布式系统中存储和查询数据。随着业务需求的增长,单个 Mnesia 表的大小和性能可能会成为瓶颈。为了解决这个问题,Mnesia 提供了...
6.6.在启动时加载表 6.7.从通信失败中恢复 6.8.事务的恢复 6.9.备份、回滚以及灾难恢复 7.Mnsia.与.SNMP.的结合 7.1.结合.Mnesia.与.SNMP 8.附录.A:Mnesia.错误信息 8.1.Mnesia.中的错误 9.附录.B:...
- **数据库模式动态重配置**:可以在运行时修改数据库模式,包括添加或删除表、更改表结构等。 - **表属性**:表可以被定义为具有不同的属性,例如位置(Location)、复制(Replication)和持久化(Persistence)。 ...
• 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, ...
7. **安全性**:Mnesia通过权限管理机制确保数据的安全性和完整性,防止未经授权的访问或修改。 8. **灵活性**:Mnesia支持多种存储引擎,包括内存、磁盘和复制等,可以根据不同的应用场景选择最合适的存储方式。 ...
- 为了提高可用性和性能,Mnesia 允许将数据复制到多个节点上,并支持数据分片,即把数据分布到不同的物理节点上,以实现负载均衡和扩展性。 **3. 查询语言** - Mnesia 提供了一种基于SQL的查询语言,称为QL,它...
6.6 在启动时加载表 . . .. . .. . .. . 67 6.7 从通信失败中恢复 . . .. . .. . . .. . 68 6.8 事务的恢复 . . .. . .. . . .. . 68 6.9 备份、回滚以及灾难恢复 . . .. . .. . . .. . 69 7 Mnsia 与 SNMP 的...
通过《ets数据结构总结1.txt》和《ets数据结构总结2-Mnesia.txt》,你可以深入了解ETS的各类数据结构及其在连接外部数据库(如《ets数据结构总结3-连接外部数据库.txt》中提到的MySQL)时的应用场景和策略。...
- **高性能的数据处理能力**:通过紧密集成Erlang语言特性,Mnesia能够在保证高吞吐量的同时,提供低延迟的数据访问能力。 #### 四、Mnesia的独特之处 与其他传统的数据库管理系统相比,Mnesia具有以下几个显著的...
Mnesia支持两种数据类型:表和记录。表类似于关系数据库中的表格,而记录则类似于结构化的数据对象。此外,Mnesia还提供了一些特定的数据模式,如SET、Bag和Ordered Set,以适应不同的数据访问模式。 5. **事务**...
Mnesia_ext是Mnesia的一个扩展,它允许添加自定义的数据存储后端。这个项目可能涉及在Mnesia和PostgreSQL之间建立桥梁,使得Erlang应用能够利用PostgreSQL的强大功能,同时保持Mnesia的分布式事务和实时性。 **描述...
ejabberd-XMPP和Web聊天 ... 设置erlang节点: (解决方案,更改mnesia主机名)。 绑定到端口12322的管理控制台-使用SSL。 Speeqe(网络聊天应用程序)配置: 从上游源代码安装到/ var / www / django / spe
您的使用数据库的客户端可能需要一些代码更改才能调用cachet API,而不是mnesia (在某些情况下,只需在代码中替换模块名称)即可。 cachet将在RAM表或DISC表中调度请求。 用法 cachet可用于解决以下问题: mnesia...