MongoDB 特性

什么是MongoDB?

什么是MongoDB?MongoDB是一个面向文档的NoSQL数据库,用于大容量数据存储。MongoDB是2000年代中期出现的一个数据库,属于NoSQL数据库。

MongoDB功能

  1. 每个数据库都包含集合,而集合又包含文档。每个文档可以有不同的字段数。每个文档的大小和内容可以彼此不同。
  2. 文档结构更符合开发人员如何用各自的编程语言构造类和对象。开发人员通常会说,他们的类不是行和列,而是有一个带有键值对的清晰结构。
  3. 正如NoSQL数据库简介中所看到的,行(或MongoDB中调用的文档)不需要预先定义模式。相反,可以动态创建字段。
  4. MongoDB中可用的数据模型允许您更容易地表示层次关系、存储数组和其他更复杂的结构。
  5. 可扩展性—MongoDB环境非常容易扩展。世界各地的公司都定义了集群,其中一些公司运行100多个节点,数据库中有大约数百万个文档。
  6. 为什么使用MongoDB?

    下面是为什么应该开始使用MongoDB的几个原因

    1. 面向文档 – 由于MongoDB是一个NoSQL类型的数据库,因此它不使用关系类型格式的数据,而是将数据存储在文档中。这使得MongoDB非常灵活,能够适应实际的业务环境和需求。
    2. 即席查询 – MongoDB支持按字段、范围查询和正则表达式搜索。可以进行查询以返回文档中的特定字段。
    3. 索引-可以创建索引以提高MongoDB中搜索的性能。MongoDB文档中的任何字段都可以被索引。
    4. 复制-MongoDB可以为副本集提供高可用性。副本集由两个或多个Mongo DB实例组成。每个副本集成员可以随时扮演主副本或辅助副本的角色。主副本是与客户机交互并执行所有读/写操作的主服务器。辅助副本使用内置复制来维护主副本的数据。当主副本失败时,副本集会自动切换到辅助副本,然后成为主服务器。
    5. 负载均衡 – MongoDB使用sharding的概念,通过跨多个MongoDB实例拆分数据来横向扩展。MongoDB可以在多个服务器上运行,平衡负载和/或复制数据,以在硬件故障时保持系统的正常运行。

 

MongoDB和RDBMS之间的差异

以下是MongoDB和RDBMS之间的一些关键术语差异

RDBMS MongoDB 不同点

Table Collection 在RDBMS中,该表包含用于存储数据的列和行,而在MongoDB中,该结构称为集合。集合包含的文档依次包含字段,而字段又是键值对。

Row Document 在RDBMS中,该行表示表中的单个隐式结构化数据项。在MongoDB中,数据存储在文档中.
Column Field 在RDBMS中,该列表示一组数据值。在MongoDB中,这些被称为字段。

Joins Embedded documents 在RDBMS中,数据有时分布在不同的表中,为了显示所有数据的完整视图,有时会在表中形成一个连接来获取数据。在MongoDB中,数据通常存储在单个集合中,但使用嵌入式文档进行分隔。所以MongoDB中没有连接的概念。

除术语差异外,其他一些差异如下所示

  1. 关系数据库以增强数据完整性而闻名。这在MongoDB中不是一个明确的要求。
  2. RDBMS要求首先对数据进行规范化,这样可以防止孤立记录和重复的规范化数据,然后需要更多的表,这将导致更多的表联接,从而需要更多的键和索引。

随着数据库的增长,性能可能开始成为一个问题。这在MongoDB中不是一个明确的要求。MongoDB是灵活的,不需要首先对数据进行规范化。

https://mongoing.com/archives/25662


MongoDB Sharding 簡介

Sharding 為 MongoDB 所擁有的一種資料分散處理架構,簡單的說就是將資料分片 (Shard) 儲存到不同的機器中,最常應用在大數據的案例上。在海量資料的儲存情境上,垂直擴充架構是無法滿足的,必須透過水平擴充來實現。

Config Server

Config Server 是 MongoDB Sharding 架構中相當重要的一個角色,它存放了資料的 Metadata,包括透過 Shard Key 計算出來的索引,用來記錄每一個資料存放的 Shard 位置,好讓 Router 可以正確的 Query 資料,如果沒有這些索引,那麼每一個用來存放資料的 mongod 實體,就「純粹」只是獨立存放分散的資料,無法協同工作。Config Server 聽起來很重要對吧!?因此 Config Server 部署時必須要多台機器,在新版 3.2 之後也可以用 Replica Set 架設 Config Server。


https://blog.toright.com/posts/4552/mongodb-sharding-%E5%88%86%E6%95%A3%E5%BC%8F%E5%84%B2%E5%AD%98%E6%9E%B6%E6%A7%8B%E5%BB%BA%E7%BD%AE-%E6%A6%82%E5%BF%B5%E7%AF%87.html



MongoDB 的特性就是 Schemaless


使用關聯式資料庫時,需要透過 Relation(JOIN)找出目標資料。

使用 MongoDB 時,有關聯的資料常常會被儲存在 同一個 Document 中


BSON

上面有提到,Document 的長相是如 JSON 一般的 key-value 組合。
實際 MongoDB 在儲存資料時,使用的是較特殊的 BSON 格式。

使用 BSON 的優點包含:

  • 在 空間儲存 上較有效率
  • 有更多 type (資料格式) 可以使用
    • 如後續會提到的 ObjectIdRegular ExpressionTimestamp 等,都是 BSON 支援的格式
    • BSON 支援的資料格式列表可以參考官方文件
  • 總結

    MongoDB 強大的原因之一在於其 資料儲存的彈性
    由於不需要事先定義 Schema,因此我們可以很輕易的加入修改資料!

  • https://zh-tw.coderbridge.com/series/800ffff9f7524d35ac6ecc51fffda4b9/posts/fccb25a652444dfda38629965eac7c7d

留言

這個網誌中的熱門文章

考績被打差了 輕率離職會更傷

Arrays - DS (Reverse array) [Easy]

WireMock