MongoDB 高手课
唐建法(TJ)
Tapdata CTO、MongoDB 中文社区主席、前 MongoDB 大中华区首席架构师
19351 人已学习
新⼈⾸单¥59
课程目录
已完结/共 53 讲
MongoDB 高手课
登录|注册
留言
9
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 21 | 事务开发:读操作事务之二
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | 认识文档数据库MongoDB
04 | MongoDB特色及优势
05 | 实验:安装MongoDB
06 | MongoDB基本操作
07 | 实验:Hello World程序开发
08 | 聚合查询
09 | 实验:聚合查询
10 | 复制集机制及原理
11 | 实验:搭建MongoDB复制集
12 | MongoDB全家桶
13 | 模型设计基础
14 | JSON文档模型设计特点
15 | 文档模型设计之一:基础设计
16 | 文档模型设计之二:工况细化
17 | 文档模型设计之三:模式套用
18 | 设计模式集锦
19 | 事务开发:写操作事务
20 | 事务开发:读操作事务之一
21 | 事务开发:读操作事务之二
22 | 事务开发:多文档事务
23 | Change Stream
24 | MongoDB开发最佳实践
25 | 分片集群机制及原理
26 | 分片集群设计
27 | 实验:分片集群搭建及扩容
28 | MongoDB监控最佳实践
29 | MongoDB备份与恢复
30 | 备份与恢复操作
31 | MongoDB安全架构
32 | MongoDB安全加固实践
33 | MongoDB索引机制(一)
34 | MongoDB索引机制(二)
35 | MongoDB读写性能机制
36 | 性能诊断工具
37 | 高级集群设计:两地三中心
38 | 实验:搭建两地三中心集群
39 | 高级集群设计:全球多写
40 | MongoDB上线及升级
41 | MongoDB应用场景及选型
42 | MongoDB典型案例(一)
43 | MongoDB典型案例(二)
44 | 关系型数据库迁移
45 | 数据库迁移方式及工具
46 | Oracle迁移实战
47 | MongoDB + Spark实时大数据
48 | MongoDB + Spark连接实战
49 | MongoDB SQL套接件
50 | MongoDB与微服务
51 | MongoDB与数据中台
52 | MongoDB数据中台案例
53 | 结果测试&结束语
登录 后留言

全部留言(9)

  • 最新
  • 精选
kylexy_0817
老师,有个问题想请教,本节中的{readConcern:"majority"}的例子,所有节点的数据达到共识的时间,与复制集的应该不一样吧?复制集的情况应该会简单点,就是当primary节点把数据复制给secondary时,顺便把x=1写入P成功的信息告诉S1和S2,这样S1和S2只需要告诉P他们也写入成功就完事了,没必要到t5、t6吧?只有在writeConcern时才像例子中说的?

作者回复: 很有洞察力的一个问题。 一个读线程,使用 readConcern:majority,在t1 的时候读S1节点,S1是否要返回最新的一个写入 x=1 还是要等到t5? 首先理解,这个读线程只能读 一个被大多数节点确认的写入(满足write majority),这才可以满足readConcern: majority的条件。 在t1的时候,x=1实际上已经到达两个节点(majority),但是判断这个事实的是主节点。在主节点没有知道并确认x=1这个操作已经被多数节点写入的时候,这条数据是不够资格被发给 readConcern: majority 读线程的。 这个是3个节点,想象一下5个节点 - 那S1是肯定不知道数据已经写入到多数节点,只能等primary 告诉他。 这里是官方的文档: https://docs.mongodb.com/manual/reference/read-concern-majority/

2020-02-18
4
6
川川
老师你好, 我用readConcern和writeConcern就是想基于Quorum原理来解决一致性问题的, 但是我看官网说“readConcern设置为majority时,能保证读到的数据『不会发生回滚』,但并不能保证读到的数据是最新的“。这句话指的是我刚才写的数据提交后,在发起读操作并没法马上读到刚才提交的数据吗。 请问老师怎么理解

作者回复: 如果你的writeConcern是默认,比如说你写 x:1 到主节点, ,它会立即返回。如果你马上再去用majority readConcern去读这条数据,这条数据有可能没被复制到多数节点,你就读不到它。如果在同一个线程内,一般这个是不可以接受的。 正解是,在读写操作是同一个应用发起时,你要配合使用 writeConcern:majority 来保证你的写已经被提交到大多数节点,这样你马上再用readConcern: majority 就可以读到你刚才的写入了。

2020-08-28
3
3
炎炎
mysql单节点时仍然是事务型的。我觉得事务最核心的标志是 begin; xxx; commit|rollback; 当xxx中出问题或者业务程序里出问题可以rollback,保证整个过程是完整的原子的。

作者回复: 完整的事务包括ACID。你的理解和大部分程序员一样,更加关注的是里面的A: Atomicty。 就是几个操作要group为一个原子操作,要么全部成功,要么回滚所有操作。

2020-04-05
1
👻 小二
老师, 请问下, majority 读时, 我有3个节点,刚开始三个节点, x值都是1, 后面更新了x=2时, a节点跟b节点都更新了, c还没来得及更新, 然后我去读, 刚好落在c节点上, 那此时 会返回1?

作者回复: 如果用majority 读,肯定返回是2

2019-12-24
6
炎炎
老师讲的“事务”,应该是“复制集”模式下的安全读写!
2020-04-05
2
长期规划
老师,您给的示例中,在两个从节点设置fsyncLock,在主上用readconcern=majority读时,主会block,block是基于什么考虑呢?为何要等待呢,直接忽略未同步到majority的数据,立即返回已经majority的不行吗?对比MySQL,设置提交读时,直接忽略未提交的数据,而不是等待他们提交。
2019-12-18
2
长期规划
老师,我在MongoDB3.6下测试您的示例,发现在两个从节点都设置db.fsyncLock()的情况下,在主上执行readConcern("majority"),并不会阻塞等待,会立即返回,返回结果中不包含x=1(该记录写入主节点,未同步到从节点)。你用的是4.2版本吗?这个版本是增加了什么设置才会导致读时阻塞吧
2019-12-20
1
1
田翌辰
mysql的默认隔离级别不是RR嘛?
2020-06-07
淞淞同学
那mongo是怎么解决幻读问题的呢?mysql是可重复读解决的记得。
2020-02-09
收起评论