我正在考虑将Erlang的ETS用作新Elixir项目中用户搜索的缓存。根据用户输入,系统将使用昂贵的第三方API进行查找。
为了避免对同一个用户输入进行重复调用,我打算在外部API前放置一个缓存层,而ETS似乎是一个很好的选择。但是,由于用户输入的变化没有限制,我担心ETS表所需的存储空间会不受限制地增长。
在我关于ETS的阅读中,我还没有看到其他人讨论过关于ETS中表格大小的问题。是因为这是ETS的一个异常用例吗?
乍一看,我的偏好是限制ETS表中的条目数,并在达到限制后拒绝(即删除)最旧的条目......
在ETS中处理无限数量的条目是否有共同的策略?
答案 0 :(得分:2)
我在生产中使用ETS表,就像使用redis API的“智能无效缓存”一样(它也具有像SQL WAL日志一样的主 - 主复制)。
最大尺寸为~200-300Mb,它们有超过100万件物品。过去两年没有任何问题。我知道限制ERL_MAX_ETS_TABLES
,但没有任何关于尺寸的信息。
我有这个表的特殊“智能索引”。 ETS select / match / etc很慢,因为这种方法传递了表中的所有元素。
答案 1 :(得分:0)
使用ets:tab2list(TableId)
函数将ETS表转换为公共列表。完成后,您可以使用众所周知的BIF length(List)
检查列表的大小。
最后但并非最不重要的是,您现在可以设置缓冲区(只需使用模式匹配检查列表的大小, if 或 case 表达