ets:select vs mnesia:select哪个更好用。还有在插入和删除的情况下,我们应该使用这两个中的哪一个。我正在研究射精。有指针吗?
tl;dr
它们是为不同目的构建的工具:ETS是一个快速的K/V存储,Mnesia是在它们之上构建的数据库。使用适合您的用例的工具。
讨论
Mnesia建立在ETS/DETS之上。哪个更有效取决于你在寻找什么功能。如果你有简单的表,没有额外的逻辑,只有一个简单的键来索引,并且只会在内存或磁盘中使用该表,那么ETS和Mnesia之间没有区别,你不会使用任何Mnesia功能。
另一方面,如果您需要数据上的多个索引,想要实现一些缓存行为,需要磁盘上的持久性但缓存的索引性能,以及数据库系统的其他期望,那么您要么必须在ETS/DETS之上自己实现Mnesia类型的功能,要么只需使用Mnesia。
很多时候,我在原型设计时(甚至在生产中的早期版本的功能上)从几个ETS表开始,然后开始在磁盘上找到我需要序列化数据的地方,然后意识到我需要多个索引等,最后把最初在ETS中的许多数据管理内容移到了Mnesia中。如果你正确地抽象了数据访问的概念,那么无论哪种方式,改变系统这一部分的实现都不是问题。不过,如果你的模块中分散了一些选择调用,那么你可能还有其他体系结构问题需要解决,这些问题比ETS与Mnesia更重要。
无论您使用什么,请确保您没有以整个系统的所有状态的中央存储库的形式创建系统范围的瓶颈。这是一个错误,我看到很多人来自(C/Python/$imprative_lang+Postgres/MariaDB/$rbdms)类型的后台制作。
阅读ErlMUD评论:架构,位置的第2-6段,在更高的层次上对状态表示进行架构讨论。