【发布时间】:2016-05-24 21:24:07
【问题描述】:
短而甜;我正在构建一个新项目,我可以支持 ETS,但我更愿意支持 Mnesia——因为可能会派上用场的内置交易之类的东西。我不关心复制和扩展到其他节点,这就是为什么我认为 Mnesia 的性能在 ETS 上有开销。
zackehh:~/GitHub/my_project$ MIX_ENV=test mix bench
Settings:
duration: 1.0 s
## BasicBench
[19:24:15] 1/4: retrieve key hit mnesia
[19:24:23] 2/4: retrieve key hit
[19:24:30] 3/4: insert new key mnesia
[19:24:33] 4/4: insert new key
Finished in 25.24 seconds
## BasicBench
insert new key 10000000 0.63 µs/op
retrieve key hit 10000000 0.64 µs/op
retrieve key hit mnesia 10000000 0.69 µs/op
insert new key mnesia 500000 4.70 µs/op
我运行了一些(本地)基准测试,很明显 Mnesia 在读取性能方面具有可比性,但写入性能要慢得多。我想知道是否有任何方法可以加快速度(例如关闭复制检查等)。
附加信息:
Mnesia 表:
[
{ :ram_copies, [node()] },
{ :local_content, true },
{ :attributes, [:key,:value] }
]
测试
- ETS 操作使用
:ets.lookup/2和:ets.insert/2 - Mnesia 操作使用
:mnesia.dirty_write/1和:mnesia.dirty_read/2
我已经搜索了几个小时的文档,但没有任何东西可以作为加快速度的潜在方法 - 所以我可能正盯着性能墙看,但如果有人可以澄清/确认/建议,那就是赞赏。
【问题讨论】:
标签: erlang elixir erlang-otp mnesia