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

发布于 2024-09-06 23:53:52 字数 462 浏览 8 评论 0原文

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

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

交互式开发时,我只需

mnesia:create_schema([node()]).

在 Erlang shell 中执行一个操作来初始化磁盘模式,然后 启动 mnesia 应用程序

mnesia:start().

,最后启动依赖于现有数据库的其他应用程序。

Suppose i have an application A which depends on mnesia with disk-enabled schema being present.
What i'd like to do is ensure that mnesia is running and allowing disc_copiestables
from within A. I'm also considering the case where multiple applications need to access mnesia.

What would be the most portable (and standard) way to achieve this kind of thing, without hard coding mnesia startup and schema creation into the application callback module of A?

When developing interactively i simply do a

mnesia:create_schema([node()]).

within the Erlang shell to initialize an on-disk schema, then
start the mnesia application with

mnesia:start().

and finally start the other ones that depend on a database being present.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

横笛休吹塞上声 2024-09-13 23:53:52

您可以在 .app 文件中列出依赖的应用程序,请参阅 {applications, Apps} 字段。这样,您可以确保在没有运行 mnesia 的情况下应用程序不会启动,并且在创建版本时,它可以生成一个在您的应用程序之前启动 mnesia 的脚本。

由于 mnesia 模式可以持久化,因此您的应用程序在普通应用程序启动时不需要创建模式。您可以编写一个脚本来根据需要设置架构。

当您的应用程序启动时,它可以使用 mnesia:wait_for_tables/2 确保表格可供使用。

You can list dependendent applications in your .app file, see the {applications, Apps} field. That way you can make sure the app is not started without mnesia running, and when creating a release, it can generate a script that starts mnesia before your app.

Since the mnesia schema can be made persistent, creating the schema is not something your application should need to do in ordinary application startup. You can write an escript that sets up the schema as you need it.

When your application starts, it can then use mnesia:wait_for_tables/2 to make sure the tables are ready to use.

守望孤独 2024-09-13 23:53:52

我自己找到了解决方案。这绝不是标准方法,但它确实有效。

调用

mnesia:change_table_copy_type(schema, node(), disc_copies).

应用程序启动将确保架构是基于磁盘的,同时
允许 mnesia 通过引导脚本启动。 此博客条目非常有帮助。

I've found a solution myself. This is by no means the standard method, but it works.

Calling

mnesia:change_table_copy_type(schema, node(), disc_copies).

on application startup will ensure that the schema is disk-based while
allowing mnesia to be started by a boot script. This blog entry was very helpful.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文