fogfish/cache

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.

@fogfish
ok,i know what you say!thanks!