數據庫性能測試
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