【问题标题】:the result of Query mismatch In a MongoDB Shard environment,查询不匹配的结果在 MongoDB Shard 环境中,
【发布时间】:2020-11-06 22:16:58
【问题描述】:

我是这样配置的:

* configDB 1
* configDB 2
* configDB 3
* Mongos
* mongod (cluster_1)
* mongod (cluster_2)

shardkey : num (field)
shardkeyrange: 1~5 -> cluster1
shardkeyrange: 6~10 -> cluster2

我使用下面的查询在 db (mongos) 中插入了 10 个数据

db.A.insert({"num":1});
db.A.insert({"num":2});
db.A.insert({"num":3});
db.A.insert({"num":4});
db.A.insert({"num":5});
db.A.insert({"num":6});
db.A.insert({"num":7});
db.A.insert({"num":8});
db.A.insert({"num":9});
db.A.insert({"num":10});

在 mongod(cluster_1, cluster_2) 中查找查询

db.A.find({}).count; // cluster_1
> 5
db.A.find({}).count; //cluster_2
> 3

预期值:

>5
>5

可以看出,每个分片服务器中存储了5条数据。 但是当我查询每个集群时,cluster_1 有 5 个数据,cluster_2 有 3 个数据。 这并不总是发生。这种现象似乎偶尔会发生。

有没有可能出现类似现象的情况? 在数据库中执行特定操作时会发生这种情况吗?像块迁移.. 我想知道可能导致上述现象的各种情况或原因

【问题讨论】:

  • 将您运行的查询及其结果添加到问题中。

标签: mongodb sharding chunks mongodb-replica-set


【解决方案1】:

众所周知,.count 方法是不准确的,因为它只检查元数据而实际上并不计算文档。此方法在最新版本的 MongoDB 中已弃用。

您可以尝试一些方法:

  • db.A.countDocuments() - 此功能仅存在于最新版本中
  • db.A.count({num:{$gt:0}}) - 带有count 的过滤器将导致它读取文档并计算它们
  • db.A.find({}).itcount() - 这将从服务器获取所有文档,将它们传递给驱动程序/外壳并在客户端计算它们

【讨论】:

    猜你喜欢
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多