MongoDB事务与数据一致性

需积分: 0 3 下载量 2 浏览量 更新于2024-07-15 收藏 10.83MB PDF 举报
"MongoDB数据库学习,探讨了NoSQL数据库中的事务处理、数据一致性与可用性之间的权衡,以及MongoDB如何实现这些特性。" 在数据库领域,MongoDB是一款流行的NoSQL数据库,它提供了非关系型数据存储解决方案。NoSQL数据库在处理大规模分布式数据时具有优势,但同时也面临着如何确保数据一致性的问题。 事务是数据库操作的核心概念,它确保一组操作要么全部成功,要么全部失败。在关系数据库中,事务遵循ACID(原子性、一致性、隔离性、持久性)原则,保证了数据的可靠性和完整性。然而,MongoDB作为NoSQL数据库,其事务处理方式有所不同。 在MongoDB中,事务支持也是被考虑的,尤其是在多文档操作中。虽然它不像传统的关系型数据库那样提供严格的ACID特性,但仍然可以通过多文档交易来确保在某些情况下的数据一致性。这对于需要跨多个文档执行操作的应用场景非常有用。 数据一致性是系统设计的重要考量因素,特别是在分布式系统中。在银行的财务系统中,强一致性是必要的,以确保所有服务器上的数据始终保持同步。然而,在像电子商务网站这样的系统中,快速响应用户请求往往比立即确保数据一致性更重要。因此,MongoDB允许短暂的数据不一致性,以提高系统的可用性和性能。通过先将数据写入主服务器,然后在后台异步复制到备份服务器,可以实现这种权衡。 为了确保数据在主服务器和备份服务器间的最终一致性,MongoDB采用了一种称为“两阶段提交”的策略。在这种模式下,数据库首先在主服务器上记录更改,然后在确认主服务器成功写入后,再向备份服务器写入。只有当两个服务器都成功执行更新操作,事务才会被视为成功。这种方法牺牲了部分即时一致性,以换取更高的系统可用性。 最终一致性是NoSQL数据库常常采用的一种策略,尤其适用于MongoDB。这意味着在一段时间内,数据可能会在不同的副本之间存在差异,但随着时间推移,所有副本会达到一致状态。这种方式适应了大规模分布式环境,能够在保证服务响应速度的同时,逐步恢复数据的一致性。 MongoDB在处理事务和数据一致性方面提供了灵活的解决方案,适应了不同应用场景的需求,既能满足高可用性,也能保证数据的最终一致性。理解并掌握这些特性对于有效地利用MongoDB构建和维护大型分布式系统至关重要。
2021-06-23 上传
NoSQL 简介 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。 在现代的计算系统上每天网络上都会产生庞大的数据量。 这些数据有很大一部分是由关系数据库管理系统(RDMBSs)来处理。 1970年 E.F.Codd's提出的关系 模型的论文 "A relational model of data for large shared data banks",这使得数据建模和应用程序编程 更加简单。 通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数 据存储在网络和商务应用的主导技术。 NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥 护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新 的思维的注入。 关系型数据库遵循ACID规则 事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性: 1、A (Atomicity) 原子性 原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里 的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。 比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账 户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100 元。 2、C (Consistency) 一致性 一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一 致性约束。 例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足 a+b=10,否则事务失败。 3、I (Isolation) 独立性 所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修 改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。 比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。 4、D (Durability) 持久性 持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。 分布式系统 分布式系统(distributed system)由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广 域网)组成。 分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和 透明性。 因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。 分布式系统可以应用在在不同的平台上如:Pc、工作站、局域网和广域网上等。 分布式计算的优点 可靠性(容错) : 分布式计算系统中的一个重要的优点是可靠性。一台服务器的系统崩溃并不影响到其余的服务器。 可扩展性: 在分布式计算系统可以根据需要增加更多的机器。 资源共享: 共享数据是必不可少的应用,如银行,预订系统。 灵活性: 由于该系统是非常灵活的,它很容易安装,实施和调试新的服务。 更快的速度: 分布式计算系统可以有多台计算机的计算能力,使得它比其他系统有更快的处理速度。 开放系统: 由于它是开放的系统,本地或者远程都可以访问到该服务。 更高的性能: 相较于集中式计算机网络集群可以提供更高的性能(及更好的性价比)。 分布式计算的缺点 故障排除: :故障排除和诊断问题。 软件: 更少的软件支持是分布式计算系统的主要缺点。 网络: 网络基础设施的问题,包括:传输问题,高负载,信息丢失等。 安全性: 开发系统的特性让分布式计算系统存在着数据的安全性和共享的风险等问题。 什么是NoSQL? NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系 型数据库的数据库管理系统的统称。 NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。 这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。 为什么使用NoSQL ? 今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人 信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户 数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的 数据。 实例社会化关系网: Each record: UserID1, UserID2 Separate records