Mnesia 在同一节点上的 2 个独立 IEx 会话中
Mnesia in 2 separate IEx sessions on the same node
我正在学习 Erlang 的 mnesia DB 并尝试在 Elixir 应用程序中使用它。根据文档,在默认情况下创建模式时,mnesia 会创建一个名为 "Mnesia.#{node}" 的目录。这是 mnesia 准备的代码:
:mnesia.create_schema([node])
:mnesia.start
:mnesia.create_table(User,
[
attributes: [:name, :email],
disc_copies: [node]
]
)
当我开始 2 个单独的 IEx 会话并进行一些事务查询时,它们似乎只发生在其中一个会话中。我从 :mnesia.info 输出中推断出这一点。
如何同步它们,或者这是预期的行为?
当一个人在没有明确指定节点名称的情况下启动 shell 时,它以 nonode@nohost
:
启动
$ iex
Erlang/OTP 19 [erts-8.1] [source-e7be63d] ...
Interactive Elixir (1.5.0-dev) ...
iex(1)> node()
:nonode@nohost
Mnesia
本身是节点感知的。因此,您需要显式远程连接到节点,该节点知道 运行 mnesia
。让我们开始一个名为 shell:
$ iex --sname mnesia # the node name is arbitrary
iex(mnesia@localhost)1>
现在,让我们启动第二个 shell 并远程连接到第一个启动的 shell 。为此,只需启动 shell,然后按 CtrlG 进入 User switch command
模式并键入:
User switch command
--> r 'mnesia@localhost' 'Elixir.IEx'
--> c
现在你有两个 shells,连接到同一个节点,处理一个 mnesia
实例。
我正在学习 Erlang 的 mnesia DB 并尝试在 Elixir 应用程序中使用它。根据文档,在默认情况下创建模式时,mnesia 会创建一个名为 "Mnesia.#{node}" 的目录。这是 mnesia 准备的代码:
:mnesia.create_schema([node])
:mnesia.start
:mnesia.create_table(User,
[
attributes: [:name, :email],
disc_copies: [node]
]
)
当我开始 2 个单独的 IEx 会话并进行一些事务查询时,它们似乎只发生在其中一个会话中。我从 :mnesia.info 输出中推断出这一点。
如何同步它们,或者这是预期的行为?
当一个人在没有明确指定节点名称的情况下启动 shell 时,它以 nonode@nohost
:
$ iex
Erlang/OTP 19 [erts-8.1] [source-e7be63d] ...
Interactive Elixir (1.5.0-dev) ...
iex(1)> node()
:nonode@nohost
Mnesia
本身是节点感知的。因此,您需要显式远程连接到节点,该节点知道 运行 mnesia
。让我们开始一个名为 shell:
$ iex --sname mnesia # the node name is arbitrary
iex(mnesia@localhost)1>
现在,让我们启动第二个 shell 并远程连接到第一个启动的 shell 。为此,只需启动 shell,然后按 CtrlG 进入 User switch command
模式并键入:
User switch command
--> r 'mnesia@localhost' 'Elixir.IEx'
--> c
现在你有两个 shells,连接到同一个节点,处理一个 mnesia
实例。