Erlang 你怎么样';传统智慧';在Mnesia中实施的概念?参考完整性、复制、高容量

Erlang 你怎么样';传统智慧';在Mnesia中实施的概念?参考完整性、复制、高容量,erlang,mnesia,Erlang,Mnesia,我想学习一门函数式语言,Mnesia似乎是“杀手级应用”,足以让我学习Erlang。我想先澄清一些概念 记忆是如何在关系上强化参照完整性的?旧文章说,它不是在数据级别强制执行的。现在换了吗?或者Erlang和Mnesia是否提供了允许我们编写可证明正确且可维护的代码以维护引用完整性的特性?甚至对于n个表之间的传递关系 查询语言是否支持不包含全文的即席查询 大容量分布式系统怎么样?有4GB的文件限制,对吗?如何将1000万(或更多)行写入数据库?它是否会自动将自己分配到其他节点,从而成为高可用性?

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

记忆是如何在关系上强化参照完整性的?旧文章说,它不是在数据级别强制执行的。现在换了吗?或者Erlang和Mnesia是否提供了允许我们编写可证明正确且可维护的代码以维护引用完整性的特性?甚至对于n个表之间的传递关系

查询语言是否支持不包含全文的即席查询

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


它是否可以轻松地进行配置,以便跨物理位置进行复制,如MySQL主从设置

有几个问题:

  • 引用完整性-不,mnesia不在表之间保持引用完整性。Mnesia仅是k/v存储,但它甚至可以跨表提供原子事务。因此,您必须自己保持引用完整性,但mnesia可以帮助您将事务编写为函数,并启用嵌套事务。Mnesia将表和索引之间的引用完整性保持在最大值;-)
  • 临时查询-不,它不适用于mnesia,但
    qlc
    模块可帮助您完成此任务
  • 全文-不,没有任何现成的支持。Mnesia能够用应用程序语言(Erlang)编写事务,这对您有所帮助,但您必须制定自己的解决方案
  • 高容量—有碎片化的表来处理更大的数据量
  • 高可用性—支持按表复制。(还支持表片段的副本。)
  • 主从-mnesia支持开箱即用的主-主复制。如果您需要主从复制,则必须使用事务日志支持推出自己的解决方案。(见和。)

  • 所以我需要QLC,我可以对我的数据进行特殊查询?请回答“碎片表”是否是操作上的难题(人类是否应该跟踪碎片),以及它是否是HA的必要功能。@aitchnyu:Erlang shell中有
    qlc
    支持,因此您可以在shell中直接查询mnesia。您可以在应用程序中利用
    qlc
    进行即席查询,但这并不像SQL那么简单。碎片副本可以在您的集群上自动部署,这是默认行为,因此不会让操作头疼。您必须使用
    mnesia:activity
    访问碎片表,这是它的“最大”问题(这不是大问题)。如果需要,您还可以创建自己的碎片。(例如,我们这样做是为了将一些记录保存在同一个片段中以供订购。)