作者:手机用户2502884057 | 来源:互联网 | 2023-05-22 10:42
ets:select vs mnesia:select哪个更好用.并且在插入和删除的情况下我们应该使用这两个中的一个.我正在研究ejabberd.Any指针?
1> zxq9..:
TL;博士
它们是为不同目的而构建的工具:ETS是一个快速的K/V存储,Mnesia是在它们之上构建的数据库.使用适合您的用例的工具.
讨论
Mnesia建立在ETS/DETS之上.哪个更有效可归结为您正在寻找的功能.如果你有简单的表没有额外的逻辑,一个简单的索引键,只会在内存或磁盘上使用表,那么ETS和Mnesia之间没有区别,你就不会使用任何Mnesia功能.
另一方面,如果您需要多个数据索引,想要实现一些缓存行为,需要磁盘持久性但缓存索引性能,以及您期望从数据库系统中获得的其他东西,那么您将拥有在ETS/DETS之上自己实现Mnesia类型的功能,或者只使用Mnesia.
我经常在原型设计时(或者甚至在生产中的早期版本的功能上)开始使用一些ETS表,然后开始查找我需要数据序列化并在磁盘上的位置,然后意识到我需要多个索引等,并且最终需要移动很多最初在ETS进入Mnesia的数据管理内容.如果您正确地抽象出数据访问的概念,那么以任何方式更改系统的这一部分的实现都不是问题.但是,如果你有分散在整个模块中的选择调用,那么你可能还有其他架构问题要比ETS和Mnesia重要得多.
无论您使用什么,请确保您没有像整个系统的所有状态的中央存储库一样创建系统范围的瓶颈.这是一个错误,我看到很多人来自(C/Python/$ imperative_lang + Postgres/MariaDB/$ rbdms)背景制作.
阅读ErlMUD评论的第2-6段:建筑,地点,用于在高层建筑讨论状态表示.
"但是,如果你有分散在整个模块中的选择呼叫,那么你可能还有其他架构问题需要解决,这比ETS和Mnesia重要得多." 这个很重要.解耦和模块化总是好的.