summaryrefslogtreecommitdiff
path: root/src/db.erl
diff options
context:
space:
mode:
authorMagnus Ahltorp <map@kth.se>2014-10-25 15:22:09 +0200
committerMagnus Ahltorp <map@kth.se>2014-10-25 15:22:09 +0200
commit2483f0cf09ccc4cf73558c7a85bbb51a72d29c3a (patch)
treed618ac06c64d92b5a350955391d5abd352563878 /src/db.erl
parent868a029e39ec8e9aa368da917146d088edee4d2f (diff)
Optimize db:get_by_indices by not fetching entry and implementing index:getrange
Diffstat (limited to 'src/db.erl')
-rw-r--r--src/db.erl12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/db.erl b/src/db.erl
index fade7ce..f7c2057 100644
--- a/src/db.erl
+++ b/src/db.erl
@@ -129,6 +129,9 @@ index_for_leafhash(LeafHash) ->
leafhash_for_index(Index) ->
index:get(index_path(), Index).
+leafhash_for_indices(Start, End) ->
+ index:getrange(index_path(), Start, End).
+
leafhash_for_entryhash(EntryHash) ->
perm:readfile(entryhash_root_path(), EntryHash).
@@ -138,11 +141,10 @@ get_by_indices_helper(Start, End) ->
EndBound = min(End, size() - 1),
case Start =< EndBound of
true ->
- lists:map(fun (Index) ->
- LeafHash = leafhash_for_index(Index),
- Entry = entry_for_leafhash(LeafHash),
- {Index, LeafHash, Entry}
- end, lists:seq(Start, EndBound));
+ lists:map(fun ({LeafHash, Index}) ->
+ {Index, LeafHash, notfetched}
+ end, lists:zip(leafhash_for_indices(Start, EndBound),
+ lists:seq(Start, EndBound)));
false ->
[]
end.