Using > TicTac AAE Fold:
Filters
Filter by bucket name
This will reduce the number of keys checked.
Buckets without a bucket type
Use the name of the bucket as a binary. For example, to query bucket “cars”, one would use:
<<"cars">>
This example will count the number of keys in the bucket “cars”:
riak_client:aae_fold({
object_stats,
<<"cars">>,
all,
all
}, Client).
How to get the value for Client
is detailed in The Riak Client.
Buckets with a bucket type
Use the name of the bucket type and the bucket as a tuple pair of binaries. For example, to query bucket “dogs” with bucket type “animals”, one would use:
{<<"animals">>, <<"dogs">>}
This example will count the number of keys in the bucket “dogs” of bucket type “animals”:
riak_client:aae_fold({
object_stats,
{<<"animals">>, <<"dogs">>},
all,
all
}, Client).
How to get the value for Client
is detailed in The Riak Client.
Filter by key range
This will reduce the number of keys checked.
From -> To
TicTacAAE stores keys in a bucket in a tree, so if you want a key starting with n
you would have to go through all keys starting with a
to m
before reaching your starting point - and then continue on past to the very last key. This is very inefficient if you want only a specific subset of keys. Thankfully, TicTacAAE’s trees are sorted by keyname, and you can make aae_fold
jump straight to any key before starting and then automatically stop at any later key using the key range filter.
Use the name of the key you want to start and end at as a tuple pair of binaries. For example, to query keys starting with n
, you would filter by n
to o
:
{<<"n">>, <<"o">>}
This example will count the number of keys in the bucket cars
that start with n
:
riak_client:aae_fold({
object_stats,
<<"cars">>,
{<<"n">>,<<"o">>},
all
}, Client).
How to get the value for Client
is detailed in The Riak Client.
As the values used for key filters are binary strings, they are case sensitive. So a
and A
are not the same.
All keys
To query all keys, just use all
for the key range filter. This will count all keys in the bucket cars
:
riak_client:aae_fold({
object_stats,
<<"cars">>,
all,
all
}, Client).
How to get the value for Client
is detailed in The Riak Client.
Filter by segment
This filter is used internally by TictacAAE and for custom replication functions. It’s usage is not covered by this guide.
Use all
for this filter.
Filter by date modified
This will not reduce the number of keys checked, but will reduce the number of keys returned.
This filter is used when you need to locate keys modified in a certain time frame.
The values are passed in a tuple with 3 values:
{date,From,To}
date
is required. From
and To
are either a non-negative interger of seconds since 1970-01-01 00:00:00
, or two tuples containing dates in the format {{Year,Month,Day},{Hour,Minute,Second}}
.
For the function repair_keys_range
, only non-negative interger of seconds since 1970-01-01 00:00:00
works for now.
For example, to get all keys modified between 1970-01-01 00:01:00 (From
= {1970,1,1},{0,1,0}
or 60
) and 1970-01-01 00:02:00 (To
= {1970,1,1},{0,2,0}
or 120
), one would use either of these:
% using easily readable dates
{date,{{1970,1,1},{0,1,0}},{{1970,1,1},{0,2,0}}}
% or using seconds since 1970-01-01 00:00:00
{date,60,120}
This example returns all keys in the “cars” bucket that were modified after 12-noon on 2022-05-01 (From
= 2022-05-01 12:00:00 and To
= 2022-05-02 00:00:00):
riak_client:aae_fold({
object_stats,
<<"cars">>,
all,
{date,{{2022,5,1},{12,0,0}},{{2022,5,2},{0,0,0}}}
}, Client).
How to get the value for Client
is detailed in The Riak Client.
It’s easier to use the {{Year,Month,Day},{Hour,Minute,Second}}
format for From
and To
, but if you want to use the number of seconds instead, they can be worked out using this helper function:
Modified_Filter_Calculator = fun (StartDateTime, EndDateTime) ->
EpochTime = calendar:datetime_to_gregorian_seconds({{1970,1,1},{0,0,0}}),
LowTS = calendar:datetime_to_gregorian_seconds(StartDateTime) - EpochTime,
HighTS = calendar:datetime_to_gregorian_seconds(EndDateTime) - EpochTime,
{date, LowTS, HighTS}
end.
This can then be used like so to get the filter value for the range of “2022-01-01 00:00:00” to “2022-02-01 00:00:00” (i.e. all of January 2022):
Modified_Filter_Value = Modified_Filter_Calculator(
{{2022,1,1},{0,0,0}},
{{2022,2,1},{0,0,0}}
),
riak_client:aae_fold({
object_stats,
<<"cars">>,
all,
Modified_Filter_Value
}, Client).
Or in one command to make it easily re-usable:
riak_client:aae_fold({
object_stats,
<<"cars">>,
all,
Modified_Filter_Calculator({{2022,1,1},{0,0,0}}, {{2022,2,1},{0,0,0}})
}, Client).
Filter by sibling count
This will not reduce the number of keys checked, but will reduce the number of keys returned.
This filter is used when you need to locate keys with more than a given number of siblings. It can only be used with find_keys
.
Filter by object size
This will not reduce the number of keys checked, but will reduce the number of keys returned.
This filter is used when you need to locate keys whose object size is greater than a specified value. It can only be used with find_keys
.