将大型mongo数据库的一部分复制到另一台服务器的最快/最佳方法?

时间:2013-01-17 12:51:46

标签: mongodb

我有一个100万条推文的数据集,存储在Mongo中,未经优化和未编入索引。

我需要将上个月的所有推文复制到另一台服务器上,最好的方法是什么?

我的想法是使用Ruby脚本将相关推文提取并复制到服务器上的新数据库,然后运行mongo copyDatabase命令将其复制。它采取了可怕的长时间,任何其他方式吗?

require 'mongo_mapper'
MongoMapper.database = 'twitter'
require './models'
tweets = TwitterTweet.where(:created_at => {"$gt" => 1.month.ago}).all; # about 15 million

MongoMapper.database = 'monthly'
# copy the tweets over to the new db
tweets.each do |tweet|
  tweet.save!
end;

3 个答案:

答案 0 :(得分:0)

如果您需要在多个服务器上使用数据,则应该使用mongodb复制功能。 如果您只想备份数据,那么最快的方法就是复制db文件。

答案 1 :(得分:0)

一些想法:

  • 添加多个客户端/线程来进行处理/保存(例如,每个人都可以在一天的推文上工作,例如只是为了简单起见)。继续添加客户端,直到服务器达到容量。
  • 将整个数据库复制到新服务器并删除旧数据,然后compact将其删除(并将其编入索引)。
  • 考虑禁用日记功能(如果这对您的需求是安全的),或者将其调整为写入less frequently(耐用性较低)
  • 确保禁用任何记录,跟踪等
  • 确保服务器的大小适合处理负载
  • 或者,只是在完成时度过一个长假。 :)

答案 2 :(得分:0)

只需将数据库文件复制到新主机,启动mongod并删除不需要的文档/删除数据库/集合。这是最快捷的方式。