我已经评估了大多数 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 是多少?
最佳答案
我在生产中使用了 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 的敌人。
关于MongoDB、Riak 和 HyperTable(或 HBase)的内存需求/利用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7439952/
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
ruby如何管理内存。例如:如果我们在执行过程中采用C程序,则以下是内存模型。类似于这个ruby如何处理内存。C:__________________|||stack|||------------------||||------------------|||||Heap|||||__________________|||data|__________________|text|__________________Ruby:? 最佳答案 Ruby中没有“内存”这样的东西。Class#allocate分配一个对象并返回该对象。这就是程序
Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile
你好,我无法成功如何在散列中删除key后释放内存。当我从哈希中删除键时,内存不会释放,也不会在手动调用GC.start后释放。当从Hash中删除键并且这些对象在某处泄漏时,这是预期的行为还是GC不释放内存?如何在Ruby中删除Hash中的键并在内存中取消分配它?例子:irb(main):001:0>`ps-orss=-p#{Process.pid}`.to_i=>4748irb(main):002:0>a={}=>{}irb(main):003:0>1000000.times{|i|a[i]="test#{i}"}=>1000000irb(main):004:0>`ps-orss=-p
这会导致Ruby出现内存问题吗?我知道如果大小超过10KB,Open-URI会写入TempFile。但是HTTParty会在写入TempFile之前尝试将整个PDF保存到内存吗?src=Tempfile.new("file.pdf")src.binmodesrc.writeHTTParty.get("large_file.pdf").parsed_response 最佳答案 您可以使用Net::HTTP。参见thedocumentation(特别是标题为“流媒体响应机构”的部分)。这是文档中的示例:uri=URI('http://e
在部署在heroku上的Rails应用程序(v:3.1)中,我在内存中获得了更多具有相同ID的对象。我的heroku控制台日志:>>Project.find_all_by_id(92).size=>2>>ActiveRecord::Base.connection.execute('select*fromprojectswhereid=92').to_a.size=>1这怎么可能?可能是什么问题? 最佳答案 解决方案根据您的SQL查询,您的数据库中显然没有重复条目。也许您的类项目中的size或length方法已被覆盖。我试过find_
我的两个不同的Rails应用程序的内存有一些奇怪的问题。这两个应用程序都使用rails3.0.7。每个Controller请求分配20-30-50MB的内存。在生产模式下,这个数量减少到5-10。但这是同样的事情。这是两个应用程序使用的gem列表:gem'pg'gem'haml'gem'sass'gem'devise'gem'simple_form'gem'state_machine'gem"globalize3","0.1.0.beta"gem"easy_globalize3_accessors"gem'paperclip'gem'andand'关闭所有这些gem不会给我任何结果。我
正如标题,我有一个处理大量数据的ruby程序。该程序占用了所有内存,其中调用了系统命令hostname,并且发生错误无法分配内存-主机名我试过GC.start但它不起作用。那么如何强制ruby释放未使用的内存呢?OK,这是别人的测试代码,最后报错是big_var被回收了。但是内存仍然没有释放。require"weakref"defreportputs"#{param}:\t\tMemory"+`psax-opid,rss|grep-E"^[[:space:]]*#{$$}"`.strip.split.map(&:to_i)[1].to_s+'KB'endbig_var=""#big
我想上传我在运行时用Ruby生成的数据,就像从block中提供上传数据一样。我找到的所有示例仅展示了如何流式传输必须在请求之前位于磁盘上的文件,但我不想缓冲该文件。除了滚动我自己的套接字连接之外,最好的解决方案是什么?这是一个伪代码示例:post_stream('127.0.0.1','/stream/')do|body|generate_xmldo|segment|body 最佳答案 有效的代码。require'thread'require'net/http'require'base64'require'openssl'class
我对为我的RubyonRails3.1.3应用优化我的Unicorn设置的方法很感兴趣。我目前正在高CPU超大实例上生成14个工作进程,因为我的应用程序在负载测试期间似乎受CPU限制。在模拟负载测试中,每秒大约20个请求重放请求,我的实例上的所有8个内核都达到峰值,盒子负载飙升至7-8个。每个unicorn实例使用大约56-60%的CPU。我很好奇可以通过哪些方式对其进行优化?我希望能够每秒将更多请求汇集到这种大小的实例上。内存和所有其他I/O一样完全正常。在我的测试过程中,CPU越来越低。 最佳答案 如果您受CPU限制,您希望使用