`
ZacMa
  • 浏览: 38899 次
  • 来自: 深圳
社区版块
存档分类
最新评论

<23>erlang 数据存储

 
阅读更多
做为后端开发者,经常用到数据存储, 工作中用到过各种模式的数据存储,但很少总结下经常用到的方法,虽然很多或自己想法或从网络上来没有实践过,但记录下来简单分析下,做为备份,以便以后工作用验证, 简单分析涉及erlang做服务器最常用数据存储的方式:
1.
ets + mysql
这估计是很多采用的方法,这种方法最常用的原因是mysql大家用的已经相当普遍了,适合存储各种大量的数据, 并且mysql适合和其他语言的交互,例如php,c, c++都很方便的访问,单mysql是完全够了;这样mysql可用作永久数据存储,ets因为速度快,对erlang支持好,用来做缓存;

2.
dets + ets
这种存储也很普遍,dets用于永久的数据存储,把数据存放在磁盘中; ets做缓存,临时存放用户经常快速访问的数据,不需要永久存储的数据, 这个存储有个缺点就是ets表的存储不能跨节点使用,必须通过间接地数据传输,对于大部分应用这种存储应该还是完全可以胜任的;

3.
redis
redis做缓存不用多说,大众推荐的,并且redis支持各种类型的数据存储相当方便,各种模式的数据存储,速度也是相当快,做缓存绝对是不二的选择; 做持久存储的不足就是redis可储存的空间只能小于本服的内存,也就是redis中的数据会在缓存中全部保存一份,所以要在存储前设计好存储空间,不适合做大量数据的存储, 不过貌似redis有不少用作永久存储的,世界第二大porn网站用redis就是最好的例子,
http://www.kuqin.com/shuoit/20130806/334696.html

4
mnesia + ets
这种存储方式貌似见的不多,可能主要的原因是mnesia懂的人不是很多,把核心数据放在mnesia中不放心,并且mnesia和其他的交互性不好,php,c等没办法直接去访问数据

5
ets+文件
文件存储的弊端是需要自己设计好存储的格式,否则会读取,查询等操作比较麻烦,erlnag中有比较完备的格式,例如ets文件存储方式,用文件也是不错的选择;
http://blog.yufeng.info/archives/2842#respond
erlang中用文件写的效率并不比其他语言差;
这里ets做为cache,更方便的方式是直接用ets带的 tab2file和file2tab来文件和ets相互转化,直接从cache到磁盘,从磁盘到cache,不用自己设计文件的格式

6.
待续
分享到:
评论

相关推荐

    <27>erlang record

    标题中的“&lt;27&gt;erlang record”可能指的是Erlang编程语言中的Record特性,它是一种数据结构,类似于结构体或者哈希表,用于组织和操作数据。在Erlang中,Record提供了一种方便的方式来定义和访问具有固定字段的数据...

    Erlang6大数据存储方式总结

    它提供了高效且灵活的数据存储,适用于快速读写操作。ETS支持五种不同类型的表:set、ordered_set、bag、duplicate_bag和proplists,每种类型都有其特定的访问和存储策略。例如,set和ordered_set保证元素唯一,而...

    erlang jiffy code

    解码后的结果可能是一个 `{struct, [{foo, &lt;&lt;"bar"&gt;&gt;}]}` tuple,其中 `struct` 表示这是一个 JSON 对象,而 `[{foo, &lt;&lt;"bar"&gt;&gt;}]` 是键值对的列表,`foo` 是键,`&lt;&lt;"bar"&gt;&gt;` 是经过二进制化的值。 Jiffy 库支持...

    erlang二进制共享对象的存储方式

    这样的设计使得用户可以在生产数据存储不可用的情况下,通过实验不同大小的缓存和替换策略来优化系统性能。例如,当某个特定的数据集不再频繁使用时,可以通过调整缓存大小或更改替换策略来减少不必要的内存占用,...

    ActiveMQ教程

    &lt;groupId&gt;org.apache.activemq&lt;/groupId&gt; &lt;artifactId&gt;activemq-all&lt;/artifactId&gt; &lt;version&gt;5.9.0&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.xbean&lt;/groupId&gt; &lt;artifactId&gt;xbean-spring&lt;/...

    基于erlang的文件存储

    6. **分布式特性**:Erlang的分布式特性允许在多台机器上部署服务,通过节点间的通信实现数据的共享和复制。在文件存储系统中,这可以用于实现负载均衡和故障恢复,提高整体系统的可靠性和可用性。 7. **错误处理和...

    介绍 Erlang binary 和 bit string 数据类型的经典文章

    在Erlang中,binary 类型是一种专门用于存储字节序列的数据结构。与列表不同的是,binary 类型提供了高效的内存表示,并且支持强大的模式匹配功能,这使得它成为编写网络通信程序的理想选择。例如,在处理 TCP 或 ...

    erlang test 生成 dets

    DETS是Erlang提供的一种持久化数据存储机制,类似于关系数据库的表,但它是基于磁盘的。 在Erlang中,DETs是用于在内存和磁盘之间存储和检索Erlang术语的数据结构。它们允许开发者快速访问数据,同时提供数据持久性...

    RabbitMq3.85与erlang23的安装包.zip

    总之,RabbitMQ结合Erlang OTP,提供了一个强大且灵活的消息中间件解决方案,广泛应用于微服务架构、物联网、大数据处理等领域。正确安装和配置RabbitMQ以及理解其核心概念和工作原理,对于构建高效、可靠的分布式...

    erlang23.2版windows64位.zip

    6. **模式匹配**:Erlang的模式匹配机制使得解构复杂数据结构和条件分支变得简单。 7. **BEAM虚拟机**:Erlang运行在BEAM(Erlang虚拟机)上,BEAM为Erlang提供了高效的内存管理和垃圾回收。 8. **标准库**:OTP...

    Erlang_Memcache.pdf

    - **存储数据**:`store(DictName, Key, Value)`用于存储key-value对。 - **追加数据**:`append(DictName, Key, Value, Option)`允许向现有列表中追加新值,`Option`参数决定是追加到头部还是尾部。 - **获取数据**...

    erlang mysql

    MySQL 是世界上最受欢迎的开源关系型数据库管理系统之一,广泛应用于网站开发、数据分析和其他需要高性能数据存储的应用场景。当需要在 Erlang 程序中与 MySQL 数据库进行交互时,可以使用特定的库来实现这一目标。 ...

    Erlang与Mysql对接

    当Erlang应用程序需要处理大量数据或者需要持久化存储时,通常会与MySQL进行对接,实现数据的存取。 在Erlang中,与MySQL对接的关键在于选择合适的驱动程序,文件名为"erlang-mysql-driver"很可能是指一个Erlang的...

    erlang23.0-rabbitmq3.8.4.rar

    Erlang的并发特性保证了RabbitMQ在处理大量并发请求时的稳定性,而RabbitMQ则负责消息的路由、存储和传递,确保数据在分布式系统中的正确流动。这种组合常用于微服务架构、物联网(IoT)以及任何需要异步处理和解耦的...

    Erlang-game-server开发实践.pdf

    * 数据库层:使用Erlang的ETS、Mnesia、MySQL、MongoDB等数据库来存储游戏数据。 游戏服务器实现 在实现游戏服务器时,我们需要考虑以下几个方面: * 玩家和NPC的进程模型:使用Erlang的轻量级进程来模拟玩家和...

    erlang_otp_win64_25.0

    此外,Erlang OTP的Mnesia数据库系统支持分布式数据存储和事务处理,非常适合构建容错性强的系统。 总的来说,Erlang OTP 25.0 for Windows 64位是一个强大的开发工具,对于那些需要构建高可用、高性能、分布式应用...

    Erlang的高级特性和应用

    它提供了软实时性,大部分数据存储在本地内存,支持水平分割和数据冗余,可以自动在节点间进行数据迁移。Mnesia 与其他数据库(如UnixODBC)可交互,但存在网络分区可能导致数据不一致的问题。 在实践中,Ejabberd...

    erlang_gproc_扩展实现Erlang的全局ets

    在Erlang中,ETS(Erlang Term Storage)是内置的一种高效、内存中的数据库,用于存储和检索Erlang术语。然而,ETS的一个限制是它不支持全局的、跨进程的数据访问。为了解决这个问题,`gproc`库应运而生。 `gproc`...

Global site tag (gtag.js) - Google Analytics