问题标签 [mnesia]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
462 浏览

database-design - 您如何设计一个模式来有效地查询键值数据库中的嵌套项?

我将 Mnesia 与 Erlang 一起使用,但这个问题适用于任何键值数据库,如 couchdb 等。

我试图摆脱 RDBMS 的思维过程,但我不知道如何有效地实现这种模式。

假设我有一个用户记录,他有很多 SubItemA 记录,其中有很多 SubItem B 记录,所以:

我需要对 SubItem B 运行查询。当它嵌套时这样做是否有效?我应该把它标准化,这样它会更快吗?

我听说有些人使用数据复制,所以数据既嵌套又分离,这很荒谬还是在某些情况下真的有用?

0 投票
3 回答
3944 浏览

erlang - 从网络分区进行在线记忆恢复

是否可以在不重新启动任何相关节点的情况下从 mnesia 集群中的网络分区中恢复?如果是这样,如何去做呢?

我特别想知道:

  • 如何使用标准 OTP mnesia (v4.4.7) 完成此操作
  • 如果有人需要编写什么自定义代码来实现这一点(例如订阅 mnesia running_paritioned_network 事件,确定一个新的主节点,将非主节点的记录合并到主节点,从新主节点强制加载表,清除正在运行的分区网络事件 -示例代码将不胜感激)。
  • 或者,mnesia 绝对不支持在线恢复,并且需要重新启动属于非主分区的节点。

虽然我很欣赏一般分布式系统理论的指针,但在这个问题上,我只对 erlang/OTP mnesia 感兴趣。

0 投票
1 回答
1834 浏览

erlang - mnesia delete_object 异常?

我看不出这里有什么问题,但我可能只是误解了语法。我正在尝试从我的“用户”mnesia 表中删除一个名字为“ryan”的“用户”记录(它们有多个)。这是我所做的:

这是我的记录定义:

这是我得到的例外:

这似乎是一个完美的匹配。什么可能导致这个问题?

0 投票
4 回答
1251 浏览

database-design - Mnesia 中的安全、顺序和可扩展的计数器

我正在用 Erlang/OTP 编写一个应用程序,并希望在版本记录系统上使用顺序计数器。

我首先用

是使用它的经验排除了这些硬性要求:

计数器必须具有以下属性:

  • 严格按顺序排列 - 1 后跟 2 后跟 3 依此类推,依此类推,该序列在一组分布式系统中共享,如果我将您视为“3”而您进入“5”,我需要知道我们已经输了一些通讯,应该重新同步

  • 使用分布式数据库安全

不符合这些要求。

如何实现顺序数据库计数器?

0 投票
2 回答
1954 浏览

erlang - 在 mnesia 集群中,查询哪个节点?

假设您在节点 A 和 B 上复制了一个 mnesia 表。如果在节点 C 上不包含表的副本,我会这样做mnesia:change_config(extra_db_nodes, [NodeA, NodeB]),然后在节点 CI 上执行mnesia:dirty_read(user, bob)节点 C 如何选择要复制到哪个节点的表副本执行查询?

0 投票
1 回答
262 浏览

database - 防止添加主键已存在于 mnesia 中的记录的最佳方法是什么?

假设我有一个简单的记录定义:

我想要一个简单的函数,将这些记录之一添加到 mnesia 数据库中。但是如果已经有一个具有相同主键的条目,我希望它失败。

(在下面的例子中,假设我已经定义了

)

以下作品,但让我觉得有点丑陋......

这也有效,但也很丑陋:

它与上面的不同之处在于上面的 throws

而这个抛出

那么:是否有一些约定来指示这种错误?或者有没有一种内置的方法可以让 mnesia 为我抛出这个错误?

0 投票
1 回答
9791 浏览

erlang - 如何将节点添加到 mnesia 集群?

我是 erlang 和 mnesia 新手..

如何将新的 disc_only_copies 节点添加到已经有模式的 mnesia 数据库?

谢谢

0 投票
4 回答
3890 浏览

erlang - 如何删除额外的节点

我有一组 erlang 节点,它们通过 Mnesia 的“extra_db_nodes”复制它们的数据......我需要升级硬件和软件,所以当我从一个节点到另一个节点时,我必须分离一些节点。

如何删除一个节点并仍然保留插入的数据?

[更新] 删除节点与添加节点一样重要。随着时间的推移,随着集群的增长,它也必须收缩。如果没有,那么 Mnesia 将忙于尝试将数据发送到不存在的节点并填满队列并保持网络繁忙。

[最终更新] 在翻阅 erlang/mnesia 源代码后,我能够确定无法完全分离节点。虽然 del_table_copy 删除了表之间的链接,但它是不完整的。我会结束这个问题,但没有一个密切的描述是充分的。

0 投票
0 回答
180 浏览

erlang - 检测数据/节点分区错误

上次我看到数据/分区节点错误是因为我启动了 erlang shell,它通过 cookie 等连接到同一 CPU 上的节点。启动后,shell 立即在屏幕上转储了分区错误。这真是太麻烦了......

  1. 如何捕获此异常?
  2. 如何以编程方式修复异常?(在另一个问题中问)
  3. 如何防止此异常?

[更新] 我有两个盒子正在运行我的 Yaws 应用程序。数据库通过 Mnesia 的 extra_db_node 功能进行复制。在服务器运行后的某个时间,我登录其中一个框并使用不同的 sname 和相同的 cookie 启动“erl”,以便 3 个节点可以通信。在shell稳定并显示shell提示符后不久……屏幕上显示一个复杂的元组,表明存在网络分区错误。此消息似乎是控制台转储,而不是可能被我的 yaws 应用程序捕获的异常......但我希望我的 yaws 应用程序能够检测到错误并采取纠正措施。

0 投票
2 回答
1546 浏览

database-design - Mnesia中set和ordered_set之间的区别?

set 类型的表和ordered_set 类型的表有什么区别?我对读/写性能的差异、排序的依据、分布式节点的影响等感兴趣。