Mnesia的桌子在哪里?

时间:2010-04-07 22:21:25

标签: erlang mnesia

我尝试将Mnesia与更传统的数据库进行比较。

据我所知,Mnesia中的表位于(见Memory consumption in Mnesia):

  • ram_copies - 表存储在ets中,因此没有ACID中的持久性。
  • disc_copies - 表位于etsdets,因此表格不能大于可用内存?如果表是碎片,那么数据库不能大于可用内存?
  • disc_only_copies - 表位于dets,因此内存中没有缓存,性能更差。并且表格的大小限制为dets的大小,或者表格必须分段。

因此,如果我想要从RAM执行读取的性能以及写入磁盘的持久性,那么与传统的RDBMS(如MySQL或PostgreSQL)相比,表的大小非常有限。

我知道Mnesia并不是要取代传统的RDBMS:s,但它可以用作大型RDBMS还是我必须寻找另一个数据库?

我将使用的服务器是内存量有限的VPS,大约 512MB ,但我想要良好的数据库性能。

Mnesia中的disc_copies和其他类型的表格是否如我所理解的那样有限?数据库不能部分在内存和光盘上的完整副本吗?

1 个答案:

答案 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表可以碎片化。我们讨论了herethere

这些是我的2p。