- 浏览: 278998 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1048今天ubuntu下编译带riak的ejabberd出现一 ... -
ejabberd 三个没有弄明白的疑问
2012-06-08 17:32 14091> 1794 ... -
ejabberd presence 以前忽略的地方
2012-06-06 17:40 883session_established2 -------& ... -
configure: error: Could not find development files of Expat library
2011-12-28 16:56 3851在64位centos安装ejabberd ./con ... -
ejabberd/tsung 做压力测试万万不可忽视测试工具问题
2011-09-22 18:03 3528这两天 用tsung测试ejabberd服务器。 2万用户在 ... -
ejaberd_s2s presence bug
2011-08-31 21:27 789presence_broadcast_first ... -
erlang数据转换成 xml
2011-06-21 11:57 101119 Content= 20 ... -
ejabberd_c2s wait_for_stream 匹配
2011-06-13 15:45 737wait_for_stream 匹配 1、closed 2 ... -
mysql 与 mnesia同步
2011-04-12 11:46 11741、mysql --------------操作成功-- ... -
ejabberd subscribe订阅后出席 available
2011-04-08 09:14 813ejabberd_c2s roster_change 获取 ... -
list 判断
2011-04-07 11:19 967L case L of [] -> o ... -
ejabberd:route去向
2011-04-02 15:27 1315ejabberd_local在init中注册了一个服务,pid ... -
ejabberd 存储离线消息 判断用户密码是否为空
2011-03-29 17:02 3317今天对ejabberd服务器做了一个小小的测试,发现后台抛出 ... -
ejabberd-215修正214版本timeout超时
2011-03-28 17:06 727ejabberd-215修正214版本timeout超时 我 ... -
ejabberd中mod_privacy_odbc.erl实现没有完全遵循xmpp协议
2011-03-17 17:14 1071修改privacy 利用推送 方式 更新pr ... -
采用message消息 privacy list check_packet
2011-03-11 11:26 913采用message消息 privacy list ... -
ejabberd-xml
2011-03-10 10:58 808过滤 非法xml数据 remove_cdata( ... -
发布与订阅 publish-subscribe
2011-02-24 13:43 929基本操作 5. Entity Use Cases ... -
ejabberd修改get_roster方法使其能获的组用户
2011-01-07 17:47 1012与一个网友的聊天,虚拟机重装了,前面的聊天丢失了 上 ... -
ejabberd_listener:247) : (#Port<0.3947>) Failed TCP accept: enfile
2010-12-22 15:16 1524=INFO REPORT==== 2010-12-22 ...
相关推荐
6.6.在启动时加载表 6.7.从通信失败中恢复 6.8.事务的恢复 6.9.备份、回滚以及灾难恢复 7.Mnsia.与.SNMP.的结合 7.1.结合.Mnesia.与.SNMP 8.附录.A:Mnesia.错误信息 8.1.Mnesia.中的错误 9.附录.B:...
• 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, ...
6.6 在启动时加载表 . . .. . .. . .. . 67 6.7 从通信失败中恢复 . . .. . .. . . .. . 68 6.8 事务的恢复 . . .. . .. . . .. . 68 6.9 备份、回滚以及灾难恢复 . . .. . .. . . .. . 69 7 Mnsia 与 SNMP 的...
Mnesia用户手册Mnesia用户手册
Mnesia用户手册.pdf
Mnesia table fragmentation 过程及算法分析。erlang就算在64位下dets的空间限制仍旧是2g,同样影响了mnesia,如果有更大需求,就必须使用Mnesia的 table fragmentation 技术
Mnesia用户手册(docx版) 详细讲解Mnesia数据库操作
Mnesia用户手册(PDF版本) 详细讲述Mnesia数据库操作。
Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时 特性的Erlang应用。
erlang系统自带的数据库mnesia的官方文档。
This book describes the Mnesia DataBase Management System (DBMS). Mnesia is a distributed Database Management System, appropriate for telecommunications applications and other Erlang ...
Mnesia 用户手册中文版 pdf,把市面上的doc转成pdf,并添加重要章节的书签,细节并不完美,请见谅。
ejabberd-XMPP和Web聊天 ... 设置erlang节点: (解决方案,更改mnesia主机名)。 绑定到端口12322的管理控制台-使用SSL。 Speeqe(网络聊天应用程序)配置: 从上游源代码安装到/ var / www / django / spe
您的使用数据库的客户端可能需要一些代码更改才能调用cachet API,而不是mnesia (在某些情况下,只需在代码中替换模块名称)即可。 cachet将在RAM表或DISC表中调度请求。 用法 cachet可用于解决以下问题: mnesia...
mnesia_pg Postgres后端通过mnesia_ext到Mnesia 这是一个非常原始的实现,用作概念验证和初步基准测试。 尚未用于生产中。 随时进行改进。
修改和扩展了很多 ejaberd 不支持的功能。 关键功能 分布式:去掉了依赖 mnesia 集群的代码,来支持更大的集群,以及防止由于网络分区导致的集群状态不一致。 消息处理:通过ejabberd和kafka相连接,实现了消息的...
Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。下面的内容将着重说明 如何做 Mnesia ...
个人学习Erlang对于Erlang处理数据的各种方式的总结,讲述编程语言Erlang的ets,dets,mnesia,mysql,dict,和进程字典的用法,希望能帮助读者在这个总结里学到一些东西.