首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制ETS存储的增长

限制ETS存储的增长
EN

Stack Overflow用户
提问于 2016-08-22 07:37:13
回答 2查看 850关注 0票数 7

我正在考虑在一个新的Elixir项目中使用Erlang的ETS作为用户搜索的缓存。根据用户输入,系统将使用昂贵的第三方API进行查找。

为了避免对相同的用户输入进行重复调用,我打算在外部API之前放置一个缓存层,而ETS似乎是一个很好的选择。但是,由于对用户输入的变化没有限制,我担心ETS表所需的存储空间会无限制地增长。

在我读到的关于ETS的文章中,我没有看到其他人讨论过ETS中表的大小问题。这是因为这将是ETS的一个不正常的用例吗?

乍一看,我的首选是限制ETS表中条目的数量,并在达到限制时拒绝(即删除)…中最旧的条目

在ETS中是否有处理无限数量的条目的通用策略?

EN

回答 2

Stack Overflow用户

发布于 2016-08-24 18:07:26

我在生产环境中使用ETS表,就像一个带有redis API的“智能失效缓存”(还有像SQL WAL日志这样的主-主复制)。

最大的尺寸约为200-300Mb,它们有100多万个项目。在过去的两年中没有任何问题。我知道limits ERL_MAX_ETS_TABLES,但没有任何有关尺寸的信息。

我对这个表有特殊的“智能索引”。ETS select/match/etc比较慢,因为这个方法会传递表中的所有元素。

票数 2
EN

Stack Overflow用户

发布于 2016-08-31 04:30:25

使用ets:tab2list(TableId)函数将ETS表转换为通用列表。这样做之后,您就可以使用众所周知的BIF length(List)检查列表的大小了。最后,您现在可以设置缓冲区(只需使用模式匹配、if或case表达式检查列表的大小

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39069758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档