为什么大公司使用Mnesia而不是使用Riak或CouchDB

时间:2014-04-20 09:19:48

标签: erlang couchdb riak otp in-memory-database

我可以看到像Klarna和Whatsapp这样的两家大公司正在使用Mnesia作为他们的内存数据库(不确定他们如何将数据保存在Mnesia的2GB限制中)。我的问题是:为什么像这样的公司,可能更多我不知道,使用Mnesia而不是Riak或couchDB,两者都是Erlang,两个数据库都支持更快的内存数据库,更好的无痛持久性,以及更多功能。我在这里想念一下吗?

3 个答案:

答案 0 :(得分:36)

您遗漏了许多要点:

首先,mnesia没有2千兆字节的限制。它仅限于32位架构,但实际工作中几乎不存在任何架构。在64位上,您不限于2千兆字节。我见过几百GB的数据库。唯一的问题是那些人的初始启动时间。

Mnesia旨在处理:

  • 极低延迟的K / V查找,不一定是线性化的。
  • 具有线性化变化的适当交易(CAP定理中的C)。这些被允许以更糟糕的延迟运行,因为它们预计相对罕见。
  • 在线架构更改
  • 即使节点在群集中出现故障(群集很小,最多10-50台机器),也能存活。

由于数据已经在Erlang系统中,因此您可以避免单独的过程。您有QLC用于类似数据目录的查询。并且您可以存储任何Erlang术语。

如果以上是你需要的话,Mnesia的表现很好。它的限制是:

  • 你无法获得超过2TB内存的机器。从头开始加载2个teras会很慢。
  • 由于它是CP系统而不是AP系统,因此节点丢失需要手动干预。您可能也不需要交易。您可能还希望能够无缝地向系统添加更多节点,依此类推。为此,Riak是一个更好的选择。
  • 它使用乐观锁定,如果许多进程试图访问事务中的同一行,则会出现问题。

我正常的转到技巧是从Erlang系统中的Mnesia开始,然后随着数据大小的增长切换到另一个系统。如果数据大小增长缓慢,那么您可以将所有内容保存在Mnesia中并快速启动并运行。

答案 1 :(得分:10)

非常认真。对于mnesia磁盘表大小没有实际限制。

  • 与riak(商业用途)不同,Mnesia是免费的。
  • 了解上限定理。您可以使用普通的mnesia作为后端来构建自己的ca或cp或ap数据库。但是如果你拿一个特定的dbms,比如说couchdb,那么它就是ap开箱即用的。而且你不能这样做,比方说,ca(据我所知)

答案 2 :(得分:3)

据我所知,既不是Riak也不是(请参阅注释中的BitCask注释)CouchDB支持内存数据库。我在Riak上错了,但我在CouchDB上工作,所以我非常肯定。

工程师正在选择Riak或CouchDB上的mnesia,因为它解决了另一个问题。

他们是否是大公司都不是这个因素。