Skip to content

Commit cbe909a

Browse files
committed
Merge pull request #2 from basho/jdb-faster-slide
Improve performance of slide histogram
2 parents 4b72c41 + b6bb134 commit cbe909a

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

src/folsom_sample_slide.erl

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,23 +33,27 @@
3333

3434
-include("folsom.hrl").
3535

36+
-define(WIDTH, 16). %% Keep this a power of two
37+
3638
new(Size) ->
3739
Sample = #slide{window = Size},
3840
Pid = folsom_sample_slide_sup:start_slide_server(?MODULE, Sample#slide.reservoir, Sample#slide.window),
3941
Sample#slide{server=Pid}.
4042

4143
update(#slide{reservoir = Reservoir} = Sample, Value) ->
4244
Moment = moment(),
43-
ets:insert(Reservoir, {Moment, Value}),
45+
X = erlang:system_info(scheduler_id),
46+
Rnd = X band (?WIDTH-1),
47+
ets:insert(Reservoir, {{Moment, Rnd}, Value}),
4448
Sample.
4549

4650
get_values(#slide{window = Window, reservoir = Reservoir}) ->
4751
Oldest = moment() - Window,
48-
ets:select(Reservoir, [{{'$1','$2'},[{'>=', '$1', Oldest}],['$2']}]).
52+
ets:select(Reservoir, [{{{'$1','_'},'$2'},[{'>=', '$1', Oldest}],['$2']}]).
4953

5054
moment() ->
5155
folsom_utils:now_epoch().
5256

5357
trim(Reservoir, Window) ->
5458
Oldest = moment() - Window,
55-
ets:select_delete(Reservoir, [{{'$1','_'},[{'<', '$1', Oldest}],['true']}]).
59+
ets:select_delete(Reservoir, [{{{'$1','_'},'_'},[{'<', '$1', Oldest}],['true']}]).

0 commit comments

Comments
 (0)