数据库版本 | 特点 | 实现方法 |
MongoDB 5.0从前 | 重新分片过程复杂且需要手动分片。 | 方法一:先dump整个集合,然后用新的分片键把数据库重新加载到一个新的集合中。 由于这是一个需要离线处理的过程,因此您的应用步伐在重新加载完成之前需要中断停服较长时间。例如:在一个三分片的集群上dump和重新加载一个10 TB以上的集合大概需要几天时间。 方法二:新建一个分片集群并重新设定集合的分片键,然后通过定制迁移方式,将旧分片集群中需要重新分片的集合,按新的分片键写入到新的分片集群中。 该过程中需要您自行处理查询路由和迁移逻辑、不停查抄迁移进度,以确保全部数据迁移成功。 定制迁移是高度复杂的、劳动密集型的、有风险的任务,而且耗时很长。例如:某个MongoDB用户花了三个月才完成100亿个document的迁移。 |
MongoDB 5.0开始 | 运行reshardCollection下令即可启动重新分片。 重新分片的过程高效。 并不是简单地重新平衡数据,而是在背景将全部当前集合的数据复制并重新写入新集合,同时与应用步伐新的写入保持同步。 重新分片是完全自动化的。 将重新分片耗费的时间从几周或几个月压缩到几分钟或几小时,避免了冗长繁杂的手动数据迁移。 通过使用在线重新分片,可以方便地在开发或测试环境中评估不同分片键的效果,也可以在您需要时修改分片键。 | 您可以在业务运行(数据不停增长)的情况下,按需改变集合的分片键(Shard key),而不需要数据库停机或在数据集合中进行复杂的迁移。您只需要在MongoDB Shell中运行reshardCollection下令,选择您需要重新分片的数据库和集合,指定新的分片键即可。 reshardCollection: "<database>.<collection>", key: <shardkey> 阐明 <database>:需要重新分片的数据库名称。 <collection>:需要重新分片的集合名称。 <shardkey>:分片键的名称。 当您调用reshardCollection下令时,MongoDB会克隆现有集合,然后将现有集合中全部oplog应用到新集合中,当全部oplog被使用后,MongoDB会自动切换到新集合,并在背景删除旧集合。 |
字段名 | 描述 |
$bitAnd | 返回Int或Long类型数值的按位与运算的结果。 |
$bitNot | 返回Int或Long类型数值的按位取反运算结果。 |
$bitOr | 返回Int或Long类型数值的按位或运算的结果。 |
$bitXor | 返回Int或Long类型数值的按位异或运算的结果。 |
$median | 返回近似中位数,相当于50百分位数。 |
$percentile | 返回指定的百分位数。 |
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |