使用 mysql 库 20个连接池 插入 10K 条 字段为30的记录,花时间约 30 秒
环境: windows cpu:i5 erlang启动项设置 -smp disable
test_mysql()->
[Host, Port, User, Password, DB, Encode] = config:get_mysql_config(server),
Fun = fun(Item) ->
mysql:start_link(Item, Host, Port, User, Password, DB, fun(_, _, _, _) -> ok end, Encode),
mysql:connect(Item, Host, Port, User, Password, DB , Encode, true)
end,
List = [db1,db2,db3,db4,db5,db6,db7,db8,db9,db10,db11,db12,db13,db14,db15,db16,db17,db18,db19,db20],
lists:foreach(Fun, List),
timer:sleep(3000),
?PRINT("---db begin~n",[]),
test_inset(10000).
test_inset(Times) ->
case Times > 0 of
true ->
ID = gen_server:call(mod_uuid, 'get_player_id'),
F = fun()-> % 单连接注释
Accid = lists:concat(["0_c", ID]),
NickName = Accid,
Money = ID - 10000000000,
TmpSql = "INSERT INTO `player` VALUES ",
Sql = lists:concat([TmpSql, " (", ID, ",'", Accid,"','",NickName, "',0,1418365622,1418382607,'0',1,110300,1,0,250,0,", Money,",",Money,",",Money,",",Money,",0,1,1920001,148,294,2,20,0,'0',0,0,0,0,'[]','[]')"]),
Index = Times rem 20 + 1,
Name = list_to_atom(lists:concat(["db",integer_to_list(Index)])),%单线程注释
%io:format("----name:~p ~n", [Name]),
db_sql:execute_test(Sql, Name) %单连接改为 db_sql:excute_test(Sql, db1)
end,%<span style="font-family: Arial, Helvetica, sans-serif;">单连接注释</span>
spawn(F),%<span style="font-family: Arial, Helvetica, sans-serif;">单连接注释</span>
test_inset(Times-1);
false ->
?PRINT("---db end~n",[]),
finish
end.
单线程,基于上面代码作简单修改
插入10K条 花时间约 380秒 ,
插入5K条 花时间约 69秒,
插入1K 条 花时间约 14秒,
每插入1K 条 休眠 10 秒 (共 335 秒但减去 11次*10的休眠,实使用了 225 秒)
二了,数据库连接池其实可以这样使用
mysql:start_link(db1, Host, Port, User, Password, DB, fun(_, _, _, _) -> ok end, Encode),
Count = 20,
Temp = lists:duplicate(Count, dummy),
% 启动conn pool
[begin
mysql:connect( db1, Host, Port, User, Password, DB, Encode, true)
end || _ <- Temp],