From 2a106d0dc58f45d557ddccc14575305616fe5854 Mon Sep 17 00:00:00 2001 From: martinsumner Date: Tue, 13 Dec 2016 19:38:14 +0000 Subject: [PATCH] Experiment with temporary us eof ETS table Rather than expensive lists:ukeymerge, try use a temporary ETS table. --- src/leveled_pmem.erl | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/leveled_pmem.erl b/src/leveled_pmem.erl index 0c61acf..aee7f7f 100644 --- a/src/leveled_pmem.erl +++ b/src/leveled_pmem.erl @@ -102,14 +102,16 @@ check_index(Hash, L0Index) -> to_list(Slots, FetchFun) -> SW = os:timestamp(), - SlotList = lists:reverse(lists:seq(1, Slots)), - FullList = lists:foldl(fun(Slot, Acc) -> - Tree = FetchFun(Slot), - L = leveled_skiplist:to_list(Tree), - lists:ukeymerge(1, Acc, L) - end, - [], - SlotList), + Tab = ets:new(temp_l0, [private, ordered_set]), + SlotList = lists:seq(1, Slots), + lists:foreach(fun(Slot) -> + Tree = FetchFun(Slot), + L = leveled_skiplist:to_list(Tree), + ets:insert(Tab, L) + end, + SlotList), + FullList = ets:tab2list(Tab), + true = ets:delete(Tab), leveled_log:log_timer("PM002", [length(FullList)], SW), FullList.