问题标签 [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.
database-design - 您如何设计一个模式来有效地查询键值数据库中的嵌套项?
我将 Mnesia 与 Erlang 一起使用,但这个问题适用于任何键值数据库,如 couchdb 等。
我试图摆脱 RDBMS 的思维过程,但我不知道如何有效地实现这种模式。
假设我有一个用户记录,他有很多 SubItemA 记录,其中有很多 SubItem B 记录,所以:
我需要对 SubItem B 运行查询。当它嵌套时这样做是否有效?我应该把它标准化,这样它会更快吗?
我听说有些人使用数据复制,所以数据既嵌套又分离,这很荒谬还是在某些情况下真的有用?
erlang - 从网络分区进行在线记忆恢复
是否可以在不重新启动任何相关节点的情况下从 mnesia 集群中的网络分区中恢复?如果是这样,如何去做呢?
我特别想知道:
- 如何使用标准 OTP mnesia (v4.4.7) 完成此操作
- 如果有人需要编写什么自定义代码来实现这一点(例如订阅 mnesia running_paritioned_network 事件,确定一个新的主节点,将非主节点的记录合并到主节点,从新主节点强制加载表,清除正在运行的分区网络事件 -示例代码将不胜感激)。
- 或者,mnesia 绝对不支持在线恢复,并且需要重新启动属于非主分区的节点。
虽然我很欣赏一般分布式系统理论的指针,但在这个问题上,我只对 erlang/OTP mnesia 感兴趣。
erlang - mnesia delete_object 异常?
我看不出这里有什么问题,但我可能只是误解了语法。我正在尝试从我的“用户”mnesia 表中删除一个名字为“ryan”的“用户”记录(它们有多个)。这是我所做的:
这是我的记录定义:
这是我得到的例外:
这似乎是一个完美的匹配。什么可能导致这个问题?
database-design - Mnesia 中的安全、顺序和可扩展的计数器
我正在用 Erlang/OTP 编写一个应用程序,并希望在版本记录系统上使用顺序计数器。
我首先用
是使用它的经验排除了这些硬性要求:计数器必须具有以下属性:
严格按顺序排列 - 1 后跟 2 后跟 3 依此类推,依此类推,该序列在一组分布式系统中共享,如果我将您视为“3”而您进入“5”,我需要知道我们已经输了一些通讯,应该重新同步
使用分布式数据库安全
如何实现顺序数据库计数器?
erlang - 在 mnesia 集群中,查询哪个节点?
假设您在节点 A 和 B 上复制了一个 mnesia 表。如果在节点 C 上不包含表的副本,我会这样做mnesia:change_config(extra_db_nodes, [NodeA, NodeB])
,然后在节点 CI 上执行mnesia:dirty_read(user, bob)
节点 C 如何选择要复制到哪个节点的表副本执行查询?
database - 防止添加主键已存在于 mnesia 中的记录的最佳方法是什么?
假设我有一个简单的记录定义:
我想要一个简单的函数,将这些记录之一添加到 mnesia 数据库中。但是如果已经有一个具有相同主键的条目,我希望它失败。
(在下面的例子中,假设我已经定义了
)
以下作品,但让我觉得有点丑陋......
这也有效,但也很丑陋:
它与上面的不同之处在于上面的 throws
而这个抛出
那么:是否有一些约定来指示这种错误?或者有没有一种内置的方法可以让 mnesia 为我抛出这个错误?
erlang - 如何将节点添加到 mnesia 集群?
我是 erlang 和 mnesia 新手..
如何将新的 disc_only_copies 节点添加到已经有模式的 mnesia 数据库?
谢谢
erlang - 如何删除额外的节点
我有一组 erlang 节点,它们通过 Mnesia 的“extra_db_nodes”复制它们的数据......我需要升级硬件和软件,所以当我从一个节点到另一个节点时,我必须分离一些节点。
如何删除一个节点并仍然保留插入的数据?
[更新] 删除节点与添加节点一样重要。随着时间的推移,随着集群的增长,它也必须收缩。如果没有,那么 Mnesia 将忙于尝试将数据发送到不存在的节点并填满队列并保持网络繁忙。
[最终更新] 在翻阅 erlang/mnesia 源代码后,我能够确定无法完全分离节点。虽然 del_table_copy 删除了表之间的链接,但它是不完整的。我会结束这个问题,但没有一个密切的描述是充分的。
erlang - 检测数据/节点分区错误
上次我看到数据/分区节点错误是因为我启动了 erlang shell,它通过 cookie 等连接到同一 CPU 上的节点。启动后,shell 立即在屏幕上转储了分区错误。这真是太麻烦了......
- 如何捕获此异常?
- 如何以编程方式修复异常?(在另一个问题中问)
- 如何防止此异常?
[更新] 我有两个盒子正在运行我的 Yaws 应用程序。数据库通过 Mnesia 的 extra_db_node 功能进行复制。在服务器运行后的某个时间,我登录其中一个框并使用不同的 sname 和相同的 cookie 启动“erl”,以便 3 个节点可以通信。在shell稳定并显示shell提示符后不久……屏幕上显示一个复杂的元组,表明存在网络分区错误。此消息似乎是控制台转储,而不是可能被我的 yaws 应用程序捕获的异常......但我希望我的 yaws 应用程序能够检测到错误并采取纠正措施。
database-design - Mnesia中set和ordered_set之间的区别?
set 类型的表和ordered_set 类型的表有什么区别?我对读/写性能的差异、排序的依据、分布式节点的影响等感兴趣。