如何在mongodb中实现分片,当集合在多个分片上时_id字段会发生什么情况?

如何在mongodb中实现分片,当集合在多个分片上时_id字段会发生什么情况?,mongodb,Mongodb,64位计算机上mongo DB的最大数据库大小限制是多少?当数据库大小增加时,如何实现分片?以及如何在多个碎片之间存储集合数据?当集合位于多个碎片上时_id字段会发生什么情况 在Linux下,单个mongod实例最多可容纳64TB的日志数据,在Windows下可容纳4TB的日志数据。由于分片集群可能由几百个分片组成,因此分片数据库(或者更具体地说,数据库的分片集合)的大小在所有实际用途中都是无限的 切分是在集合级别完成的。实际上,向分片集群添加分片非常容易。基本上,您必须启动一个副本集,并通过发

64位计算机上mongo DB的最大数据库大小限制是多少?当数据库大小增加时,如何实现分片?以及如何在多个碎片之间存储集合数据?当集合位于多个碎片上时_id字段会发生什么情况

  • 在Linux下,单个mongod实例最多可容纳64TB的日志数据,在Windows下可容纳4TB的日志数据。由于分片集群可能由几百个分片组成,因此分片数据库(或者更具体地说,数据库的分片集合)的大小在所有实际用途中都是无限的

  • 切分是在集合级别完成的。实际上,向分片集群添加分片非常容易。基本上,您必须启动一个副本集,并通过发出sh.addHost(副本集名称/主机名[:端口])将其添加到分片集群中,mongoDB负责其余部分,即平衡每个分片上存储的数据量。请注意,不鼓励使用独立实例作为碎片,这可能会导致数据丢失、数据库不一致、停机时间延长以及开发时间增加(因为您需要构建一个能够处理部分结果的应用程序)

  • mongoDB使用选择的分片键使用基于范围的分片。每个分片存储指定范围内具有分片密钥的文档范围。用于访问数据的
    mongos
    实例将从所谓的配置服务器(属于集群的一部分)接收这些范围。当客户机想要写入或访问数据时,如果查询包含分片键,则将查询发送到指定分片的特定分片;如果查询不包含分片键,则将查询发送到所有分片。好吧,这有点过于简单化了,但总的来说,它是这样工作的

  • \u id
    字段可能是shard键(与任何其他字段一样),但由于它是单调递增的(假设您使用的是默认的ObjectId),因此它是一个糟糕的选择,除非散列:
    sh.shardCollection(“theCollection”:{“\u id”:“hashed”})
    。除此之外,它将“仅”具有这样的优势:集群的各个碎片将保存它们所持有的
    \u id
    的索引,并且可以在不进行集合的完全扫描的情况下找到这些文档,这在大型集合中可能会非常昂贵

  • 您可能需要查看详细信息。

    每个问题一个问题,这是如何工作的。太多的东西会被认为太宽泛,很快就会被关闭。此外,stackoverflow用于“编程”主题。stackexchange网络中还有其他用于数据库管理等的站点。您尝试过了吗?对不起,尼尔,您当然是对的。有时,在Quora和SO之间来回变换会让我忘记这一点这些问题大部分都是有效的个人问题,但你应该能够在谷歌上搜索其中一些问题和其他问题,以解决个人问题。你被邀请投票支持答案,甚至可能接受答案;)