怎么对mongodb中某个集合做分片

65次阅读
没有评论

共计 1746 个字符,预计需要花费 5 分钟才能阅读完成。

本篇内容介绍了“怎么对 mongodb 中某个集合做分片”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

本例中 test1 为数据库,test1 也为集合名

1、先 enable sharding,开启数据库的分片功能

mongos use admin

mongos db.runCommand({enablesharding : test1})

2、对具体 collection 做分片, 选择片键为 _id

mongos db.runCommand({shardcollection : test1.test1 , key :{ _id :1}})

{collectionsharded : test1.test1 , ok : 1}

3、观察 2 个分片 shard_01  shard_02 tunks 数量

===========MongoDB===== 复制集读写设置 ====

write concern 

默认情况下,Primary 完成写操作即返回,Driver 可通过设置 [Write Concern] 来设置写成功的规则。

如下的 write concern 规则设置写必须在大多数节点上成功,超时时间为 5s。

cfg = rs.conf()

cfg.settings = {}

cfg.settings.getLastErrorDefaults = {w: majority , wtimeout: 5000}

rs.reconfig(cfg)

数据同步

Primary 与 Secondary 之间通过 oplog 来同步数据,Primary 上的写操作完成后,会向特殊的 local.oplog.rs 特殊集合写入一条 oplog,Secondary 不断的从 Primary 取新的 oplog 并应用。

因 oplog 的数据会不断增加,local.oplog.rs 被设置成为一个 capped 集合,当容量达到配置上限时,会将最旧的数据删除掉。另外考虑到 oplog 在 Secondary 上可能重复应用,oplog 必须具有幂等性,即重复应用也会得到相同的结果。

如下 oplog 的格式,包含 ts、h、op、ns、o 等字段

{

  ts : Timestamp(1446011584, 2),

  h : NumberLong(1687359108795812092), 

  v : 2, 

  op : i , 

  ns : test.nosql , 

  o : {_id : ObjectId( 563062c0b085733f34ab4129), name : mongodb , score : 100 } 

}

}

ts:操作时间,当前 timestamp + 计数器,计数器每秒都被重置

h:操作的全局唯一标识

v:oplog 版本信息

op:操作类型

i:插入操作

u:更新操作

d:删除操作

c:执行命令(如 createDatabase,dropDatabase)

n:空操作,特殊用途

ns:操作针对的集合

o:操作内容,如果是更新操作

o2:操作查询 where 条件,仅 update 操作包含该字段

========oplog 与 journal 日志问题 ========== 张友东博客 ===========

MongoDB 复制集里写入一个文档时,需要修改如下数据

将文档数据写入对应的集合

更新集合的所有索引信息

写入一条 oplog 用于同步

上面 3 个修改操作,需要确保要么都成功,要么都失败,不能出现部分成功的情况。

MongoDB 在写入数据时,会将上述 3 个操作放到一个 wiredtiger 的事务里,确保「原子性」

wiredtiger 提交事务时,会将所有修改操作应用,并将上述 3 个操作写入到一条 journal 操作日志里;后台会周期性的 checkpoint,将修改持久化,并移除无用的 journal。

谁先写入?

oplog 与 journal 是 MongoDB 里不同层次的概念,放在一起比先后本身是不合理的。

oplog 在 MongoDB 里是一个普通的集合,所以 oplog 的写入与普通集合的写入并无区别。

一次写入,会对应数据、索引,oplog 的修改,而这 3 个修改,会对应一条 journal 操作日志

“怎么对 mongodb 中某个集合做分片”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-20发表,共计1746字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)