MongoDBシャードクラスター内のドキュメントの数が間違っています

fgalan

MongoDB4.2を使用する3つのシャードを持つクラスターがあります。シャーディングをチェックする前に600000個のドキュメントがあるコレクション(ユーザー)があります。

mongos> db.users.count()
600000

次に、通常のコマンド(最初のDB、次のコレクション)でシャーディングします。

mongos> sh.enableSharding("app")
mongos> sh.shardCollection("app.users", {"name.first": 1})

数分後、シャード間でチャンクが均等に分散します。

chunks:
    shard0000   3
    shard0001   2
    shard0002   3

ここまでは順調ですね。

ただし、この直後にカウントを取得すると、コレクション内のドキュメントの数よりも多い奇妙な値が取得されます。

mongos> db.users.count()
994243
mongos> db.users.find({}).count()
994243

さらに、getShardDistribution()コレクション結果も奇妙で、1つのシャードにすべてのドキュメントの総数が表示されます(一部が他の2つのシャードに配布されているため、意味がありません)。

mongos> db.users.getShardDistribution()

Shard shard0000 at localhost:27018
 data : 95.85MiB docs : 236611 chunks : 3
 estimated data per chunk : 31.95MiB
 estimated docs per chunk : 78870

Shard shard0001 at localhost:27019
 data : 64.06MiB docs : 157632 chunks : 2
 estimated data per chunk : 32.03MiB
 estimated docs per chunk : 78816

Shard shard0002 at localhost:27020
 data : 243.69MiB docs : 600000 chunks : 3
 estimated data per chunk : 81.23MiB
 estimated docs per chunk : 200000

Totals
 data : 403.62MiB docs : 994243 chunks : 8
 Shard shard0000 contains 23.74% data, 23.79% docs in cluster, avg obj size on shard : 424B
 Shard shard0001 contains 15.87% data, 15.85% docs in cluster, avg obj size on shard : 426B
 Shard shard0002 contains 60.37% data, 60.34% docs in cluster, avg obj size on shard : 425B

興味深いことに、しばらく待つと(どれくらいかはわかりませんが、30分以内)、数えgetShardDistribution()て正常に戻ります。

mongos> db.users.count()
600000
mongos> db.users.getShardDistribution()

Shard shard0001 at localhost:27019
 data : 64.06MiB docs : 157632 chunks : 2
 estimated data per chunk : 32.03MiB
 estimated docs per chunk : 78816

Shard shard0002 at localhost:27020
 data : 83.77MiB docs : 205757 chunks : 3
 estimated data per chunk : 27.92MiB
 estimated docs per chunk : 68585

Shard shard0000 at localhost:27018
 data : 95.85MiB docs : 236611 chunks : 3
 estimated data per chunk : 31.95MiB
 estimated docs per chunk : 78870

Totals
 data : 243.69MiB docs : 600000 chunks : 8
 Shard shard0001 contains 26.28% data, 26.27% docs in cluster, avg obj size on shard : 426B
 Shard shard0002 contains 34.37% data, 34.29% docs in cluster, avg obj size on shard : 426B
 Shard shard0000 contains 39.33% data, 39.43% docs in cluster, avg obj size on shard : 424B

なんでこんなことが起こっているの?この影響を回避するにはどうすればよいですか?(たぶん、コマンドで何らかの同期を強制しますか?)

ありがとう!

PD:関連がある場合は、スタンドアロンmongodプロセスを使用して各シャードを実装するテスト環境のセットアップを使用しています構成サーバーは、モノノードレプリカセット構成を使用します。

D. SM

count推定数を提供し、正確でない場合があります。countDocuments正確なカウントを取得するために使用します。

シェルにgetShardDistribution入力するdb.users.getShardDistributionと、のソースを読み取ることができます設定データベースに保存されている情報を使用しているようです。

データベースによって保存された統計が正確ではないと予想することは非常に合理的です。これは、クラスター内のどこかで操作が実行されるたびに、それらを最新の状態に保つにはコストがかかるためです。

一部のチャンクが1つのシャードから別のシャードにコピーされた後、これらのチャンクが元のシャードから削除される前のある時点で統計を確認しているようです。この状況では、データはクラスターに2回保存されます。この場合、統計は正確ではありません。正確なカウントを取得するには、を使用しますcountDocuments

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ビューページャーフラグメントのあるタブが間違ったコンテキストで機能していますか?

分類Dev

PLS-00306でのCharOutパラメータエラーを使用したOracleストアドプロシージャの呼び出し:呼び出しでの引数の数またはタイプが間違っています

分類Dev

DbgHelp:x64で値渡しシンボルの場合、関数パラメーターのアドレスが間違っています

分類Dev

MATLABparforブロードキャスト変数の値が間違っています

分類Dev

オーバーロード関数createDirectStreamの型パラメーターの数が間違っています

分類Dev

Java Unsafe.storeFence()のドキュメントが間違っていますか?

分類Dev

Officeテンプレートのパスが間違っていると、ドキュメントの開口部がハングします

分類Dev

カスタムmysqliクラスのbind_paramのパラメーター数が間違っています

分類Dev

OracleストアドプロシージャPLS-00306:引数の数またはタイプが間違っています

分類Dev

コマンドライン引数rakeタスクの引数の数が間違っています

分類Dev

FragmentStatePagerAdapterコンストラクターの定数が間違っています

分類Dev

Mongodbマングースクエリは参照によってドキュメントの数を取得します

分類Dev

Mongodbマングースクエリは参照によってドキュメントの数を取得します

分類Dev

Haskellプログラムのクラッシュ-無限再帰?どこのステートメントが間違っていますか?

分類Dev

この場合、clangが間違っているか、gccが間違っているか、またはその両方が間違っていますか?メンバーポインタでconstnessをキャストします

分類Dev

JavaBeanセッターメソッド呼び出しエラー「引数の数が間違っています」

分類Dev

シスコのコンタクトセンターアウトバウンドキャンペーンでクライアントのダイヤル時間が間違ってインポートされた

分類Dev

「デフォルトのメンバー初期化子は、メンバー関数の外側の包含クラスの定義内で必要です」-私のコードの形式は間違っていますか?

分類Dev

Rails:ネストされた属性パラメータ内の配列列の引数の数が間違っています(0の場合、1..2が必要です)

分類Dev

オートコンプリートテキストボックスを作成する方法は、どのプロシージャが3つのパラメータ、つまりテキストボックス/パラメータフィールド、クエリの選択、接続を持っているかです。

分類Dev

未解決の識別子「ターミネーター」の使用、アップルのドキュメントは間違っていますか?

分類Dev

MDNはドキュメントのhtmlメインタグについて間違っていますか?

分類Dev

Rails 5でmemcachedキャッシュの問題が発生し、キャッシュをクリアしても間違ったフラグメントキャッシュがスタックする

分類Dev

オンロード関数のシーケンスが間違っています

分類Dev

トランザクションのデッドレターキューがいっぱいになっています

分類Dev

コンストラクター引数の型が間違っている、PySide

分類Dev

フラグメント内のTabLayoutは、アクティビティのタイトルバーによってシャドウされています

分類Dev

USBエンクロージャのディスクジオメトリが間違っています

分類Dev

USBエンクロージャのディスクジオメトリが間違っています

Related 関連記事

  1. 1

    ビューページャーフラグメントのあるタブが間違ったコンテキストで機能していますか?

  2. 2

    PLS-00306でのCharOutパラメータエラーを使用したOracleストアドプロシージャの呼び出し:呼び出しでの引数の数またはタイプが間違っています

  3. 3

    DbgHelp:x64で値渡しシンボルの場合、関数パラメーターのアドレスが間違っています

  4. 4

    MATLABparforブロードキャスト変数の値が間違っています

  5. 5

    オーバーロード関数createDirectStreamの型パラメーターの数が間違っています

  6. 6

    Java Unsafe.storeFence()のドキュメントが間違っていますか?

  7. 7

    Officeテンプレートのパスが間違っていると、ドキュメントの開口部がハングします

  8. 8

    カスタムmysqliクラスのbind_paramのパラメーター数が間違っています

  9. 9

    OracleストアドプロシージャPLS-00306:引数の数またはタイプが間違っています

  10. 10

    コマンドライン引数rakeタスクの引数の数が間違っています

  11. 11

    FragmentStatePagerAdapterコンストラクターの定数が間違っています

  12. 12

    Mongodbマングースクエリは参照によってドキュメントの数を取得します

  13. 13

    Mongodbマングースクエリは参照によってドキュメントの数を取得します

  14. 14

    Haskellプログラムのクラッシュ-無限再帰?どこのステートメントが間違っていますか?

  15. 15

    この場合、clangが間違っているか、gccが間違っているか、またはその両方が間違っていますか?メンバーポインタでconstnessをキャストします

  16. 16

    JavaBeanセッターメソッド呼び出しエラー「引数の数が間違っています」

  17. 17

    シスコのコンタクトセンターアウトバウンドキャンペーンでクライアントのダイヤル時間が間違ってインポートされた

  18. 18

    「デフォルトのメンバー初期化子は、メンバー関数の外側の包含クラスの定義内で必要です」-私のコードの形式は間違っていますか?

  19. 19

    Rails:ネストされた属性パラメータ内の配列列の引数の数が間違っています(0の場合、1..2が必要です)

  20. 20

    オートコンプリートテキストボックスを作成する方法は、どのプロシージャが3つのパラメータ、つまりテキストボックス/パラメータフィールド、クエリの選択、接続を持っているかです。

  21. 21

    未解決の識別子「ターミネーター」の使用、アップルのドキュメントは間違っていますか?

  22. 22

    MDNはドキュメントのhtmlメインタグについて間違っていますか?

  23. 23

    Rails 5でmemcachedキャッシュの問題が発生し、キャッシュをクリアしても間違ったフラグメントキャッシュがスタックする

  24. 24

    オンロード関数のシーケンスが間違っています

  25. 25

    トランザクションのデッドレターキューがいっぱいになっています

  26. 26

    コンストラクター引数の型が間違っている、PySide

  27. 27

    フラグメント内のTabLayoutは、アクティビティのタイトルバーによってシャドウされています

  28. 28

    USBエンクロージャのディスクジオメトリが間違っています

  29. 29

    USBエンクロージャのディスクジオメトリが間違っています

ホットタグ

アーカイブ