开发者

Erlang - Standard location of mnesia database

Is there a standard place to put the mnesia database within erlang? At the moment I 开发者_如何学JAVAam putting it in the priv directory.


By default, Mnesia will create the schema in a subdirectory called Mnesia.<node name> of the current directory of the emulator process. If that's not what you want, all you need to do is set Mnesia's dir application variable with something like

application:set_env(mnesia, dir, "/path/to/db").

As for where to place the database: that depends on your deployment scenario. Since application variables can also be set using release config files or command line arguments, you can delay that decision until you ship (or install on your own servers). For use in production, a standard directory like /var/lib/<your application>/mnesia-<node name>(on unix) should do.

For playing around, i'd recommend using a dedicated directory under the code root (NOT the priv directory) and setting that location within your application's startup section. In my pet projects, i often use code such as

Root = filename:absname_join(filename:dirname(?FILE), ".."),
application:set_env(mnesia, dir, filename:join(Root, "db")).

for exactly that purpose.


As far as I know, when you create the schema every node creates a schema directory in its root directory.

Therefore, I guess that can be considered the default location.

If, for some reason, you have to include a schema together with your application, well, I guess the priv folder should be fine, since it is supposed to be used for application specific files and it's easily accessible via the code:priv_dir/1 function.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜