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

mnesia - 使用 QLC 查询 mnesia Fragmentated Tables 返回错误结果

我在乌干达。我创建了一个 mnesia 碎片表(64 个碎片),并设法将其填充到 9948723 条记录。每个片段都是一个 disc_copies 类型,有两个副本。现在,使用 qlc(查询列表理解),搜索记录太慢,并且返回不准确的结果。

我发现这个开销是 qlc 使用了 mnesia 的 select 函数,它遍历整个表以匹配记录。我在下面尝试了其他东西。

尝试这个功能给了我很好的结果。但我发现我必须为我的存储过程中可能进行的每次搜索动态构建模式。

我决定经历这样做的破坏,所以我编写了函数,这些函数将根据要搜索的参数为我的记录动态构建狂野模式。

尽管计算量很大,但效果很好。即使在更改记录定义后它仍然可以工作,因为在编译时,它会获取新的记录信息

问题是,当我在运行 WinXP 的 3.0 GHz 奔腾 4 处理器上启动 25 个进程时,它会挂起并且需要很长时间才能返回结果。

如果我要在这些片段中使用 qlc,以获得准确的结果,我必须指定要像这样搜索的片段。

Qlc 正在返回 [],当我搜索某些内容时,当我使用 match_object/1 时,我得到了准确的结果。我发现使用 match_expressions 会有所帮助。

记忆:表(选项卡,道具)。其中 Props 是一个数据结构,它定义了匹配表达式、返回值的块大小等

当我尝试动态构建匹配表达式时遇到问题。

函数 mnesia:read/1 或 mnesia:read/2 要求你有主键

现在问自己,如何有效地使用 QLC 搜索大型碎片表中的记录?请帮忙。

我知道使用记录的元组表示会使代码难以升级。这就是为什么我讨厌使用 mnesia:select/1, mnesia:match_object/1 并且我想坚持使用 QLC。即使在同一个节点上,QLC 在我的查询中也给出了错误的结果,它来自 64 个片段的 mnesia 表。

有没有人用过QLC查询碎片表?,请帮忙

0 投票
1 回答
1302 浏览

erlang - mnesia 主键

我有两张表,一张笔记和一个标签,我想从笔记主键中创建 id 以在标签表中使用它,但我不知道我在哪里做错了。我的笔记 id 是从另一个表计数器生成的,具有dirty_update_counter.

我的id_notesfrom 标签函数如下所示:

但是这个函数不会id_note从表标签中增加我的字段,尽管在我的笔记表中,我的 id 字段是从计数器表中增加的。

提前感谢您的帮助。

0 投票
1 回答
1067 浏览

erlang - 在运行时从另一个 Erlang shell 访问 Mnesia 节点

从另一个 Erlang shell 访问单个正在运行的 mnesia 节点以仅查看表中的数据的最佳做法是什么?

我尝试打开两个 shell 并将它们指向同一个 mnesia 目录位置,在文档中找到它后我意识到这是一个非常糟糕的主意。

-mnesia dir 目录。存储所有 Mnesia 数据的目录的名称。当前节点的目录名称必须是唯一的。在任何情况下,两个节点都不能共享同一个 Mnesia 目录。结果是完全不可预测的。

0 投票
2 回答
401 浏览

deployment - 如何以标准方式处理记忆模式?

假设我有一个应用程序A,它依赖于 mnesia,并且存在启用磁盘的模式。我想做的是确保mnesia 正在运行并允许Adisc_copies内的表。我也在考虑多个应用程序需要访问 mnesia 的情况。

什么是实现这种事情的最便携(和标准)的方式,而不是将 mnesia 启动和模式创建硬编码到A的应用程序回调模块中?

当交互式开发时,我只是做一个

在 Erlang shell 中初始化磁盘模式,然后启动 mnesia 应用程序

最后启动其他依赖于存在数据库的数据库。

0 投票
2 回答
2797 浏览

erlang - Erlang - mnesia 数据库的标准位置

是否有将 mnesia 数据库放在 erlang 中的标准位置?目前我把它放在 priv 目录中。

0 投票
2 回答
3420 浏览

erlang - ejabberd:检查 Mnesia 表?

我正在研究 ejabberd 但我找不到检查其 Mnesia 表的方法。

是否有类似 MySQL shell 的东西来检查表?

0 投票
2 回答
552 浏览

erlang - 当 mnesia 从程序中停止时,Erlang 应用程序的停止会挂起

我遇到了一个问题,我无法在我的程序中停止 mnesia 而不会导致应用程序挂起。

我目前正在我的 erlang 应用程序中对 mnesia 进行原型设计。

在我的 jaus_app.erl 文件中, start() 调用:

我的 stop() 函数调用:

当我注释掉这些行并从 erlang 提示符启动和停止 mnesia 时,我能够干净地停止我的应用程序。

我不应该在成熟的 erlang 应用程序中使用这些原型函数吗?

肯。

0 投票
1 回答
2560 浏览

erlang - 集群中一个 Mnesia Master Node 的意义是什么

我正在使用复制的 mnesia 数据库运行两个 erlang 节点。每当我尝试启动其中一个而 mnesia 未在另一个上运行时,mnesia:wait_for_tables(?TABS,?TIMEOUT) 会挂在调用它的节点上。我需要有一个结构(如果两个节点都没有运行),我可以在另一个节点关闭时开始使用一个节点,然后决定启动另一个节点但继续正常工作。我需要确保正在运行的第一个节点在稍后启动时已更新。这是否一定要求我有一个作为主人?

%%% 已编辑.............................. .....................................

哦,我明白了。我使用的数据库有几个零散的表。一些片段已经分布在网络上以实现负载平衡。因此,一台主机上的 Mnesia 会尝试通过网络加载它们,但由于另一台主机上的 mnesia 已关闭而失败!

我想这与 mnesia 主节点无关。但是我仍然很想了解它的意义,因为我以前没有使用过它,但是,我总是使用分布式模式。

再次感谢...

0 投票
3 回答
1808 浏览

erlang - erlang mnesia - 非法记录信息

我正在尝试使用一个函数来确保我需要的表已经创建,如果没有创建它。这是示例:

问题是编译时出现错误:illegal record info. 可能必须在编译时解析record_info,或者记录信息的第二个参数实际上应该是可以从源代码中检索的记录?

0 投票
1 回答
2343 浏览

erlang - 从 mnesia 集群中移除 not_exist_already 节点(方案)

当我得到时,我在 mnesia 集群数据中有一个坏节点(它不存在):

如何从集群中删除它?

我试过了:

这是什么意思?我该如何解决?

更新。在从模式中删除节点之前,我们需要在其上停止 mnesia