[erlang] mnesia
原文地址: http://www.cnblogs.com/bluefrog/archive/2012/05/16/2504625.html
本来是项目合作的,可是你却一而再再而三的使用这招,我处理愤怒了,自己来。先学习下 mnesia 的操作先:
-module(test_mnesia). -compile(export_all).-include_lib("stdlib/include/qlc.hrl").%% 定义记录结构 -record(shop,{item,quantity,cost}). -record(cost,{name,price}). -record(design,{id,plan}).start() ->mnesia:start(),%% 等待表的加载mnesia:wait_for_tables([shop,cost,design],20000).%% 初始化mnesia表结构 init() ->mnesia:create_schema([node()]),mnesia:start(),%% 表创建 mnesia:create_talbe(TableName,[Args])%% {type,Type} set,ordered_set,bag 表类型%% {ram_copies,NodeList} NodeList每个节点都有内存备份 默认为这个{ram_copies,[node()]}%% {disc_copies,NodeList} NodeList每个节点都有内存备份和磁盘备份 %% {disc_only_copies,NodeList} NodeList每个节点有磁盘备份 %% {attributes,AtomList} 要保存的列名称 一般和record有关 record_info(fields,RecordName)mnesia:create_table(shop,[{attributes,record_info(fields,shop)}]), %% 创建shop表 mnesia:create_table(cost,[{attributes,record_info(fields,cost)}]),mnesia:create_table(design,[{attributes,record_info(fields,design)}]),mnesia:stop().%% 加载测试数据 reset_tables() ->mnesia:clear_table(shop),mnesia:clear_table(cost),F = fun() ->lists:foreach(fun mnesia:write/1,example_tables())end,mnesia:transaction(F).%% 测试数据 example_tables() ->[%% shop table{shop,apple,20,2.3},{shop,orange,100,3.8},{shop,pear,200,3.6},{shop,banana,420,4.5},{shop,potato,2456,1.2},%% cost table{cost,apple,1.5},{cost,orange,2.4},{cost,pear,2.2},{cost,banana,1.6},{cost,potato,0.6}].%%== 查询 ============================================================= do(Q) ->F = fun() -> qlc:e(Q) end,{atomic,Val} = mnesia:transaction(F),Val.%% SELECT * FROM shop %% 选取所有列 demo(select_shop) ->do(qlc:q([X || X <- mnesia:table(shop)]));%% SELECT item,quantity FROM shop %% 选取指定列 demo(select_some) ->do(qlc:q([{X#shop.item, X#shop.quantity} || X <- mnesia:table(shop)]));%% SELECT * FROM shop WHERE shop.quantity < 250 %% 选取指定条件的数据 demo(where) ->do(qlc:q([X || X <- mnesia:table(shop),X#shop.quantity < 250]));%% 关联查询 %% SELECT shop.* FROM shop,cost wHERE shop.item = cost.name AND cost.price < 2 AND shop.quantity < 250 demo(join) ->do(qlc:q([X || X <- mnesia:table(shop),X#shop.quantity < 250,Y <- mnesia:table(cost),X#shop.item =:= Y#cost.name,Y#cost.price < 2])).%% == 数据操作 ===============================================%% 增加一行 add_shop_item(Name,Quantity,Cost) ->Row = #shop{item = Name,quantity = Quantity, cost = Cost},F = fun() ->mnesia:write(Row)end,mnesia:transaction(F).%% 删除一行 remove_shop_item(Item) ->Oid = {shop,Item},F = fun() ->mnesia:delete(Oid)end,mnesia:transaction(F).%% 取消一个事务 former(Nwant) ->F = fun() ->%% find the num of apples[Apple] = mnesia:read({shop,apple}),Napples = Apple#shop.quantity,%% update the databaseNewApple = Apple#shop{quantity = Napples + 2 * Nwant},mnesia:write(NewApple),%% find the num of oranges[Orange] = mnesia:read({shop,orange}),Noranges = Orange#shop.quantity,if Noranges >= Nwant ->%% update the databaseNum = Noranges - Nwant,NewOrange = Orange#shop{quantity = Num},mnesia:write(NewOrange);true ->%% no enough oranges 取消事务 mnesia:abort(oranges)endend,mnesia:transaction(F).%% 保存复杂数据 add_plans() ->D1 = #design{id = {joe,1},plan = {circle,10}},D2 = #design{id = fred,plan = {rectangle,[10,5]}},F = fun() ->mnesia:write(D1),mnesia:write(D2)end,mnesia:transaction(F).%% 获复杂数据 get_plans(PlanId) ->F = fun() -> mnesia:read({design,PlanId}) end,mnesia:transaction(F).
转载于:https://www.cnblogs.com/AloneSword/p/4939800.html
[erlang] mnesia相关推荐
- erlang mnesia数据库简单应用
mnesia是erlang自带的分布式数据库,基于ets和dets实现的.mnesia兼顾了dets的持久性和ets的高性能,可以自动在多个erlang节点间同步数据库.最关键的是,mnesia实现了 ...
- 基于Erlang语言的视频相似推荐系统 | 深度
作者丨gongyouliu 来源 | 转载自大数据与人工智能(ID:ai-big-data) [导语]:作者在上一篇文章<基于内容的推荐算法>中介绍了基于内容的推荐算法的实现原理.在本篇文 ...
- [转]Erlang 大量写入出警报
Posts - 71 Articles - 6 Comments - 7 [集]erlang常用配置文件收集 http://www.cnblogs.com/gordonchao/archive/2 ...
- erlang r19里面的mnesia_ext
r19据说支持了mnesia_ext,终于可以给那个恶心2gb limit的mnesia换存储引擎了 先下载r19源码,编译 ./otp_build all -a ~/dev/erlang/r19 . ...
- Erlang(起个中文名:易浪)不能错过的盛宴
评:erlang(起个中文名:易浪),在穿戴设备技术,云技术,大数据,游戏服务器等等高并发分布式必然大有用处,这个语言必火!-传统语言除了java和c,其他的必然会死去,今后一定会出现新的类erlan ...
- erlang在NotePad++下的高亮
转自:http://www.roberthorvick.com/2009/07/08/syntax-highlighing-for-erlang-in-notepad/ Syntax Highligh ...
- mnesia数据库学习笔记四
杂项 前二章讲了如何启动数据库,如何构建数据库,接下来会为讲一些创建分布式容错数据所需的高级特征: 索引 分布式和容错 表分段 本地内容表 无磁盘节点 高级方案管理 调用应用程序 并行进程 原形研究 ...
- “【第二届】Erlang Fans交流会”议程
http://erlang-china.org/news/erlang-fans-fair-schedule.html [第一场:2007-10-13 上午] 10:00 签到(请填写个人资料或提供名 ...
- 64位CentOS6.2安装erlang及rabbitmqServer
CentOS 6.2 64bit 安装erlang及RabbitMQ Server 1.操作系统环境(CentOS 6.2 64bit) 1 [root@HAproxy ~]# cat /etc/is ...
最新文章
- DataGridView和ListT绑定不显示问题
- 数据结构与算法之反转单向链表和双向链表
- 如何查看linux中文件打开情况
- 深入解读 Knative Eventing 0.7 版本新特性
- 不好意思,观察者模式跟发布订阅模式就是不一样
- UNIX环境高级编程之第6章:系统数据文件和信息
- Atitit 摄像头与主机连接方式大总结
- PADS Layout 滴泪、敷铜和删除
- 苹果手表出现,请在iphone 打开apple watch 应用,前生Passcode,轻点密码重试
- HTML+css样式制作静态天猫官网部分页面
- Ubuntu 论坛遭到入侵,用户数据泄露
- java openoffic excel转html,Java利用OpenOffice進行將word,excel轉化成html解析到界面(上)...
- 各个国家的人有什么特点?
- Pagination 分页实现跳转首页和尾页
- 2008欧锦赛 球员名单 A组
- 指向指针数组的指针和指针数组类型的指针
- 同步linux服务器时间
- 关于.net framework4.0安装失败,“安装时发生严重错误”
- 有什么软件可以测试面膜的好坏,检验面膜好坏的小妙招
- 怎么在 Windows 下生成 文档树 tree?
热门文章
- 改变你一生命运的话语 不得不信
- android在activity中锁屏解锁后重走OnCreate的问题的解决办法
- 如何解决无法显示隐藏文件文件夹
- c语言的point函数,C语言中friend友元函数详细解析
- c语言oj1124,程序设计入门——C语言 第2周编程练习 1时间换算(5分)
- Android实现蝴蝶动画,蝴蝶飞舞- (补间动画+逐帧动画)
- loadrunner mysql_LoadRunner访问Mysql数据库
- c 语言 移位四舍五入,关于C 语言中的四舍五入问题
- CSITOOL安装接收CSI数据
- Matlab x2fx函数