数据库性能测试
windows
测试环境: 系统:win7 ,内存:16G , CPU:Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz 3.40GHz ,单节点
写(每条数据大小50Byte):
速率(不间断写入):25000条/秒
写入上限:1200w条
无锁读(单条数据50Byte):
速率(不间断读取):35000条/秒
上限:无
锁读(单条数据50Byte):
速率(不间断读取):30000条/秒
上限:无
写(单条数据200k):
速率(不间断写入): 5000条/秒
上限: 5W条
同时读写(单条数据50Byte):
速率: 20000条/秒
上限:800w条
写入速率瓶颈在磁盘io,写入规模与内存有关。超过写上限时,内存飙升,写入超时。
linux(单节点)
测试环境:
系统:Centos 5.8 ,内存:8G , CPU:Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz 3.40GHz ,单节点
写(每条数据大小50Byte):
速率(不间断写入):25000条/秒(数据规模10w条)
写入上限:600w条
无锁读(单条数据50Byte):
速率(不间断读取):3000条/秒(数据规模10w条)
上限:无
锁读(单条数据50Byte):
速率(不间断读取):2500条/秒(数据规模10w条)
上限:无
写(单条数据200k):
速率(不间断写入): 2000条/秒(数据规模5w条)
上限: 5W条
同时读写(单条数据50Byte):
速率: 20000条/秒
上限:500w条
写入速率瓶颈在磁盘io,写入规模与内存有关。超过写上限时,内存飙升,写入超时。
linux(集群)
服务器环境:
系统:Centos 5.8 ,内存:8G , CPU:Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz 3.40GHz 测试项目:(由两个slave节点组成的集群)
客户端环境(本地虚拟机):
系统:Centos 7.0, 内存:8G , CPU:Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz 3.40GHz,测试方法:用tsung(压力测试工具)模拟多个客户端异步向服务器发起请求(每一次请求对应一次数据写入)
写(单条数据50k):
速率:7000条/秒
规模:100w条
读(单条数据50k):
速率: 7000条/秒
规模:100w条
同时读写(单条数据50k):
速率:2500条/秒
规模:50w条
性能瓶颈在网络io。
mensia 、自研数据库、redis 比较
mnesia | 自研数据库 | redis | |
测试环境 | linux 虚拟机 centos 7.0, erlang otp 17.5 | linux 虚拟机 centos 7.0, erlang otp 17.5 | linux 虚拟机 centos 7.0, erlang otp 17.5, Redis 2.8.7, eredis |
单节点单进程(数据规模100w条) | |||
---|---|---|---|
写耗时(单位秒) | 36.6 | 37.3 | 223.5 |
读耗时(单位秒) | 29.8 | 14.0 | 217.4 |
删除耗时(单位秒) | 36.8 | 25.6 | 221 |
同时读写耗时(单位秒) | 38.2/41.8 | 38.5/44.0 | 300/301 |
单节点多进程(数据规模100w条) | |||
写平均耗时(10个进程,单位秒) | 104.3 | 154(无锁) | 373 |
读平均耗时(10个进程,单位秒) | 90.7 | 54.3 | 373 |
读平均耗时(20个进程,单位秒) | 196.1 | 97.0 | 746 |
读平均耗时(40个进程,单位秒) | 430.9 | 205.6 | 1465 |
读平均耗时(50个进程,单位秒) | 545.9 | 258.7 | 1773 |
单节点多进程(数据规模10w条) | |||
读平均耗时(10个进程,单位秒) | 8.6 | 5.2 | 38 |
读平均耗时(20个进程,单位秒) | 19.2 | 9.8 | 74 |
读平均耗时(40个进程,单位秒) | 42.0 | 20.6 | 142 |
读平均耗时(60个进程,单位秒) | 67.3 | 31.7 | 214 |
单节点多进程(数据规模100w条,多张表) | |||
读写平均耗时(10个进程,10张表,单位秒) | 83/71 | 52/135 | 125/130 |
读写平均耗时(20个进程,20张表,单位秒) | 179/170 | 115/270 | 243/251 |
读写平均耗时(40个进程,40张表,单位秒) | 400/404 | / | 486/537 |
如何在Erlang中操作Redis?
下载和编译:
git clone git://github.com/wooga/eredis.git cd eredis ./rebar compile
在console中使用:
erl -pa ebin/ {ok, C} = eredis:start_link(). {ok, <<"OK">>} = eredis:q(C, ["SET", "foo", "bar"]). {ok, <<"bar">>} = eredis:q(C, ["GET", "foo"]).
在模块中使用:
save_order_id({Pid, DynData}) ->
{ok, Rds} = eredis:start_link(),
{_,Val} = ts_dynvars:lookup(order_id, DynData),
Id = binary_to_list(Val),
{ok, _} = eredis:q(Rds, ["RPUSH", "order_list", Id]).
get_order_id({Pid, DynData}) ->
{ok, Rds} = eredis:start_link(),
{ok, Id} = eredis:q(Rds, ["LPOP", "order_list"]),
Id.
redis使用
eredis 支持的命令
-SET 插入或修改 -DEL 删除 -GET 读取
-MSET 多条数据插入 -MGET 多条数据读取
HASH hash相关命令
LIST list相关命令 -LPOP -LPUSH -RPUSH -LRANGE
SET set相关命令 -SADD
Transactions 事务相关命令 -MULTI -EXEC
Pipelining -多条语句顺序执行
redis 安装
服务端安装部署
http://www.cnblogs.com/haoxinyue/p/3620648.html
http://blog.csdn.net/rachel_luo/article/details/8858250
redis 分布式部署
http://blog.csdn.net/zq9017197/article/details/17357219
http://www.kokojia.com/article/9496.html
http://blog.csdn.net/pi9nc/article/details/17719737