erlang/mnesia
文章平均质量分 78
没有开花的树
这个作者很懒,什么都没留下…
展开
-
erlang进程监控的实现原理
Erlang支持Monitor和Link两种监控进程的方式,使得所有进程可以连成一个整体。当某个进程出错退出时,监控进程会收到该进程退出的消息通知。有了这些特点,使用Erlang建立一个简单,并且健壮的系统就不是什么难事。前面有文章分析了两种方式的用法,这里分析下monitor和link的实现。原创 2015-07-20 20:10:32 · 3458 阅读 · 0 评论 -
Erlang提高ETS并发读写性能
ETS是Erlang内置的内存数据库,可用于多进程共享数据,具有并发读写的性能,文章就这点展开探讨,重点说说ets并发读写两个参数的优缺点及适用场合。原创 2014-07-26 23:26:22 · 6607 阅读 · 8 评论 -
erlang 各种数据类型占用的内存大小
用erlang的话讲,深入了解erlang不同数据类型所占的内存空间大小,是erlang高效编程的一个良好开始。一个程序要运行,就要先描述其算法。描述一个算法应先说明算法中要用的数据,数据以变量或常量的形式来描述。每个变量或常量都有数据类型。很多人都以为要把算法写得多精湛,才算高效编程,其实不然,细微处见功夫。原创 2013-12-03 20:51:16 · 4147 阅读 · 0 评论 -
erlang catch的内部实现(初稿)
最近项目组有同事做了erlang内部数据(Eterm)的分享。Eterm 是Erlang Term的简写,用来表示erlang中任意类型的数据,也就是说,erlang可以用到的任意数据,都能 Eterm表示。比如常见的atom、数字、列表、元组,甚至pid,port,fun,ets表等等都用Eterm可以表示。但为什么会有一个叫catch的Eterm?相信不少人都会有这样的疑问。所以,本文就围绕着 catch 进行分析和讨论。原创 2015-03-31 01:16:10 · 3059 阅读 · 0 评论 -
分析erlang热更新实现机制
Joe Armstrong在描述Erlang的设计要求时,就提到了软件维护应该能在不停止系统的情况下进行。在实践中,我们也因为这种不停止服务的热更新获益良多。那么Erlang是如何做到热更新的呢?这就是本文要讨论的问题。在前面的文章也提及到erlang热更新的机制,现在继续深入剖析erlang热更新实现机制。原创 2015-02-10 01:08:22 · 8109 阅读 · 8 评论 -
从erlang时间函数说到时间校正机制
很多人会注意到这个问题,erlang提供了2个时间函数,erlang:now() 和 os:timestamp()。用法一样,都是返回当前的时间。具体时间是从1970年1月1日零时算起,到现在经过的时间,结果为{MegaSecs, Secs, MicroSecs}。这两个函数有什么区别?而且,为什么要有 erlang:now() 函数。这就是文章想讨论的内容,从erlang时间函数说到时间校正体系。原创 2015-04-29 00:34:06 · 4393 阅读 · 23 评论 -
erlang shell 更改当前工作路径
对于一个刚接触Erlang的人来说,编译Erlang模块时会发生如下的错误:1> c(tut).tut.erl:none: no such file or directoryerror错误原因是在当前工作路径下没找到 tut.erl 文件。那么如何修改Erlang当前工作路径?有以下两种方法:第一种,在还没有进入erlang shell之前通过系统cd命令修改当前路径;原创 2013-09-16 18:14:21 · 2636 阅读 · 0 评论 -
erlang mnesia 常用使用技巧
Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。文章收集一些常用 mnesia 使用技巧原创 2014-12-23 23:12:32 · 3092 阅读 · 2 评论 -
Erlang 日期和时间处理、时间戳转换
先来了解一下erlang:now(),erlang:now()得到的是从1970年1月1日零时起到现在经过的时间,结果为{MegaSecs, Secs, MicroSecs}。有个问题要注意,还有另外一个函数可以实现同样的功能:os:timestamp(),那么erlang:now()和os:timestamp()的区别是什么?erlang时间和时间戳又该怎么转换,等等这些,文章将会分别讨论。原创 2013-11-13 20:13:32 · 13041 阅读 · 0 评论 -
erlang的学习资料和文献
最近有朋友想学习erlang,问我有什么好入门的学习资料。我也借此机会整理一下:erlang中文手册、位运算与二进制解析、二进制高效编程、异常处理详解;面对软件错误构建可靠的分布式系统、编写分布式的 Erlang 程序:陷阱和对策、硝烟中的Erlang;底层有erlang VM基于多核处理器的可伸缩性特征、erlang VM内部数据共享机制、erlang 消息传递机制等原创 2015-01-25 19:15:15 · 3401 阅读 · 1 评论 -
Erlang热部署 - 模块热更新(code)
Erlang之父Joe Armstrong在描述Erlang的设计要求时,就提到了软件维护应该能在不停止系统的情况下进行。在实践中,我们也因为这种不停止服务的热更新获益良多。那么Erlang是如何做到热更新的呢?这就是本文要讨论的问题。原创 2013-10-28 20:32:35 · 6974 阅读 · 0 评论 -
说说erlang tuple和record结构
erlang有两种复合结构,tuple和list,两者的区别是tuple子元素的个数是固定不变的,声明后就不能改变了;而list是可变的,可以通过[H|T]来取出或插入新元素。record有点像C/C++里面的结构体,实际上是语法糖,方便我们的开发,代码汇编时转成tuple表达形式。文章将分别以例子及汇编代码说明erlang tuple和record结构原创 2014-06-16 23:19:36 · 5819 阅读 · 7 评论 -
erlang判断模块导出函数问题
erlang本身提供一个接口,可以用来检查模块是否有导出函数,这个接口是erlang:function_exported/3,但是很多时候这个接口无法正常使用。很多模块在erlang启动时都没有加载到系统,都是在使用到的时候才加载,所以这个检查导出函数的接口可能会出现错误的结果。文章讨论这个问题的解决方案及为什么会这样的原因。原创 2014-11-01 01:27:49 · 4564 阅读 · 0 评论 -
erlang集群IP及端口管理
erlang集群是依靠epmd维护的,epmd是erlang集群节点间端口映射的守护进程,负责维护集群内的节点连接,提供节点名称到IP地址及端口的解析服务。默认情况下,epmd绑定在4369端口。但是,端口固定的话,容易遭受攻击,可能导致新节点的认证失败而无法启动,或无法加入集群。文章介绍如何修改epmd端口,修改端口后节点如何启动,如何限制集群节点IP地址原创 2015-06-25 02:23:52 · 7626 阅读 · 0 评论 -
使用eclipse快速搭建erlang开发环境
Erlang是一种面向并发的编程语言,可以应对大规模并发活动,将越来越受关注和使用,但是Erlang IDE却少得可怜。对比了一下,我觉得erlide比较合适。使用erlide开发环境的好处有erlang项目管理,代码自动编译,控制台调试,代码导航器等等,非常方便。文章将讲述如何使用erlide开发erlang。原创 2013-09-28 23:28:46 · 10307 阅读 · 4 评论 -
erlang 接入远程shell控制台
erlang shell是用户与 erlang 运行时系统交互的界面程序。事实上,erlang VM的运行不依赖任何shell,只要在启动的时候添加参数detached就可以脱离终端。文章介绍erlang 4种接入远程shell的方法,作业(JCL )模式 、Remsh 模式、SSH 模式、管道(pipe)模式。原创 2015-02-16 11:02:38 · 5197 阅读 · 2 评论 -
使用IntelliJ IDEA开发erlang项目
最近erlang版本换到了R17,为了很好支持中文,项目所有模块文件第一行加了文件格式声明:%% coding: latin-1 。但是,erlide会识别这个语句,导致中文显示乱码,这个暂时没有选项可以解决这个问题。所以,我换了新的IDE,就是本文将要介绍的IntelliJ IDEA,这个IDE很好支持erlang,而且能支持eclipse的快捷键。原创 2015-03-10 21:47:04 · 20905 阅读 · 1 评论 -
Erlang/OTP 构建 Application
在Erlang/OTP ,Application表示作为一个单元,可以启动和停止,执行一些特定功能的组件,并可以在其它系统中重新使用。Application控制器的模块接口,是在每一个Erlang运行时系统启动的进程,并包含用于控制Application(例如启动和停止Application),以及访问Application的信息(例如配置参数)的功能。原创 2013-10-11 20:58:24 · 6877 阅读 · 3 评论 -
erlang热更新的实现与原理
前面的文章有讲过erlang热更新,只是大概介绍,现在再深入一点讲erlang的模块热更新的实现和原理。erlang的热更新是模块级别的,就是一个模块一个模块更新的。热更新就是在不停止系统的情况下对运行的代码进行替换。文章主要讲erlang如何热更新,热更新的原理,以及热更新会遇到的问题及解决思路。原创 2014-11-17 00:58:47 · 5635 阅读 · 0 评论 -
如何使用erlang mnesia 数据库
Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。文章将着重说明 如何使用 Mnesia 数据库。原创 2013-10-09 19:38:04 · 7146 阅读 · 3 评论 -
erlang list的使用与优化建议
erlang有两种复合结构,tuple和list,两者的区别是tuple子元素的个数是固定不变的,声明后就不能改变了;而list是可变的,可以通过[H|T]来取出或插入新元素。上篇文章讲了tuple相关的内容,本篇就讲erlang list方面的知识,主要说一些基本操作和常用的list函数,再讲一些可以优化的点。原创 2014-10-24 19:16:20 · 8791 阅读 · 0 评论 -
erlang系列文章阅读指引
文章相当于本博客 erlang 专栏的目录页,目的是引导读者,可以很快定位到想看的文章。这里笼统的概括为erlang基础知识、常见问题、节点通信、mnesia常见问题,以及erlang底层实现。原创 2015-03-07 18:57:12 · 3509 阅读 · 0 评论 -
erlang 二进制与位语法(bit syntax)
Erlang的比特语法(erlang bit syntax)提供了一种方法来匹配二进制数据,这使得Erlang二进制对象在某种程度上等同于其他Erlang对象,如元组和列表。也因为其快速高效,使得在erlang中,二进制对象被广泛使用,尤其是在协议编程方面。原创 2013-09-11 20:28:16 · 8878 阅读 · 3 评论 -
erlang 中文编码显示乱码问题
许久没做erlang开发了,最近有网友问到erlang的问题,就抽时间看下。问题是这样的,模块有中文,将中文直接打印出来,shell下显示会出现乱码,但如果先将中文转成binary,就可以正常显示出来。文章以例子做分析,解释 io:format/2对中文的处理,然后讨论乱码出现的原因,以及latin1为何能表示中文,utf8保存的代码在shell下显示乱码问题原创 2016-02-28 23:51:15 · 8470 阅读 · 0 评论 -
解决erlang R17无法识别中文问题
erlang更新到R17已有一段时间了,公司项目打算从旧版的erlang迁移到R17,却不料有不少的困扰,其中一个问题是中文问题。在erlang的文档中说到,erlang更新到R17后,默认编码从Latin-1换成了utf8,所以无法正确识别中文,文章主要讨论及解决这个问题。原创 2014-11-02 23:20:46 · 3853 阅读 · 5 评论 -
erlang开发经验谈:防坑指南
任何语言在使用中都会遇到这样那样的问题,erlang也是。文章总结了'--' 运算,try.. catch,guard判断,random随机数,list_to_atom弊端,gen_server发消息,mnesia 2G限制,进程数量限制,ets限制,端口,匿名函数导致进程被kill等等问题,要重视一下,避免继续踩坑。原创 2015-02-12 23:25:02 · 5951 阅读 · 12 评论 -
erlang进程监控:link和monitor
Erlang最开始是为了电信产品而发展起来的语言,因为这样的目的,决定了她对错误处理的严格要求。Erlang除了提供exception,try catch等语法,还支持Link和Monitor两种监控进程的机制,使得所有进程可以连接起来,组成一个整体。当某个进程出错退出时,其他进程都会收到该进程退出的消息通知。有了这些特点,使用erlang建立一个简单,并且健壮的系统就不是什么难事。原创 2013-10-27 17:15:56 · 9600 阅读 · 1 评论 -
erlang binary数据转换的问题
erlang提供了binary_to_term,把一个二进制数据转为原始的erlang数据。但是,这个函数也有副作用。如果直接将对端传来的数据做一次 binary_to_term,就可能会导致VM crash掉。原创 2015-01-12 00:11:27 · 4804 阅读 · 4 评论 -
Erlang项目编译及防止反编译
erlang otp自带了类似makefile的功能,可以自动化编译整个erlang项目的代码,使用非常方便,文章将介绍如何使用这个功能,另外还讲述了如何防止erlang程序被反编译,对erlang项目的程序进行保护,防止恶意反编译原创 2013-10-29 12:37:09 · 4353 阅读 · 0 评论 -
在erlang项目中使用protobuf
protobuf是Google的一个序列化框架,类似XML,JSON,其最大的特点是基于二进制,比传统的XML表示同样一段内容要短小得多。还可以定义一些可选字段,广泛用于服务端与客户端通信。文章将着重介绍在erlang如何使用protobuf。原创 2014-03-23 21:57:49 · 10248 阅读 · 8 评论 -
erlang循环结构:尾递归,列表解析
最近看到一道erlang面试题,分别用尾递归,lists模块,列表解析找出0-9的偶数。文章在后面的内容中也对erlang两种循环结构(尾递归,列表解析)分别进行讨论。原创 2014-03-20 23:39:25 · 7412 阅读 · 0 评论 -
Erlang与As通讯解决消息粘包
在网络通讯中,消息粘包是个很常见的问题。文章将讲解Erlang与As通讯时如何解决消息粘包问题。解决方法是在消息内容前加消息长度。erlang端很好解决,直接修改 {packet, N}属性,erlang自动做这个过程。AS端的做法在发送消息前先转成bytes,再计算内容长度;接收数据时先获取包头,再获取后面的数据。原创 2014-04-22 23:35:50 · 2303 阅读 · 0 评论 -
erlang 解决socket 数据粘包问题
我们知道,erlang实现的网络服务器性能非常高。erlang的高效不在于短短几行代码就能写出一个服务端程序,而在于不用太多代码,也能够写出一个高效的服务端程序。而这一切的背后就是erlang对很多网络操作实现了近乎完美的封装,使得我们受益其中。文章将讨论erlang gen_tcp 数据连包问题及erlang的解决方案。原创 2014-02-13 21:05:29 · 7517 阅读 · 2 评论 -
Erlang热部署 - 心跳机制(heart)
我们写的程序不可能都没有bug,特别是项目越做越大,代码越来越多的时候,系统出错导致崩溃的可能性越来越大。而很多时候引发系统崩溃的来源可能不是致命性的,比如程序长时间运行,操作系统资源调度问题,或者是偶然的系统突发问题等等。那么,如何防止erlang猝死导致服务的长时间中断,erlang也给了我们答案:erlang心跳机制。文章将从erlang心跳机制、心跳原理、心跳参数、心跳函数几个方面来讲述。原创 2014-01-15 19:56:55 · 5001 阅读 · 0 评论 -
erlang mnesia 数据库备份与还原
数据库在使用当中都会有数据库备份工作,当数据库发生严重错误无法启动,或者数据丢失时可以及时有效地恢复数据。文章首先介绍如何备份和还原Erlang Mnesia数据库,然后从备份、回滚两大方面深入探讨mnesia的备份机制。原创 2013-12-21 10:35:09 · 4449 阅读 · 0 评论 -
基于 Erlang/OTP 搭建TCP服务器
这两天在研究erlang如何构建TCP服务器,看到一篇文章,基于Erlang OTP构建一个TCP服务器,里面讲述了两种混合型Socket的实现方法,着实让人欢欣鼓舞。本文将结合这两篇文章,继续讨论Erlang/OTP 构建TCP服务器的具体实现,以示例演示如何如何使用标准Erlang/OTP行为创建一个简单的无阻塞的TCP服务器。原创 2013-10-22 21:50:29 · 8081 阅读 · 4 评论 -
Erlang 整数与浮点数转换、进制转换
Erlang 整数与浮点数的转换、数字之间的进制转换,浮点数改变精度等等这些功能,Erlang BIF(Erlang内建函数)已经帮我们很好实现,调用他们也很方便,文章将简单说明如何去使用他们。原创 2014-01-03 21:46:12 · 5868 阅读 · 0 评论 -
Windows下使用NIF扩展Erlang方法
在Erlang中,NIF(Native Implemented Function)被用来扩展erlang的某些功能,一般用来实现一些erlang很难实现的,或者一些erlang实现效率不高的功能。NIF使用C开发,效率和C接近,比纯erlang实现要高。NIF会编译成动态库,直接动态加载到erlang进程空间调用,也是erlang扩展新方法最高效的做法。原创 2014-01-02 19:48:41 · 5254 阅读 · 17 评论 -
总结Erlang的系统限制
Erlang本身对进程数,原子长度等没有限制,但为了提高性能和节省内存,总会在实际实现中和运行环境中作出一些限制。文章从erlang进程数量,分布式节点数量,atom的最大数量,端口数量限制,socket数量限制,等等分别做说明。原创 2014-01-01 11:30:15 · 7389 阅读 · 1 评论 -
erlang mnesia数据库设置主键自增
Mnesia是erlang/otp自带的分布式数据库管理系统。mnesia配合erlang的实现近乎理想,但在实际使用当中差强人意,总会有一些不足。mnesia数据表没有主键自增的功能,但在mnesia函数中有一个自增函数可以用来生成自增的id,文章将讲述如何实现主键自增的功能。原创 2013-12-04 19:02:52 · 3196 阅读 · 0 评论