can you provide api that i can get Multiple data
a29107a opened this issue · 3 comments
the api i want to used like this:
i saved some data to the cache,and i want to get some data page and page.
of course,i can use the api -> cache:all() to replace, but not a good way because too many data.
like mysql:
select * from table limit 1,10;
Hello,
Thank you for your comments!
This is an interesting request. I'd like to understand your use-cases and reasons of asking this feature.
This feature sounds as typical I/O patterns for in-memory data storages (e.g. ETS, Redis, ...).
What is the reason to implement this feature as part of caching?
First of all, it requires a different storage strategy for cache elements. We need to compromise O(1)
vs O(log N)
. Fortunately, existed cache implementation has a config option https://github.com/fogfish/cache/blob/master/src/cache.erl#L131
{ok, _} = cache:start_link([{type, ordered_set}]).
This option ensures that keys are sorted alphanumerically within the segments. However, segments are still sorted by time. Therefore, the total ordering is lexicographical + time. Let's assume cache has three segments:
Seg 1 | Seg 2 | Seg 3 |
---|---|---|
aa | ab | ba |
ac | ca | cb |
bc | bb | - |
cc | - | - |
The total key order is aa, ac, bc, cc, ab, ca, bb, ba, cb. Is this ordering schema suitable for your use-cases?
Please aware that cache api provides you an ability to access all ETS tables
https://github.com/fogfish/cache/blob/master/src/cache.erl#L166
cache:i(..., heap)
You can use ETS query api to fetch data.