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

erlang - 如何在 Erlang Mnesia 中创建和使用(或模拟)多列索引

我浏览了 Mnesia 文档和 3 本流行的 Erlang 书籍。似乎只能创建和使用单列主索引和二级索引。或者也许这正是示例所涵盖的内容?如果我在每一列上创建一个单独的索引,Mnesia 是否能够智能地一起使用它们来模拟多列键索引搜索?如果是这样,性能会比简单的表扫描好得多吗?

如果 Mnesia 不支持多列索引,那么考虑到它的原生 dbms 是否有人在 Erlang 中模拟了这个功能。

第二个问题:如何模拟约束(引用、检查)、触发器和基于事件的通知?

0 投票
1 回答
2449 浏览

erlang - ejabberd 新手如何设置功能齐全的 ejabberd 服务器?

我对 ejabberd 完全陌生。我已经下载了 windows 和 linux (Ubuntu) 的安装。我在网上的某个地方看到了如何安装和设置它的演示,但安装被配置为“演示”。我有 pidgin XMPP 客户端,现在在设置 ejabberd 时遇到问题。
另一个问题是我尝试在后端使用 Nitrogen 的彗星池和 erlang ETS 表开发聊天系统(感谢现在嵌入在 ets 表中的故障转移机制),即

br> 我们能否拥有到 ejabberd 服务器的 Web 界面,将其管理界面放在一边。Nitrogen Comets 有时相当麻烦,例如浏览器超时,尤其是在 Nitrogen 2.XX 中,不能轻易更改。
所以现在我决定使用 ejabberd。如何使用 ejabberd 作为后端引擎自定义内部组织聊天系统。我不希望组织中的每个人都将 Pidgin 作为客户端下载,而是希望将聊天功能嵌入到 Web 界面中。
使用 Erlang、Yaws、Mnesia、Inets、Mochiweb 等我没有问题,所以即使它需要我在 ejabberd 上开发一个带有几个 Gen 服务器的 erlang 应用程序,这也不会是一个问题

0 投票
1 回答
1163 浏览

erlang - erlang节点没有响应

我在 first@localhost 节点的 erlang condose 中收到了这样的消息

我的问题是 - 在这种情况下什么是超时?多久之前导致此事件?如何防范这种“恐怖”?我只能通过重启节点来恢复\恢复正常工作......但是正确的方法是什么?

谢谢你,新年快乐!

0 投票
1 回答
1189 浏览

erlang - 在本地主机上运行和测试 ejabberd?

我已经在我的 HP pavilion(运行 Windows 7 的娱乐笔记本电脑)上安装了 ejabberd,在安装过程中我被提示输入服务器域。因为我想尝试它,所以我输入了“localhost”。当我尝试启动它时,Web 管理界面显示出现错误。检查 3 个日志文件,我找不到错误。似乎有些端口被封锁了。但是我在日志中没有发现错误。我怎样才能启动并运行它,以便我可以使用 XMMP 客户端或使用 jabberlang-XMPP 驱动程序在 localhost 上对其进行测试。

br>有人可以告诉我一些关于你如何使用它的例子吗?另外,我可以在 ejabberd 的 conf 文件中取消注释或修改哪些参数,以便在 localhost 上运行它。我应该将服务器域明确指定为“127.0.0.1”而不是“locahost”吗?

br>我已经让我的 firefox 运行这个客户端,一旦我登录,它会提供我在 Gmail 上的朋友的状态信息,而不是我创建的 processOne IM 免费服务器 [username@name.p1.im]。但我可以直接在他们的 Gmail 帐户中与我的这些朋友聊天。如果我安装自己的 ejabberd 服务器,我需要了解如何使用它。请记住向我指出有关 jabberlang XMMP 客户端库的资源。谢谢

/joshmuza@gmail.com

0 投票
1 回答
2170 浏览

erlang - 在 mnesia DBMS 中管理增量计数器?

我已经意识到 mnesia 不像 MySQL 或其他 RDBMS 那样支持自动增量功能。在 mnesia 文档中讨论的计数器没有得到很好的解释。例如,到目前为止,我在整个文档中发现了一个操作计数器的函数

所以,这困扰了我一段时间,因为它适用于类型的记录

也不清楚,可能是因为没有 erlang 书籍或 mnesia 文档提供示例来解释它。这迫使我实现自己的计数器操作 API。因为我希望能够使用计数器访问和管理我的记录,所以我不得不在我的记录中包含一个名为“计数器”的字段,然后在将记录添加到旨在具有计数器的表中时,我这样做:

计数器字段的位置无关紧要。API的实现如下:

为了解释这一点,如果计数器字段不是表的属性,我会强制让试图执行此代码的进程退出,因此如果程序员在 try ...catch 或 case ( catch ...) 的 body ,他们很容易看出哪里出了问题。或者,我可以通过 using 询问此代码片段是否正在事务中执行mnesia:is_transaction(),如果返回 true,我调用mnesia:abort/1,如果 false,我可以退出原因。此外,我在 mnesia 活动函数中使用 mnesia_frag,因为此实现将无论表的碎片属性如何,都可以工作。如果我使用mnesia:transaction(Fun),碎片表将变得不一致,因为此调用只会访问初始碎片(基表)。
现在,当从带有计数器的表中删除一条记录时,我们需要重新排列表中的顺序。此操作代价高昂,因为它需要对整个表进行迭代。因为如果他们删除计数器 = 5 的记录,则计数器 = 6 的记录必须变为计数器 = 5,依此类推。计数器大于删除的记录的所有记录都必须递减。因此,通过传递删除的计数器值和 TableName,可以使用
mnesia:foldl/3 or mnesia:foldr/3 , the difference between these two comes in only with ordered table types
以下函数迭代表:


您注意到我有代码可以帮助我从记录中动态找到计数器字段的位置。帮助我执行此操作的代码如下所示:


这是因为这个模块必须不知道任何程序员的记录来帮助他使用计数器。因此,为了使用元组操作函数从记录中访问计数器的值,例如element(N::integer(),Tuple::tuple()),我必须计算它在元组中的位置动态地表示记录。


例如,使用 qlc(查询列表理解)查询具有动态约束的表,请考虑以下这些代码:

在库存管理系统中,这是有效的......

这对我有用。请告诉我我应该如何处理柜台。或者你可以告诉我你是如何在那边处理它们的。

0 投票
1 回答
345 浏览

erlang - 力负荷失忆症

据我了解,我们可以使用 force_load_table/1 在 mnesia 中强制加载表。

你能举一个使用这个功能的例子吗?

0 投票
1 回答
3566 浏览

erlang - mnesia:密集使用表

当我收到这样的消息时,如下所示:

有什么方法可以知道哪个表正在被密集使用?我需要做什么样的调试?

谢谢。

0 投票
3 回答
5193 浏览

mysql - Ejabberd mnesia 数据库到 mysql

我有一个来自 ejabberd 服务器(DCD、DCL 和 DAT 文件)的 mnesia 数据库转储,并且我正在尝试从该数据库中恢复任何数据。将它转换为某种 SQL 数据库是理想的,但是我会接受一个简单的文本转储(从那里我可能会重建数据库)。

我是 erlang/mnesia 新手,但这是我从在线文档中设法做到的:

当电视启动时,它只是显示表名并说它们有 0 条记录。我猜有某种方法可以再次将它加载到内存中,但我还没有弄清楚如何基于文档。

我的另一个想法是尝试使用 ejabberd 的另一个安装来加载它,但是似乎使用 ejabberdctl 的唯一方法是从文本文件中加载它。

如何加载此数据库并将其转储到 sql 中或将其转储为可以通过 sql 导入的格式?我错过了什么?

更新:我一直在尝试将此数据库恢复到临时 ejabberd 服务器,如下所示:

第一个命令失败并迫使我得出结论,我很快就会输掉人与机器之间的战争。我不肯定,但我认为使用 ejabberd 作为主机将使用 localhost 作为节点。有任何想法吗?

更新:我认为这可能是一个权限问题,因为尝试导出默认的 ejabberd db 会导致{{badmatch,{error,eacces}}其他错误。 这封电子邮件显示了我收到的错误,但我不知道为什么。

0 投票
1 回答
290 浏览

erlang - 由于文件路径问题,Rabbitmq erlang 客户端构建失败?

我已经能够在 ubuntu linux 上构建 rabbitmq 服务器。它已经预先打包并在制作时,它可以作为服务启动。当我获得客户端源代码时,我无法制作,因为它看起来需要一个名为 ./deps/rabbitmq-server 的文件夹。分析代码,我发现客户端的作者正在访问与服务器中相同的头文件,在他的名为“amqp_client.hrl”的头文件中使用 include_lib(“rabbit.hrl 的路径等”)。然后我决定在 erlang 的 lib 目录中添加 rabbitmq_server,以便在启动 vm 时自动添加它的路径。但这仍然没有帮助。客户引用的另一个文件夹称为“rabbit_common”,用于包含他认为包含所有 .hrl 文件的包含文件夹。

此外,如果有人使用 RabbitMQ 服务器进行 IM,请提供一些基准和/或您对它的吞吐量、速度和用户数量的发现。它怎么能与 ejabberd 相提并论?如何为 Web 功能创建 AJAX/Jquery/Javascript 客户端?谢谢

0 投票
1 回答
423 浏览

database - 邮箱结构

我用 erlang 编写了简单的 pop3 服务器。现在我想用 mnesia 或其他数据库编写邮箱存储。邮箱的表和数据方案的最佳结构是什么?

第二个问题。我需要关于 db 的建议,你对 mnesia 有什么看法?

感谢您的回复。

最后一个问题:

如果我将使用 MAILDIR 格式或 MAILDIR 的小模块,我在哪里可以获得邮件客户端(例如 Thunderbird)如何与带有 MAILDIR 的 pop3 服务器一起工作的信息?或者它不取决于服务器中的邮件存储,所有客户端都使用 RETR num pop3 命令获取邮件?

谢谢