如何在Mnesia中实施“传统智慧”概念?参照完整性,复制,高容量

时间:2012-02-06 06:21:46

标签: erlang mnesia

我想学习一种功能语言,Mnesia似乎是“杀手级应用程序”,足以让我学习Erlang。我想先澄清一些概念。

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

查询语言是否支持即席查询,缺少全文?

高容量分布式系统怎么样?有4GB的文件限制,对吗?如何向数据库写入10(或更多)百万行?它会自动分配给其他节点,以便它变为高可用性吗?这与碎片有关;我想知道这是否是我每天都要担心的操作概念。

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

1 个答案:

答案 0 :(得分:4)

这是几个问题:

  1. 参照完整性 - 不,mnesia不会在表之间保持参照完整性。 Mnesia只是k / v存储,但即使跨表也提供原子事务。因此,您必须自己保持参照完整性,但mnesia可以帮助您将事务编写为函数并启用嵌套事务。 Mnesia在max; - )
  2. 中保持表和索引之间的引用完整性
  3. 即席查询 - 不,它不适用于mnesia,但qlc模块可以帮助您完成此任务。
  4. 全文 - 没有任何支持开箱即用。 Mnesia用应用程序语言(Erlang)编写事务的能力可以帮助你,但你必须自己制定解决方案。
  5. 高容量 - 存在碎片表以解决更大的数据量。
  6. 高可用性 - 表副本支持此功能。 (还支持表碎片的复制。)
  7. Master-slave - mnesia支持开箱即用的master-master复制。如果您需要主从复制,则必须在支持事务日志的情况下推出自己的解决方案。 (请参阅mnesia:subscribe/1Mnesia Event Handling。)