我在5台机器上安装了MongoDB 3.2.6,这些机器都形成了由2个碎片组成的碎片集群(每个碎片都是具有主次仲裁器配置的副本集)。
我还有一个数据库,其中包含非常大的集合(约50M记录,200GB),它是通过mongos导入的,mongos将其与其他集合一起放入主分片。
我在该集合上生成了散列ID,这将是我的分片密钥。
在thay之后,我用:
> use admin
> db.runCommand( { enablesharding : "my-database" } )
> use my-database
> sh.shardCollection("my-database.my-collection", { "_id": "hashed" } )
命令返回:
{ "collectionsharded" : "my-database.my-collection", "ok" : 1 }
它开始碎裂。碎片的状态如下所示:
> db.my-collection.getShardingDistribution()
Totals
data : 88.33GiB docs : 45898841 chunks : 2825
Shard my-replica-1 contains 99.89% data, 99.88% docs in cluster, avg obj size on shard : 2KiB
Shard my-replica-2 contains 0.1% data, 0.11% docs in cluster, avg obj size on shard : 2KiB()
这一切看起来都不错,但问题是,当我通过蒙古人计算我的收藏时,我发现数量正在增加。
当我登录到主副本集(my-replica-1)时,我看到my-collection中的记录数量没有减少,尽管my-replica-2中的记录数量在增加(这是意料之中的),所以我猜mongodb在迁移到第二个碎片时没有从源碎片中删除块。
有人知道这正常吗?如果不正常,为什么会这样?
编辑:事实上,现在它在my-replica-1上开始下降,尽管在mongos上它仍在增长(有时会先下降后上升)。也许这是迁移大型集合时的正常行为,我不知道
伊凡
根据此处的文档,您正在观察一个有效的情况。当文档从 a
移动到 b 时
,只要收到重新
定位成功的确认,它就会被计算为该文档的两倍。
在分片集群上,如果存在孤立文档或正在进行块迁移,db.collection.count() 可能会导致计数不准确。
为了避免这些情况,在分片集群上,使用db.collection.aggregate()方法的$group阶段对文档进行$sum。例如,以下操作对集合中的文档进行计数:
db.collection.aggregate(
[
{ $group: { _id: null, count: { $sum: 1 } } }
]
)
问题内容: 我已经设置了一个分片分配过滤器,例如: 如何删除或禁用此类设置?我尝试了包含,但后来我同时设置了两个过滤器- 包含和排除。我可以设置类似。 但是也可以设置类似以下内容的节点吗? 问题答案: 你有没有尝试过 听起来很蠢,但是我认为这就是您在Elasticsearch中取消设置的方式…
ShardingAlgorithm SPI 名称 详细说明 ShardingAlgorithm 分片算法 已知实现类 详细说明 BoundaryBasedRangeShardingAlgorithm 基于分片边界的范围分片算法 VolumeBasedRangeShardingAlgorithm 基于分片容量的范围分片算法 ComplexInlineShardingAlgorithm 基于行表达式的
配置项说明 命名空间:http://shardingsphere.apache.org/schema/shardingsphere/sharding/sharding-5.0.0.xsd <sharding:rule /> 名称 类型 说明 id 属性 Spring Bean Id table-rules (?) 标签 分片表规则配置 auto-table-rules (?) 标签 自动化分片表规
配置项说明 spring.shardingsphere.datasource.names= # 省略数据源配置,请参考使用手册 # 标准分片表配置 spring.shardingsphere.rules.sharding.tables.<table-name>.actual-data-nodes= # 由数据源名 + 表名组成,以小数点分隔。多个表以逗号分隔,支持inline表达式。缺省表示使用
配置项说明 dataSources: # 省略数据源配置,请参考使用手册 rules: - !SHARDING tables: # 数据分片规则配置 <logic-table-name> (+): # 逻辑表名称 actualDataNodes (?): # 由数据源名 + 表名组成(参考Inline语法规则) databaseStrategy (?): #
配置入口 类名称:org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration 可配置属性: 名称 数据类型 说明 默认值 tables (+) Collection<ShardingTableRuleConfiguration> 分片表规则列表 - autoTables (+) Collection<Shardin