我想学习一门函数式语言,而 Mnesia 似乎是我学习 Erlang 的“杀手级应用”。我想先澄清一些概念。

Mnesia 如何在关系上强制执行 参照完整性 ?老文章说它不是在数据级别强制执行的。现在改了吗?或者 Erlang 和 Mnesia 是否提供了允许我们编写可证明正确且可维护的代码来维护参照完整性的功能?即使是跨 n 个表的传递关系?

查询语言是否支持 临时查询 ,缺少全文?

大容量分布式系统 怎么样?有 4GB 的文件限制,对吧?如何将 10(或更多)百万行写入数据库?并且会自动将自己分发到其他节点,从而变成 高可用 吗?这与碎片化有关;我想知道这是否是我每天都必须担心的操作概念。

是否可以轻松配置以便跨物理位置 进行 复制,就像 MySQL 主从设置一样?

最佳答案

这是几个问题:

  • 参照完整性 - 不,mnesia 不保持跨表的参照完整性。 Mnesia 只是 k/v 存储,但为您提供甚至跨表的原子事务。因此,您必须自己保持参照完整性,但是 mnesia 可以帮助您将事务编写为函数并启用嵌套事务。 Mnesia 将表和索引之间的参照完整性保持在最大值 ;-)
  • 临时查询 - 不,它不适用于 mnesia,但 qlc 模块可以帮助您完成此任务。
  • 全文 - 不,没有任何开箱即用的支持。 Mnesia 使用应用程序语言 (Erlang) 编写事务的能力可以帮助您解决这个问题,但您必须制定自己的解决方案。
  • 高容量 - 有碎片表来处理更大的数据量。
  • 高可用性 - 表副本对此提供支持。 (也支持表片段的副本。)
  • 主从 - mnesia 支持开箱即用的主-主复制。如果您需要主从复制,您必须在支持事务日志的情况下推出自己的解决方案。 (参见 mnesia:subscribe/1 Mnesia Event Handling 。)
  • 关于erlang - 'conventional wisdom' 概念如何在 Mnesia 中实现?参照完整性、复制、高容量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9156293/

    10-13 02:06