1

Mongo に保存された、最適化もインデックスもされていない 1 億件のツイートのデータセットがあります。

先月のすべてのツイートを別のサーバーにコピーする必要があるのですが、これを行う最善の方法は何ですか?

私のアイデアは、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;
4

3 に答える 3

0

いくつかのアイデア:

  • 処理/保存を行うために複数のクライアント/スレッドを追加します (たとえば、単純にするために、それぞれが 1 日のツイートで動作する場合があります)。サーバーの容量がいっぱいになるまでクライアントを追加し続けます。
  • データベース全体を新しいサーバーにコピーし、古いデータを削除してから、圧縮(およびインデックス化) します。
  • ジャーナリングを無効にすることを検討する (それがニーズに対して安全である場合)、または書き込み頻度を下げるように調整する(耐久性を下げる) ことを検討してください。
  • ロギング、トレースなどが無効になっていることを確認します
  • サーバーが負荷を処理するのに十分なサイズであることを確認してください
  • または、完了するまで長い休暇を取ってください。:)
于 2013-01-17T13:31:23.543 に答える
0

複数のサーバーにデータが必要な場合は、mongodb レプリケーション機能を使用する必要があります。データをバックアップしたいだけなら、db ファイルをコピーするのが最も簡単な方法です。

于 2013-01-17T13:23:50.923 に答える
0

データベース ファイルを新しいホストにコピーし、mongod を起動してドキュメントを削除するか、必要のないデータベースやコレクションを削除するだけです。それが一番早い方法です。

于 2013-01-21T15:24:55.013 に答える