MongoDB中文社区(mongoing-mongoing)

摘要

通过创建逻辑会话,现在可以跟踪单操作事务或者包含多个操作的事务在整个系统中资源消耗情况。这样就可以简单地,精确地取消事务中的操作以及采取分布式的模式进行垃圾回收。

背景

从历史情况来看,MongoDB中有许多操作可以从此跟踪中受益,例如从客户端发起的读写操作,会通过mongos查询路由器,到达分片集群以及组成集群的副本集。但当前还没有这样的一个标识符来跟踪这些操作,因此系统需依赖于一系列启发式算法。

逻辑会话

MongoDB的解决方案是创建逻辑会话和逻辑会话标识符。这是一个小的唯一标识符,称为lsid,可以由客户端将其附加到与MongoDB集群通信的会话中,相反,MongoDB集群又会将此lsid附加到该客户端使用的任何资源上。

MongoDB驱动程序会在客户端自动生成该lsid,无需调用集中的生成ID服务。lsid由一个id组成,它是客户端生成的GUID(全局唯一ID),以及一个uid,它是用户名的SHA256摘要。

从MongoDB 3.6开始,任何客户端操作都与逻辑会话相关联。然后,逻辑会话标识符lsid将与跨群集的命令操作相关联。

逻辑会话与取消操作

任何操作都会消耗资源。例如,一个find操作将在集群中的所有相关分片上创建游标。每个游标将开始获取第一批返回的结果。在逻辑会话退出之前,为了取消这样的操作,意味着需要遍历所有具有管理权限的分片,确定哪些活动与您的操作相关联,然后将其停止。

这个过程也带来了额外的复杂性。如果与发出相关命令的mongos进程失败了,取消过程会更加困难,你必须等待游标构建他们的第一批返回结果,然后超时地等待结果返回。

使用逻辑会话,整个过程将变得简单。可以向群集里运行的特定逻辑会话发出kill命令。由于所有资源(包括游标)都标记有逻辑会话标识符,因此停止和释放这些与特定lsid相关联的资源变成相对简单的操作。由于用户标识也是lsid的一部分,因此也可以向集群发出删除特定用户下所有会话资源的命令。

逻辑会话和分布式垃圾收集

之前,MongoDB中的资源超时都是本地所在节点要处理的事情; 资源所在的节点将决定资源是否已超时以及是否需要进行垃圾收集。未来版本的MongoDB功能,要求超时处理和垃圾收集能够做到群集可感知。为了实现这一目标,未来可以使用lsids作为基础进行功能升级更造。

在MongoDB3.6版本中,mongod和mongos进程开启后会做两件事情。首先,会运行一个控制器进程来管理所有会话,其次,会维护一个会话列表并连接到控制器中的进程上。每隔5分钟,控制器会同步刷新会话的相关信息,如更新会话最近被使用的时间。这个最后使用时间将成为一个基线时间点,30分钟后会触发一次TTL索引(有TTL索引的字段服务器会进行计算,当前服务器时间-字段时间>=expreAfterSeconds的秒数的时候,就会执行删除该数据)。该触发表明这个会话已经没被任何控制器使用超过30分钟了。该会话所使用的资源可以被清除了。

逻辑会话和事务

通过使用逻辑会话ID标记所有操作和使用的资源,现在可以更轻松地管理MongoDB中的长期活跃和广泛分布的数据库操作了。逻辑会话ID在取消操作和垃圾收集方面具有直接的作用,且逻辑会话是其它MongoDB 4.0+特性的基础。确保一个事务在一个会话中运行,那么无论事务是成功提交还是被中止,使用逻辑会话可以保证存储和清理该事务所占用的资源。

译者:郭远威

资深大数据架构师

MongoDB中文社区联席主席

著有《大数据存储MongoDB实战指南》一书;通信行业业务架构与数据迁移专家,先后在华为,中兴工作十余年。

sybase 事务 超时返回_事务背景介绍(2):MongoDB中的逻辑会话相关推荐

  1. 事务失败返回_什么是分布式事务以及有哪些解决方案?

    1.什么是分布式事务? 答:指一次大的操作由不同的小操作组成的,这些小的操作分布在不同的服务器上,分布式事务需要保证这些小操作要么全部成功,要么全部失败.从本质上来说,分布式事务就是为了保证不同数据库 ...

  2. mysql 事务 超时时间_设置事务超时时间的问题及数据库update和锁

    Oracle的update语句问题: update config t set t.value =1 where t.key='DB_ KEY' 或者: select * from config t w ...

  3. mysql事务日志备份_事务日志备份 (SQL Server)

    事务日志备份 (SQL Server)Transaction Log Backups (SQL Server) 01/05/2018 本文内容 适用于:Applies to: SQL ServerSQ ...

  4. python保存模型的路径怎么写_使用python在MongoDB中保存机器学习(ML)和深度学习(DL)模型...

    我们知道,当我们训练机器学习或深入学习模型时,我们必须保存训练过的模型,以便将来进行预测.现在的训练模型非常昂贵,所以如果我们能够保存它们并将其用于解决其他一些问题.例如,一个训练过的能够识别汽车的神 ...

  5. polardb mysql 事务隔离级别_事务的四种隔离级别

    数据库事务的隔离级别有4种,由低到高分别为Read uncommitted .Read committed .Repeatable read .Serializable .而且,在事务的并发操作中可能 ...

  6. mysql 事务日志备份_事务日志备份与恢复 5

    14.5 用Bak文件恢复到故障点的奥秘 如果数据库被损坏,我们就只能利用备份集文件(通常扩展名为BAK)来恢复数据库,如果备份集中包含了尾日志备份,我们同样能将数据库恢复到故障点. 前面我们已经介绍 ...

  7. mysql事务最大个数_事务、mysql数据库的默认最大连接数、分页

    1.事务的ACID特性 (1)概念 事务是并发控制的单位,是用户定义的一个操作序列,这些操作要么都做要么都不做,是一个不可分割的工作单位. (2)特性 原子性:表示事务内操作不可分割,要么都做要么都不 ...

  8. mongodb spring 超时时间_拥抱NoSQL--谈Spring Data MongoDB的简单使用

    先说说MongoDB是什么. MongoDB官网也有各语言所用的API,当然也有Java的了.但是平日写的东西大部分是基于Spring框架的,自然希望对于数据库的操作也在Spring的掌控之下.前几日 ...

  9. 什么是事务的传播_这么漂亮的Spring事务管理详解,你不来看看?

    事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用 ...

最新文章

  1. excel:替换问号?时会所有数据被替换掉(通配符问题)
  2. poj 1696(极角排序)
  3. flume与Mosquitto的集成
  4. Golang 常见设计模式之选项模式
  5. js大屏导出图片_整理了30个实用可视化大屏模板,附源文件+工具
  6. 今年电子设计竞赛取消了?
  7. c语言形参指针 实参数组,《C语言程序设计》中的指针形参和函数体中数组实参问题的教学研究.pdf...
  8. 协同过滤算法_机器学习 | 简介推荐场景中的协同过滤算法,以及SVD的使用
  9. LwIP应用开发笔记之七:LwIP无操作系统HTTP服务器
  10. 剑指offer——面试题47:不用加减乘除做加法
  11. Elasticsearch节点类型
  12. p5.js之有趣的时钟(码绘2)
  13. 从无线安全到内网渗透[1]
  14. 三菱伺服驱动器说明书_张家港市HG-KN13J-S100三菱伺服控制器
  15. 解压缩文件常用命令——linux
  16. 关于服务器磁盘配额超出的问题解决(报错源码是Disk quota exceeded)
  17. 电脑桌面云便签怎么绑定和开启微信提醒?
  18. 用python从gbff文件中提取cds序列
  19. python软件设计数据分析统计服_学习笔记(一)-python制作数据分析工具
  20. 计算机科学与技术——软科中国大学专业排名

热门文章

  1. Centos打开、关闭、结束tomcat,及查看tomcat运行日志
  2. Spring Boot实践——Spring AOP实现之动态代理
  3. 16 树的子结构(这题多复习)
  4. Spring Security Ajax 被拦截
  5. 用ng-view创建单页APP
  6. codeforces 796A-D
  7. zoj 3620 Escape Time II dfs
  8. 优秀代码所具备的5大品质 你的代码呢?
  9. [凯立德]2013.12.17凯立德发布秋季版(2F21J0E)最新增量包SP1
  10. Android ADV 虚拟卡常见错误Failed to push的解决