什么是文档型数据库

文档数据库(也称为面向文档的数据库或文档存储)是在文档中存储信息的数据库,是非关系型数据库的一种。

 {
     "_id": 2,
     "first_name": "Donna",
     "email": "donna@example.com",
     "spouse": "Joe",
     "likes": [
        "spas",
        "shopping",
        "live tweeting"
     ]
  }
什么是文档(documents)

一个文档就是文档型数据库中的一条记录。文档通常存储关于一个对象及其任何相关元数据的信息。

文档是以字段-值成对的形式存储数据。值的类型和结构可以有多种,包括字符串、数字、日期、数组等。文档存储的格式可以是JSON,BSON(二进制形式的JSON)和XML。

什么是集合(Collections)

集合就是一组文档。集合里的文档通常都有相似的结构。

一个集合里的所有文档不需要有一致的字段。有些文档型的数据库会提供格式校验功能,因此如果需要的话,一个集合的字段也可以固定下来。

文档型数据库的一些关键特性
  • 文档模型:数据被存储在文档中(而不是像其他数据库那样,以结构化的形式,比如表格、图形的方式存储)。
  • 结构灵活:文档型数据库不要求太严格的数据格式,一个集合中文档和文档之间的字段可以不一致。
  • 分布和弹性:扩展性强。
  • 查询语言:有自己的查询语言和API。
和关系型数据库的区别
  • 数据模式的直观性:文档型数据库中的存储单位“文档”直接对应应用层代码中的“对象”,开发者使用起来更加方便,不需要跨表或者表连接等操作。
  • 使用JSON带来的好处:JSON已经成为数据交换和存储的标准。JSON文档是轻量级的、独立于语言的、人类可读的。开发人员可以按照应用程序需要的方式构造数据——丰富的对象、键值对、表、地理空间和时间序列数据,或者图形的节点和边。
  • 模式的灵活性:因为结构比较灵活,开发者在创建文档时,不用像使用关系型数据库那样,首先去定义它的结构;开发者可以在任意时间根据需要去修改数据的结构。
文档数据库和其他数据库之间的关系是什么?

文档数据库可以兼容其他类型的数据库,包括键值对、关系型、图表型等,意味着使用其他数据库存储的数据都可以使用文档数据库代替。

  • 键值对可以用文档中的字段和值建模。文档中的任何字段都可以被索引,这为开发人员查询数据提供了额外的灵活性。
  • 关系型数据在文档数据库中可以存储在一个文档中,也可以像原来那样分开存储在不同的文档中,它们可以手动指定联系(比如互相存储对方的id)也可以使用文档数据提供的关联功能。
为什么不直接在关系型数据库中使用JSON结构

一些关系型数据库已经增加了对JSON的支持,那为什么不直接定义一个列,类型为JSON呢?简单来说,这种做法会降低开发人员的效率,增加开发成本。它有以下几个缺点:

  • 关系型数据库提供的JSON操作方式比较复杂
  • 在关系型数据库中JSON数据不区分数据类型,像是字符串和数字,这会使数据的计算、比较和排序变得复杂和容易出错,而原生文档数据库(如MongoDB)支持的丰富数据类型。
  • 数据质量无法控制:关系型数据库中JSON无法校验,而且开发人员依旧无法避免定义表结构这样的操作。
  • 性能差:关系型数据无法对JSON列的查询进行优化,也不能像文档数据库那样对其中的某些字段添加索引。
文档数据库的缺点

一个众所周知的缺点是不支持多文档事务。

所谓多文档事务,指的是在一个事务中,需要同时操作多个文档(包括一个集合的多个文档,或者跨集合之间)。

不过有些文档数据库比如 MongoDB已经可以支持多文档事务了。

主流的文档数据库
参考
- [1] https://www.mongodb.com/document-databases
- [2] https://db-engines.com/en/article/Document+Stores
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐