标签: mnesia

Mnesia写失败

我定义了一个名为的记录log.我想用名称创建一个mnesia表log_table.当我尝试将记录写入表时,我得到bad_type如下错误:

(node1@kitt)4> mnesia:create_table(log_table, [{ram_copies, [node()]}, 
                                               {attributes, record_info(fields, log)}]).
{atomic,ok}

(node1@kitt)5> mnesia:dirty_write(log_table, #log{id="hebelek"}).
** exception exit: {aborted,{bad_type,#log{id = "hebelek"}}}
in function  mnesia:abort/1
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

erlang mnesia

4
推荐指数
1
解决办法
2582
查看次数

如何在Mnesia中定义外键

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

alter table TABLE
add foreign key (FIELD)
references TABLE2 (FIELD2)
Run Code Online (Sandbox Code Playgroud)

erlang mnesia constraints

4
推荐指数
1
解决办法
604
查看次数

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

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

如果Mnesia不支持多列索引,则鉴于其本机dbms有任何人在Erlang中模拟此功能.

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

erlang mnesia erlang-otp secondary-indexes

4
推荐指数
1
解决办法
1376
查看次数

断开连接后MNesia是否支持同步?

我开始构建一个具有以下要求的项目:

  • 整个系统将分布在WAN上的多个物理节点上
  • 每个节点将使用和操作一组通用的数据记录
  • 对这些记录的操作必须能够适应网络中断

我正在考虑使用Mnesia/Erlang作为这个项目的基础平台,但我想知道它(Mnesia)能够处理数据集上同时断开连接的冲突操作的情况.

一个说明性场景:

  1. 节点A和B具有连接性和空数据集.
  2. 节点A添加记录(1,ABC).
    • 这里,记录集应该透明地同步,现在节点B也有记录(1,ABC).
  3. 它们之间的网络连接丢失了.
  4. 节点A将记录改为(1,DEF).
  5. 节点B(后面的时间戳)将记录改为(1,GHI).
  6. 网络连接已恢复
    • 预期:在透明同步之后,两个节点都包含记录(1,GHI).

为简化起见,我们假设不需要完整的更改历史记录(例如,记录1用于包含ABC或DEF并不重要,它现在只包含GHI非常重要).

这是Mnesia的开箱即用(或简单实施)功能吗?

architecture erlang distributed synchronization mnesia

4
推荐指数
1
解决办法
507
查看次数

我在哪里可以找到Mnesia源代码?

我在很多文档中都看到过Mnesia已经被爱立信开源了,但直截了当的谷歌搜索并没有帮助我找到代码库...

Mnesia仍然是开源的吗?

erlang mnesia

4
推荐指数
1
解决办法
572
查看次数

不能设置Mnesia

setup_mnesia(Name) ->
    ?VALUE(application:start(mnesia)),
    ?VALUE(mnesia:create_schema([node()|[Name]])),
    ?VALUE(mnesia:create_table(muppet, [
                        {attributes, record_info(fields, muppet)},
                        {disc_copies, [foo@kos13]}])),
    ?VALUE(mnesia:wait_for_tables([muppet], infinity)),
    ok.
Run Code Online (Sandbox Code Playgroud)

结果是

"application:start(mnesia)"= ok

"mnesia:create_schema([node()| [Name]])"= {error,{foo @ kos13,{already_exists,foo @ kos13}}}

"mnesia:create_table(muppet,[{attributes,record_info(fields,muppet)},{disc_copies,[foo @ kos13]}])"= {aborted,{bad_type,muppet,disc_copies,foo @ kos13}}

EDITED,ADDED如果重写两个进程来调用应用程序:在mnesia之后启动:create_schema它吐出"无法安装回退".在当前目录中出现两个文件--FALLBACK.BUP和foo @ kos13131851070846165246847780.

erlang mnesia

4
推荐指数
1
解决办法
4155
查看次数

如何在Erlang中更新Mnesia表

我的代码有点问题.我有一个包含汽车详细信息,名称,价格和数量的表格,因此我正在尝试创建一个buy用于购买特定汽车的功能.当用户购买5辆宝马汽车时,他们会打电话buy_car(bmw,5).在此之后,我想更新宝马汽车的新数量值.

我的尝试在下面,但我似乎无法解决它,我是Erlang的新手.

buy_car(X,Ncars) ->

    F = fun() ->

        %% ----first i find the number of car X available in the shop
        [Xcars] = mnesia:read({car,X}),
        Nc = Xcars#car.quantity,
        Leftcars = Xcars#car{quantity = Nc - Ncars},

        %% ---now we update the database
        mnesia:write(Leftcars),

    end,
    mnesia:transaction(F).
Run Code Online (Sandbox Code Playgroud)

请帮助我如何编写从商店购买汽车的功能.

database erlang transactions mnesia

4
推荐指数
1
解决办法
1785
查看次数

在恒定时间内查找Mnesia中列的最大/最小值

如何在恒定时间(或尽可能接近)中找到Mnesia表中索引列的最大值或最小值?

erlang mnesia

4
推荐指数
1
解决办法
635
查看次数

ETS/Mnesia RAM表中的官方/建议/允许的最大记录数(或RAM表大小)

Erlang一直是许多"新时代"(淫秽快速和容错)消息传递系统的良好应用.例如可以RabbitMQ的,ejabberd,WhatsApp的移动等不管邮件系统是如何构建的,它需要知道什么会话回事,谁登录,等我认为保持数据IN-MEMORY是不可避免的此类系统.

对于二郎,最大可能是什么,或者允许的最大什么或什么是在记录的正式通知最大数量ETS table还是mnesia RAM table?是否存在特定的表大小,如果超过则会导致整个VM崩溃?不要ETS TablesMnesia RAM Tables只要底层操作系统允许它增长到任何金额是多少?我听说过Mnesia Table Limit2 or 4GB,但我认为这是对磁盘表.

那将需要处理大量的内存数据的未来应用的一个典型例子是OLAP Systems,Real Time analytics,Social Gaming等在这种思路已经激发了这个问题.

unix linux windows erlang mnesia

4
推荐指数
1
解决办法
779
查看次数

在erlang进程之间发送消息:Atoms vs Binaries

当我将原子作为信息发送时,原子是否从一个过程复制到另一个过程?我的想法是,因为这个原子已经存在于VM中,所以不必复制.我知道从一个进程发送到另一个进程时二进制文件更有效.

如果我发送一个触发器消息,从一个进程到另一个进程的常量消息,最好使用:atom或binary?

erlang mnesia elixir erlang-shell

4
推荐指数
1
解决办法
181
查看次数