Bladeren bron

ft: 模板添加

master
SisMaker 3 jaren geleden
bovenliggende
commit
a3da1fe8bf
3 gewijzigde bestanden met toevoegingen van 152 en 0 verwijderingen
  1. +47
    -0
      src/template/utDBLoad.erl
  2. +91
    -0
      src/template/utEtsFold.erl
  3. +14
    -0
      src/template/utMapsFold.erl

+ 47
- 0
src/template/utDBLoad.erl Bestand weergeven

@ -0,0 +1,47 @@
-module(utDBLoad).
-export([loadData/1]).
%%-----------------------------------------------------------------
%% load_data/1
%% @doc
%% ```
%%
%% '''
%% @end
%% -----------------------------------------------------------------
-spec loadData(non_neg_integer()) -> no_return().
%% -----------------------------------------------------------------
% #4 使 id<max and limit size;
% #id作为下一页的最大id使用
% ##20-40:82959503-82620566 60-80:82334851 260-280:80106996-79887685 660-680:76010656-75810657 1660-1680:53482458-53240959 3660-3680:32532145-32332146
% #
% select * from order_table order by id desc limit 200000;
% #
% #1.539s
% select * from order_table where id <=82543981 order by id desc limit 200000;
loadData(Limit) ->
ValueList = db:reads_mysql(dbTableName, [], [{key_id, desc}], [Limit]),
NextId = dealValueList(ValueList, Limit, 0, 0),
loadLeft(NextId, Limit).
loadLeft(0, _Limit) ->
ok;
loadLeft(NextId, Limit) ->
ValueList = db:reads_mysql(dbTableName, [{key_id, "<", NextId}], [{key_id, desc}], [Limit]),
NewNextId = dealValueList(ValueList, Limit, 0, 0),
loadLeft(NewNextId, Limit).
dealValueList([], Limit, SumCnt, NextId) ->
case SumCnt >= Limit of
true ->
NextId;
_ ->
0
end;
dealValueList([OneInfo | AllyList], Limit, SumCnt, _NextId) ->
NewNextId = parseData(OneInfo),
dealValueList(AllyList, Limit, SumCnt + 1, NewNextId).
parseData(OneInfo) ->
_NewNextId = element(1, OneInfo).

+ 91
- 0
src/template/utEtsFold.erl Bestand weergeven

@ -0,0 +1,91 @@
-module(utEtsFold).
%% ordered_set和由单个 ETS (select/2)(Next ) safe_fixtable/ 2
-export([rank/5, fold/2]).
rank(TabId, PageInfo, Page, Limit, TotalCnt) ->
%% tab
MS =
case PageInfo == 0 orelse PageInfo of
true ->
ets:fun2ms(fun(T) -> T end);
"" ->
ets:fun2ms(fun(T) -> T end);
_ ->
try binary_to_term(list_to_binary(PageInfo)) of
KeyTerm when KeyTerm == <<"">>; KeyTerm == "" ->
ets:fun2ms(fun(T) -> T end);
KeyTerm ->
ets:fun2ms(fun({K, _V} = T) when K < KeyTerm -> T end)
catch _C:_R ->
ets:fun2ms(fun(T) -> T end)
end
end,
case ets:select_reverse(TabId, MS, Limit) of
'$end_of_table' ->
{true, {<<"">>, []}};
{AllyIds, '$end_of_table'} ->
{true, makeRankData(AllyIds)};
{AllyIds, _NextKey} ->
Length = length(AllyIds),
if
Length < Limit ->
{true, makeRankData(AllyIds)};
true ->
NewCurCnt = Page * Limit + Length,
case NewCurCnt >= TotalCnt of
true ->
{true, makeRankData(AllyIds)};
_ ->
{false, makeRankData(AllyIds)}
end
end
end.
makeRankData(AllyIds) ->
makeRankData(AllyIds, <<"">>, []).
makeRankData([], LastKey, Acc) ->
case LastKey of
<<"">> ->
{LastKey, lists:reverse(Acc)};
_ ->
{erlang:term_to_binary(LastKey), lists:reverse(Acc)}
end;
makeRankData([{CurKey, Uuid} | AllyIds], LastKey, Acc) ->
case ets:lookup(ets_pub_rank_info, Uuid) of
[OneData] ->
makeRankData(AllyIds, CurKey, [OneData | Acc]);
_ ->
makeRankData(AllyIds, LastKey, Acc)
end.
fold(TabId, Limit) ->
ets:safe_fixtable(TabId, true),
try
case ets:match_object(TabId, '$1', Limit) of
'$end_of_table' ->
ok;
{ValueList, NextKey} ->
matchDoFun(ValueList),
continueNext(NextKey)
end
after
ets:safe_fixtable(TabId, false)
end.
continueNext(NextKey) ->
case ets:match_object(NextKey) of
'$end_of_table' ->
ok;
{ValueList, NewNextKey} ->
matchDoFun(ValueList),
continueNext(NewNextKey)
end.
matchDoFun(_ValueList) ->
%% do something
ok.

+ 14
- 0
src/template/utMapsFold.erl Bestand weergeven

@ -0,0 +1,14 @@
-module(utMapsFold).
-export([fold/1]).
fold(Map) ->
fold(maps:iterator(Map), []).
fold(Iterator, AccList) ->
case maps:next(Iterator) of
{Key, Value, NextIter} ->
fold(NextIter, [{Key, Value} | AccList]);
none ->
AccList
end.

Laden…
Annuleren
Opslaan