2012-01-16 9 views
2

mongoの分割アルゴリズムにアクセスする方法はありますか?私はdb.printShardingStatus()について知っているが、それは私が自分の論理を書いてキーをバケツにする必要がある。mongo sharding:鍵が解決するシャード/ホストを決定する

これは、mongosがルーティングするときに行うことだと思います。

コンテキストのために、非常に大量のデータをmongoにストリーミングしています。 EmMachineを使用してデータをプリプロセッサマシンにストリームするデータコレクタがあり、いくつかのデータクレンジングを行い、次にローカルmongodに挿入します。私がしたいのは、データの各部分についてです。コレクタはシャーディング戦略に従い、対応するプリプロセッサマシンにストリームします。トリガーは同じことを成し遂げますが、モンゴにAFAIKはありません。

答えて

2

したがって、短い回答はです。これは可能です。ですが、探しているコマンドがわかりません。

MongoDBシャーディングは非常に単純です。設定データベースにはキー範囲が含まれており、キー範囲は正しいホストを指しています。 configデータベースは実際には通常のDBであり、シェルやドライバから直接接続することができます。 (偶発的な接続を避けるため、通常は別のデフォルトポートで実行されます)。

したがって、使用可能な範囲を調べるだけで簡単にホストを検索できます。あなたのキーが範囲内に入るまで、ロジックはforループより複雑ではありません。

シャーディングを手動で制御する方法の詳細はlook hereです。それは何が起こっているかについていくつかの洞察を提供するでしょう。

上記のアドバイスはすべて「保証の無効化」です。 mongos(ルータ)とconfig DBの背後にある全体のコンセプトは、この複雑さを抽象化することです。あなたがやっていることをすることによって、あなたは "フードの下を見なければなりません"。

0

どのシャードがデータであるかを見つけるには、explain()シェルヘルパーを使用するのが良い方法です。

あなたのキーはどのシャードに表示されますか。

+0

をこれが最も簡単な方法でした。ありがとう! – phillee

3

最も単純な方法が見つかりました。シャーディング情報はconfig dbに格納されています(驚いたことに、これに関する多くのドキュメントは見つかりませんでした)。チャンク情報を取得するには、使用:

mongos> use config 
switched to db config 
mongos> db.chunks.find() 

サイドノート

私はprintShardStatus機能を印刷して、これを考え出し:

> print(db.printShardingStatus) 
function (verbose) { 
    printShardingStatus(this.getSiblingDB("config"), verbose); 
} 
関連する問題