问题标签 [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 投票
3 回答
1396 浏览

mysql - Mnesia 中的唯一约束

我正在开发一个需要大量数据库写入的 Erlang 应用程序。除了主键之外,我的模式还有另一个强制执行唯一约束的属性。

假设我有一个 ID、一个 unique_constraint_field 和一些其他字段。我现在需要更新数据库中与唯一 ID 对应的行,因为没有其他行应该已经具有我要更新的 unique_constraint_field 值的值。

由于大量更新(每次更新只会影响 1 行)我需要执行(也需要低延迟)我依靠主键和对该属性的唯一约束来捕获重复,而不是更新语句使用子查询。这允许我在单个查询中执行更新(这发生在 95% 的时间),在剩余的 5% 中,我可以捕获异常以对主键或唯一属性违规采取必要的措施。

我目前正在使用 ODBC mysql 驱动程序。但是,驱动程序会为任何错误返回一个非常通用的错误消息。虽然现在当我假设任何错误都是关键违规时我的原型运行良好,但这个模型显然存在很大缺陷。我找不到任何其他体面的驱动程序/方式来从 erlang 连接到 mysql。

我正在考虑切换到 Mnesia(满足我的速度要求的纯内存模式),因为 Erlang 和 Mnesia 融合得如此无缝。但是,我看到 Mnesia 没有任何唯一的键约束,我可以使用这些约束在单个查询中执行我的数据库更新。

我需要有关如何从 Erlang 中最好地实现此要求的建议。有没有办法在 Mnesia 中执行条件更新?或者,我应该考虑其他任何高速数据库替代方案吗?非常感谢任何帮助/见解。

0 投票
2 回答
1130 浏览

erlang - erlang - 如何将元组内容与 qlc 和 mnesia 匹配?

我有这个记录的记忆表。

Peer_key 是一个元组 {FileId, ClientId},现在我需要从所有具有特定 FileId 的 peer 中提取 ip_port 字段。

我想出了一个可行的解决方案,但我不确定这是否是一个好方法:

谢谢。

0 投票
2 回答
823 浏览

erlang - 在 Erlang 中,升级分布式系统的最佳方法是什么?

如果我有多个用 Erlang 编写的 Web 服务器运行(负载平衡)并且 Mnesia 用于后端数据库,那么将整个系统升级到更新版本的最佳方法是什么?

0 投票
2 回答
665 浏览

erlang - 如何在 Mnesia 中定义外键

Mnesia 中是否有与此 SQL 语句等效的语句?

0 投票
3 回答
1444 浏览

erlang - 最终与 erlang 保持一致的 mnesia 数据库。最佳实践有人吗?

我正在用erlang写一个bittorrent跟踪器。鉴于服务的性质,我不需要绝对的一致性(即,客户端可以对稍微过时的对等列表或洪流状态非常满意)。

到目前为止,我的策略是在启用 disc_copies 的 RAM 中创建 mnesia 表,以便在日志大小超过一定大小时让 mnesia 自动将内存转储到磁盘。

如果服务器崩溃,一些信息将会丢失。没有大碍。

另一种方法是实例化两个表(仅一个内存和一个磁盘),并每分钟左右将进程从内存复制到磁盘。这更天真,但允许仅转储内存中的一部分内容,从而减少整体磁盘开销并可能完全避免使用日志(我实际上不确定最后一条语句)。

我相信还有很多其他方法可以做到这一点。你的是啥呢?

-teo

0 投票
2 回答
692 浏览

erlang - 在启动时同步 ejabberd 节点

我遇到了一个似乎无法解决的问题。我需要传入函数 mnesia:change_table_copy_type(schema, node(), disc_copies)。在从主节点创建数据库的命令行中。erl start 是: erl -name NODE1 -mnesia extra_db_nodes \"['MASTER']\" -s mnesia 当我启动 shell 然后进入函数调用时一切正常,然后我可以停止 shell 并正常启动 ejabber 进程. 所以我需要一个脚本方法来完成数据库设置和同步。

我尝试了许多不同的方法来获取 change_table_copy_type 传入但没有成功。最终目标是能够编写启动 mnesia 的过程脚本,传入函数,然后退出 shell。有没有人试过这个?我尝试过重定向,例如:erl -name NODE1 -mnesia extra_db_nodes \"['MASTER']\" -s mnesia <

这失败了,因为传入函数调用时节点没有启动。我尝试使用“-run”选项,但获取并错误告诉我函数是 undef。也许我没有正确构建 -run 部分。

0 投票
2 回答
1773 浏览

erlang - Erl 中的记录(Erlang 问题)

有没有办法直接在erl中使用记录?无论我尝试什么,它总是说它找不到记录。我正在尝试进行记忆交易,如果没有我的记录,我不能走得太远。非常感谢任何帮助 - 谢谢!

0 投票
1 回答
1101 浏览

amazon-ec2 - 如何在运行 RabbitMQ 实例的情况下正确为 EBS 卷创建快照?

我在 EC2 实例上使用 RabbitMQ,并且在 EBS 卷上有 Mnesia 表,因此当我对其进行快照并尝试使用相同数据启动另一个实例时,似乎该表正在被另一个 RabbitMQ 实例使用。

解决这个问题的唯一方法是关闭 RabbitMQ 以进行刷新/快照,然后在完成后重新启动它?

有没有办法清理文件,使它们看起来不被锁定或被强制解锁?

这不是我将面临的常见问题,只是好奇是否有更好的解决方案。

为了澄清,我看到的错误是:timeout_waiting_for_tables.

0 投票
3 回答
848 浏览

erlang - 使用 gen_server 封装一个 mnesia 表?

我有一个用 Erlang 制作的服务器应用程序。在其中我有一个记忆表,用于存储有关照片的一些信息。本着“一切都是过程”的精神,我决定将该表包装在一个gen_server模块中,以便该 gen_server模块是唯一直接访问该表的模块。通过向该进程(具有注册名称)发送消息来完成向该表的查询和添加信息。这个想法是会有几个客户端进程从该表中查询信息。

这工作得很好,但该gen_server模块没有状态。它所需的一切都存储在 mnesia 表中。所以,我想知道 agen_server是否可能不是封装该表的最佳模型?

我是否应该不让它成为一个过程,而只是通过该模块中的函数封装表格?如果该模块中出现错误,这将导致调用进程崩溃,我认为这可能会更好,因为它只会影响单个客户端,而不是现在,当它会导致 gen_server进程崩溃时,让每个人都无法访问表(直到主管重新启动它)。

非常感谢任何输入。

0 投票
3 回答
608 浏览

erlang - Mochiweb 失忆请求

我正在尝试将 Mochiweb 与我的 ejabberd mnesia db 链接,并且无法在我的控制器中进行任何 mnesia 事务。我在没有 mnesia 事务的情况下测试了我的控制器,它们工作正常。我在 start 函数中使用 application:start(mnesia) 。

在浏览器上,我看到“内部服务器错误”,在 Mochiweb 的日志中,我看到“=ERROR REPORT=== function_clause”。我想知道如何 1.) 让 mnesia 与 Mochiweb 一起工作或 2.) 我可以插入到 ejabberd 的 Web 服务器的一个好的框架是什么。

谢谢!