MongoDB 是一个分布式文档数据库。集群 (我们称之为复本集) 大多是自我管理的——当集群中的每台机器都知道了其他服务器的所在,如果其中一个节点宕机或网络出现问题,它们会自动加以处理。如果其中一台机器被关闭或发生崩溃,其他机器会接管。要实现仲裁,群集中至少需要有 3 个节点。集群中的每台服务器都有数据库所有数据的完整副本。
集群是为了冗余,而不是为了可伸缩性。所有的客户端通常只连接到一台服务器——被选举出来的主服务器,它负责执行查询和更新,并将数据变更传输到备用机器。
你可以直接连接到备用服务器做一些有趣的事情,比如运行分析查询。但一般来说,直接连接到备用节点意味着你可能会遇到一些旧数据,所以不应该连接到备用节点,除非你可以接受旧数据。
讲完“分布式”,接下来讲讲“文档数据库”。
MongoDB 与传统关系型数据库的不同之处在于,它不是将数据保存成扁平的行,然后存储在数据库的表中,而是在文档中存储分层结构的数据——基本上与 JSON 对象类似。文档存储在集合中,集合实际上就是一堆文档。每个文档可以具有与集合中其他文档不同的结构或模式。你还可以(而且应该)根据将要运行的查询类型和存储数据对集合中的文档进行索引。如果你想要确保集合中的所有文档都遵循一种结构,可以将 JSON 模式应用于集合,作为验证器。
你肯定听说过 MongoDB 是一个 JSON 数据库的说法,特别是如果你最近访问过 MongoDB 的主页。
不过,正如前面提到的,MongoDB 不是一个 JSON 数据库。它支持额外的数据类型,比如对象、原生日期对象、更多的数字类型、地理原语和高效的二进制类型等等。
MongoDB 实际上是一个 BSON 数据库。
这似乎是一个微不足道的区别,但却很重要。与基于文本的格式相比,它在存储、传输和遍历方面更高效,而且比 JSON 支持更多的数据类型。
MongoDB 存储的是 BSON 文档
用于查找的实际上也是 BSON 文档
结果以 BSON 文档的形式输出
BSON 甚至是 MongoDB 的有线协议
如果你习惯了使用 JSON,可以将 MongoDB 看成是 JSON 数据库,这就是为什么我们有时会这样描述它!等你使用 MongoDB 一段时间,就会开始对 BSON 的优势大加赞许。
迷思:MongoDB 不支持事务
一些第三方文章将 MongoDB 描述成 BASE 数据库。BASE 是指“基本可用、软状态、最终一致”。
但这不是真的,从来都不是!MongoDB 从来都不是“最终一致”的。对主文档的读写是强一致性的,对单个文档的更新始终是原子的。软状态是指需要持续不断的更新数据,否则数据就会过期,但 MongoDB 并非如此。
最后,如果太多的节点不可用,无法达成仲裁,MongoDB 将进入只读状态(降低可用性)。这是有意这么设计的,因为这样可以确保在出现问题时保持一致性。
MongoDB 是一个 ACID 数据库。它支持原子性、一致性、隔离性和持久性。
对单个文档的更新始终是原子的,从 4.0 版本开始,MongoDB 也支持跨多个文档和集合的事务。从 4.2 开始,甚至支持分片集群的跨分片事务。
虽然 MongoDB 支持事务,但在使用它时仍然要谨慎。事务是以性能为代价的,而且由于 MongoDB 支持丰富的分层文档,如果你的模式设计正确,就没有必要经常跨多个文档更新数据。
网友评论
0条评论发表

- 盘盘龙龙
- 搞笑
- 大白猫手绘
- 本地上传





































































点击或拖拽图片到此区域即可上传
仅限.jpg,.jpeg,.png,.gif
最新评论
推荐文章
-
朝中措·月季
朝中措·月季 杨永光 &nb...
合集 阿光 5273阅读 3天前
-
惜春
“春风如贵客,一到便繁华。来扫千山雪,归留万国花。”一年好景君须记,清明过后春自去…
田雨印象 5064阅读 4天前
-
清明祭
曾经也是一柱擎天马踏喧嚣声声,如今一睡千年已作故旧古人,纵是凌云壮志踌躇万千,也只能默默无语静看红尘风雨云烟,岁月沧桑谁...
管文华 4011阅读 5天前
-
定风波·牛年说牛
定风波·牛年说牛杨永光 身在凡间少得闲,耕风播雨为犁田。偶尔缓蹄遭...
合集 阿光 4887阅读 5天前
-
秘制鸡腿
家人都赞不绝口的秘制烤鸡腿来啦~将制作诀窍分享给大家喔:1.鲜鸡腿用料酒、盐、白胡椒粉、姜片腌制4小时入味。2. 用海天...
马建芬 4703阅读 6天前
-
捣练子·清明祭
捣练子·清明祭杨永光(一) 亲友至,子孙归,祭祀先人倍感悲。几度音...
合集 阿光 4714阅读 6天前
最新文章

彩龙
Copyright © 2008-2020 彩龙社区(https://www.clzg.cn) 版权所有 All Rights Reserved.
免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。
经营许可证编号:滇B2-20090009-7
网友评论
0条评论发表