MongoDB、Riak 和 HyperTable(或 HBase)的内存需求/利用率

Posted

技术标签:

【中文标题】MongoDB、Riak 和 HyperTable(或 HBase)的内存需求/利用率【英文标题】:Memory Requirement/Utilization for MongoDB, Riak and HyperTable (or HBase) 【发布时间】:2011-09-16 03:52:05 【问题描述】:

我已经评估了大多数 NoSQL 解决方案,似乎结合使用 MongoDB、Riak 和 HyperTable(或 HBase)是可行的方法。

这些数据库舒适运行的最低要求是什么?

假设我将这些数据库(MongoDB、Riak 和 HyperTable - 或 HBase)和 Web 服务器(如 nginx 或 Cherokee)和 Java/GlassFish 部署在一台运行 FreeBSD 且具有 32 GB RAM 的单机上,他们将如何表现?请注意,通过这种方法,整个 32 GB RAM 由所有应用程序平均共享。对于 Java/GlassFish 和 HBase,可以使用“-Xmx0000m”选项来限制它,但是对于那些数据库,它们会自动使用整个内存吗?我知道 MongoDB 是内存映射的——等等——那么当它们都在争夺内存时会发生什么? (我认为可以通过启动参数来限制 MongoDB、Riak 和 HyperTable 的内存利用率,但如何?)

或者,在 Solaris(或 OpenIndiana)上部署 Solaris 容器(或“区域”)虚拟化来限制每个应用程序是否是一种更好的方法,例如为每个 MongoDB、Riak 和 HyperTable/HBase 区域分配 4 GB?在这种方法中,所有数据库本质上都在仅 4 GB 的环境中运行?那么,为了让它们正常工作,最小的舒适 RAM 是多少?

【问题讨论】:

在合理的情况下,每个数据库的内存需求都 100% 取决于您要存储的数据量。 【参考方案1】:

我在生产中使用了 mongodb 和 hbase,所以我可以对它们发表评论。

Mongodb 没有办法限制内存使用,它使用它可以使用的最大内存。所以基本上,对于 mongodb,你拥有的内存越多越好。将 mongodb 放在单独的机器上总是一个好主意。

对于 hbase 问题,它并不那么简单,因为它由底层服务组成。这些服务是:namenode、datanode、zookeeper-server、hmaster、regionserver(如果你要使用 mapreduce,你需要 jobtracker 和 tasktraker)。 namenode、zookeeper-server 和 hmaster 不需要太多。但是你需要为数据节点提供良好的 io/ram 平衡,为区域服务器提供更好的 ram。将这些服务放在同一个盒子上从来都不是一个好主意(即使由于 io 需要它们是虚拟的也不行)。

最后但并非最不重要的一点是要小心交换! swap 是 mongodb 和 hbase 的敌人。

【讨论】:

对于 HBase,datanode 和 regionserver 服务通常在同一台服务器(节点)上,通常还与 tasktracker 一起用于 map reduce 工作。 namenode、jobtracker、hbase master(s) 和 zookeeper(s) 不会在同一个节点上,除非您正在执行一个非常小的仅测试伪分布式设置。

以上是关于MongoDB、Riak 和 HyperTable(或 HBase)的内存需求/利用率的主要内容,如果未能解决你的问题,请参考以下文章

云专家的问题 - OpenStack Hypertable?

在 Erlang(和 Riak)中开发应用程序时的良好做法?

在 Riak 中存储二进制数据的缺点?

更改 IP 后 RIAK 节点不启动

构建 riak:“rebar_core 中未捕获的错误”

为啥大公司使用 Mnesia 而不是使用 Riak 或 CouchDB [关闭]