首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大多数情况下只读使用DETS

大多数情况下只读使用DETS
EN

Stack Overflow用户
提问于 2011-01-25 12:47:03
回答 3查看 1.2K关注 0票数 4

所以我一直在使用ETS - works非常棒。但是,我将它用作路由数据的缓存--当模块加载时我加载这些数据,并在发生更改时保存这些数据(读取的数据远远多于写入的数据)。

我在想,DETS会让事情变得更清晰--我不必担心管理表的持久性。这会是对DETS的一个好的使用吗?(大小不是问题,最关心的是读取性能的显著提高-所有数据都可以轻松地放入内存中)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-25 17:33:15

ETS在大多数情况下比ETS慢得多,但我猜如果你的数据很小,那么大多数情况下它会被磁盘缓存缓存,并且在你第二次读取它时会更快,所以最好的办法是根据你的使用类型来尝试它

但是你有没有考虑过直接使用Mnesia而不是ETS呢?使用Mnesia表类型disc_copies,您将获得ETS的速度和持久性

票数 4
EN

Stack Overflow用户

发布于 2011-01-25 16:44:58

直接从Dets man page

“由于Dets执行的所有操作都是磁盘操作,因此重要的是要认识到,单个查找操作涉及一系列磁盘寻道和读取操作。因此,Dets函数比相应的Ets函数慢得多,尽管Dets输出了类似的接口。”

也就是说,对于以读取为主的存储,Dets不是最佳选择。

(我必须承认,我发现这个设计决策很奇怪--一个更好的实现应该缓存最近的查找。但是,由于Ets和Dets是Erlang中基本功能,我猜实现者将优化留给了用户。)

票数 2
EN

Stack Overflow用户

发布于 2011-01-26 11:09:15

对于极少写入,读取许多你可以保存在内存中的数据,检查一个'Mochiglobal‘。Mochiweb有一个整洁的模块,它通过代码管理系统滥用Erlang的共享堆作为模块常量,通过动态生成具有给定值作为常量的模块来提供对术语的超快访问。

Riak使用Mochiglobal表示环状态IIRC。

她的消息来源是:

https://github.com/mochi/mochiweb/blob/master/src/mochiglobal.erl

当然,这里绝对没有持久性,但如果您希望对读取进行大量优化,那么就没有比这更好的了。

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

https://stackoverflow.com/questions/4790090

复制
相关文章

相似问题

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