我尝试将Mnesia与更传统的数据库进行比较。
据我所知,Mnesia中的表位于(见Memory consumption in Mnesia):
ram_copies
- 表存储在ets
中,因此没有ACID中的持久性。disc_copies
- 表位于ets
和dets
,因此表格不能大于可用内存?如果表是碎片,那么数据库不能大于可用内存?disc_only_copies
- 表位于dets
,因此内存中没有缓存,性能更差。并且表格的大小限制为dets
的大小,或者表格必须分段。因此,如果我想要从RAM执行读取的性能以及写入磁盘的持久性,那么与传统的RDBMS(如MySQL或PostgreSQL)相比,表的大小非常有限。
我知道Mnesia并不是要取代传统的RDBMS:s,但它可以用作大型RDBMS还是我必须寻找另一个数据库?
我将使用的服务器是内存量有限的VPS,大约 512MB ,但我想要良好的数据库性能。
Mnesia中的disc_copies
和其他类型的表格是否如我所理解的那样有限?数据库不能部分在内存和光盘上的完整副本吗?
答案 0 :(得分:2)
以前的SO问题讨论了Mnesia数据库对不同类型表的存储容量:
What is the storage capacity of a Mnesia database?
已经有了很好的答案。
显然(但我想你已经看过了)官方文档可以在:
http://www.erlang.org/doc/man/mnesia.html
另外,请阅读Mnesia FAQ:
11.5在Mnesia中可以存储多少数据?
Dets使用32位整数作为文件 抵消,所以最大的可能 mnesia table(现在)是4Gb。
在实践中,您的机器会慢到 在你达到这个目标之前的爬行方式 限制。
最后,Mnesia表可以碎片化。我们讨论了here和there。
这些是我的2p。