erlang ets写入mysql_Erlang静态键值对(key-value)数据分别写入erl文件与ETS表读取的测试...

1、前言

昨晚在Erlang技术交流群问了这样一个问题:

我现在有1万多条静态的key-value数据,我现在是直接生成如下代码来使用:

get(key1) ->value1;

get(key2) ->value2;

......

get(keyN) ->valueN.

问题:

1、有没有更高效的方式?

2、Erlang的匹配用的是什么算法?

3、在源码的何处可以看到函数匹配的实现原理?

有人建议用ETS,所以就此进行了简单测试。

2、测试代码

3、运行测试

相同的键值对数据分别写入ets与erl文件,

不同的value数据类型同样执行1000w次的测试结果如下:

% value类型:tuple()

% 数据总量:1w

% test2:run(10000000).

% "get" [total: 546(546)ms avg: 0.055(0.055)us]

% "ets" [total: 2340(2480)ms avg: 0.234(0.248)us]

% ========================================================================

% get                  =    546.00ms [  100.00%]    546.00ms [  100.00%]

% ets                  =   2340.00ms [  428.57%]   2480.00ms [  454.21%]

% ========================================================================

% value类型:tuple()

% 数据总量:10w

% test2:run(10000000).

% "get" [total: 515(515)ms avg: 0.051(0.051)us]

% "ets" [total: 3588(3604)ms avg: 0.359(0.360)us]

% ========================================================================

% get                  =    515.00ms [  100.00%]    515.00ms [  100.00%]

% ets                  =   3588.00ms [  696.70%]   3604.00ms [  699.81%]

% ========================================================================

% value类型:binary()

% 数据总量:1w

% test2:run(10000000).

% "get" [total: 515(515)ms avg: 0.051(0.051)us]

% "ets" [total: 2465(2464)ms avg: 0.247(0.246)us]

% ========================================================================

% get                  =    515.00ms [  100.00%]    515.00ms [  100.00%]

% ets                  =   2465.00ms [  478.64%]   2464.00ms [  478.45%]

% ========================================================================

% value类型:binary()

% 数据总量:10w

%

% kvs.erl文件为8M,我机器上已无法编译(进程内存分配达到上限)

% value类型:integer()

% 数据总量:10w

% test2:run(10000000).

% "get" [total: 499(515)ms avg: 0.050(0.051)us]

% "ets" [total: 3307(3307)ms avg: 0.331(0.331)us]

% ========================================================================

% get                  =    499.00ms [  100.00%]    515.00ms [  100.00%]

% ets                  =   3307.00ms [  662.73%]   3307.00ms [  642.14%]

% ========================================================================

% value类型:integer() (大于32位)

% 数据总量:10w

% test2:run(10000000).

% "get" [total: 546(546)ms avg: 0.055(0.055)us]

% "ets" [total: 3744(3837)ms avg: 0.374(0.384)us]

% ========================================================================

% get                  =    546.00ms [  100.00%]    546.00ms [  100.00%]

% ets                  =   3744.00ms [  685.71%]   3837.00ms [  702.75%]

% ========================================================================

% value类型:term() (复合结构)

% 数据总量:1w

% test2:run(10000000).

% "get" [total: 530(531)ms avg: 0.053(0.053)us]

% "ets" [total: 3089(3447)ms avg: 0.309(0.345)us]

% ========================================================================

% get                  =    530.00ms [  100.00%]    531.00ms [  100.00%]

% ets                  =   3089.00ms [  582.83%]   3447.00ms [  649.15%]

% ========================================================================

4、测试结果

(1)、静态键值对(key-value)数据直接写成erl文件编译后读取比读ETS表快6倍左右;

(2)、数据量越大,数据结构越复杂,两者差距越明显;

(3)、erl文件太大(大于10M)时,编译会很慢(大于1分钟);

(4)、数据量在1w左右,写成erl文件3M内,建议用erl文件形式更快更直接。

PS:我的测试不能保证公平性,还望大神们提点。

本文来自瑞仙的 Erlang开发博客

原文:http://blog.csdn.net/zhongruixian/article/details/44885953

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值