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

sec*_*rve 16 erlang couchdb erlang-otp in-memory-database riak

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

I G*_*ERS 37

你遗漏了许多重要的观点:

首先,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的内存中,并且可以非常快速地启动和运行.


Ole*_*nko 10

很专心.mnesia磁盘表大小没有实际限制.

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

  • 您无法创建任何数据库 CA。CP 或 AP(或者,通常,实际上两者都不是)是您唯一的选择。 (2认同)

Jan*_*rdt 5

据我所知,Riak 和CouchDB(请参阅评论中有关 BitCask 的注释)都不支持内存数据库。我对 Riak 的看法可能是错的,但我在 CouchDB 上工作,所以我非常确定。

工程师选择 mnesia 而不是 Riak 或 CouchDB,因为它解决了不同的问题。

他们是否是大公司并不重要。