optimization - Erlang:优化 mnesia 表的读/写并发性

标签 optimization erlang mnesia

我正在使用 mnesia 开发一个新的 Erlang 项目。当我以前使用 ets 时,我可以设置针对读取并发性、写入并发性或两者进行优化的 ets 表。我最初以为我可以用 mnesia 表做同样的事情,但到目前为止我还没有找到如何通过查看文档来做到这一点(这让我感到惊讶,因为根据我的理解,mnesia 是基于 ets/dets 的)。

有人知道这是否可行吗?

最佳答案

来自文档:

{storage_properties, [{Backend, Properties}]. Forwards additional properties to the backend storage. Backend can currently be ets or dets and Properties is a list of options sent to the backend storage during table creation. Properties may not contain properties already used by mnesia such as type or named_table.

For example:

mnesia:create_table(table, [{ram_copies, [node()]}, {disc_only_copies, nodes()},
                {storage_properties,
                 [{ets, [compressed]}, {dets, [{auto_save, 5000}]} ]}])
        

但事实并非如此简单。 Mnesia 的关键在于,这是一个分布式数据库,具有复制或蠕动等功能。但这也带来了诸如复制和开销之类的开销。修改这些可能是优化的主要来源。这对于 mnesia 中的事务和脏操作等概念尤其重要。

在 Ets 中,所有操作都是原子的,这或多或少很容易实现,因为所有数据都位于一个位置(并且使写入读取优化也更容易)。在 mnesia 中,要使写入原子化(确保其正确性),您需要在可能的许多节点上创建锁。

但这仍然并不意味着与 mnesia 表的所有交互都必须包装在严格的事务中。也许您在那里有一些脏读或写。

这一切都取决于您的数据,它意味着什么,是否存在交错,以及您将如何(有多少确定性?)使用它。因此,这更多地取决于您的域,而不是任何 mnesia 设置。

关于optimization - Erlang:优化 mnesia 表的读/写并发性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27023815/

相关文章:

python - 是否有基本追踪求解器的 python 实现?

linux - 下载最新二进制文件后出现错误 `make` erlang

docker - 系统重启后 Mnesia 无法识别数据(no_exists 错误)

database - Erlang:Mnesia 还是 Mysql?

performance - 如何衡量 Web App 的性能?

C++ 内联函数和上下文特定优化

python - 如何将 CP-SAT 公式(Python 中)中的目标指定为所有决策变量值的最大值的最小化?

algorithm - 如何计算卡车装载中的最大托盘数量?

erlang - 如何设置 Yaws yapp?

Erlang 在 0 之后接收