Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Limit the growth of ETS storage

Tags:

erlang

elixir

ets

I'm considering using Erlang's ETS as a cache for user searches in a new Elixir project. Based on user input, the system will do lookups using an expensive third-party API.

In order to avoid making duplicate calls for the same user input, I intend to put a cache layer in front of the external API, and ETS seems like a good option for this. However, since there is no limit to the variations of user input, I'm concerned that the storage space required for the ETS table will grow without bound.

In my reading about ETS, I haven't seen anyone else discuss concern about the size of tables in ETS. Is that because this would be an abnormal use case for ETS?

At first blush, my preference would be to limit the number of entries in the ETS table, and reject (i.e. delete) the oldest entries once the limit is reached…

Is there a common strategy for dealing with unbounded number of entries in ETS?

like image 689
Ben Coppock Avatar asked Aug 21 '16 23:08

Ben Coppock


1 Answers

I use ETS tables in production like a 'smart invalidated cache' with a redis API (also it have master-master replication like a SQL WAL log).

The biggest sizes is ~ 200-300Mb and they have more than 1million items. There are no any problems for last 2 years. I know about limits ERL_MAX_ETS_TABLES but havn't any information about sizes.

I have special 'smart indexes' for this tables. ETS select/match/etc is slow because this methods passing all the elements in the table.

like image 73
Vitalii Kulchevych Avatar answered Sep 29 '22 13:09

Vitalii Kulchevych