NOSQL数据库技术复习-文档数据库技术

133 阅读4分钟

简介

最像关系型数据库的nosql数据库。

高读写性能,高可用副本集,可拓展分片集群技术-->高可拓展性,高可伸缩性-->大数据

文档是处理信息的基本单位。

数据采用JSON/BSON格式存储,方便存储树形结构数据,支持多种索引结构。

概述

MongoDB

  • 高性能

    内存计算

  • 高可用

    本地复制、自动故障转移

  • 可拓展

    单服务器->多中心数据架构

文档型数据库的特点和优势

  • 高性能(多种存储引擎)
  • 高可用副本集
  • 可拓展分片集群技术:支持大数据分布式存储
  • 支持事务:文档级事务管理
  • 灵活文档模型

文档数据库存储架构(难点)

JSON/BSON

JSON

轻量级数据交换格式,简单易于读写。数据内容是可嵌套的kv文本形式。

{
"bookname":"数据库系统",
"publisher":true,
"price":42.0
}

值的类型:

基本类型:字符串,数值,布尔,空值null

复杂类型:数组,Object

Object使用{}包含一系列无序的kv键值对,kv用冒号分隔。

可以使用obj.key访问对应value。

BSON

二进制JSON,主要被用作MongoDB中数据存储和网络传输格式。

优点

  • 数据访问性能
  • 数据类型更丰富
  • 有时占用更多的空间

MongoDB数据存储

数据库-->集合-->文档,相当于数据库-->表-->行。

!需要先将集合添加到数据库中,再将文档添加到集合中。

文档结构可嵌套,可表示为树形层次结构

  1. 数据库(database)

用名称作为唯一标识:小写字母,长度不大于64位

四个默认数据库:

  • admin 系统管理员级操作的数据库,存储用户、角色,执行特定服务器端命令
  • local 副本集元数据,数据库不会被复制,所存储的任何集合只能在各自的服务器实例上
  • config 分布式分片配置相关信息
  • test 默认连接
  1. 集合(collection) 相当于没有固定格式(模式自由,结构可变)的表,是多个文档的组合。

模式自由:不受类似关系型数据库中关系范式思想的束缚。

结构可变:同一集合中可以有多种结构的文档。

使用名称唯一标识,可以是任意utf-8字符,不能以system.(系统预留)和$(保留字符)作为自定义集合名称前缀。

  1. 文档(document)

相当于RDB中的一行。每个文档是结构类似于JSON的BSON对象。

每一个文档有一个特殊的key,即_id作为文档中唯一标识(主键),会默认添加,其值唯一不可变。文档中各个key关联着value。其他字段命名不可以以$开头,不可包含点号,不可以是null字符串。

一个文档包含很多域Field,域对应RDB中列/字段。文档中值的类型除了数值、字符串等基本类型,也可以是文档,从而形成树形嵌套结构的复杂文档。

通过文档数组类型,可以实现一对多数据关系的存储。

表示文档之间关系:

  • 嵌套Embed

  • 引用链接Link

MongoDB文档唯一性机制

集合在主键设计上没有采用自动增长主键,因为分布式服务器之间做数据同步很麻烦。

mongoDB采用了ObjectId的方式,生成方便,占用空间比long类型数据多了4个字节(12字节,各个字节数据用16进制表示)来存储文档唯一标识。

每个文档标识包含标识产生时间、机器标识、进程、自增序列,组合起来保证唯一性。

ObjectId("timestamp machine_id process_id counter") //就是_id

文档数据库管理基础(重点)

数据库操作

数据库往往与应用相对应,不同应用数据存储在不同数据库中,一个MongoDB服务器可以建立多个数据库。

MongoDB没有创建数据库的命令。

如果想创建一个叫myTest的数据库,先运行use myTest,再做一些操作,如db.createCollection('user')向数据库中添加一个集合,这样就可以创建一个myTest数据库了。

如果仅仅执行use操作,虽然使用db命令可以看到当前数据库,但是并未真正建立,通过show dbs命令看不到它。

集合操作

集合创建很灵活,不一定必须先创建集合再插入数据,可以直接插入数据,如果集合不存在会自动先创建集合,再插入文档数据。

文档操作

最大的BSON格式文档为16MB,设置文档大小限制是为了保证单文档不会过多占用内存,或者在传输过程中不会占用较大的带宽。