您现在的位置是:首页 >技术杂谈 >【博学谷学习记录】超强总结,用心分享 | 架构师 MongoDB学习总结网站首页技术杂谈

【博学谷学习记录】超强总结,用心分享 | 架构师 MongoDB学习总结

人间相对论 2024-06-07 00:00:03
简介【博学谷学习记录】超强总结,用心分享 | 架构师 MongoDB学习总结

MongoDB基本使用

Nosql简介

NoSQL(NoSQL = Not Only SQL ),意即”不仅仅是SQL”。

	在现代的计算系统上每天网络上都会产生庞大的数据量, 这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理, 1970年 E.F.Codd’s提出的关系模型的论文 “A relational model of data for large shared data banks”,这使得数据建模和应用程序编程更加简单。

	通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。

	NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨,NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

什么是NoSQL

NoSQL,指的是非关系型的数据库,NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。

	NoSQL用于超大规模数据的存储,(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据),这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

为什么使用NoSQL

今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。

	用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加,我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL 数据库的发展却能很好的处理这些大的数据。

RDBMS vs NoSQL

RDBMS

  • 高度组织化结构化数据
  • 结构化查询语言(SQL)
  • 数据和关系都存储在单独的表中。
  • 数据操纵语言,数据定义语言
  • 严格的一致性
  • 基础事务

NoSQL

  • 代表着不仅仅是SQL
  • 没有声明性查询语言
  • 没有预定义的模式
  • 键 - 值对存储,列存储,文档存储,图形数据库
  • 最终一致性,而非ACID(原子性、一致性、隔离性、持久性)属性
  • 非结构化和不可预知的数据

NoSQL的优缺点

  • 优点
  • 高可扩展性
  • 分布式计算
  • 低成本
  • 架构的灵活性,半结构化数据
  • 没有复杂的关系

缺点

  • 没有标准化
  • 有限的查询功能(到目前为止)
  • 最终一致是不直观的程序

MongoDB基础

什么是MongoDB

MongoDB 是由C++语言编写的,是一个基于分布式文档存储的开源数据库系统。

  • 在高负载的情况下,添加更多的节点,可以保证服务器性能。
  • MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

存储结构

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成,MongoDB 文档类似于 JSON
对象,字段值可以包含其他文档,数组及文档数组。

在这里插入图片描述

主要特点

  • 非关系型数据库,基于 Document data model(文档数据模型)
  • MongoDB以 BSON (BinaryJSON) 格式存储数据,类似于 JSON 数据形式
  • 关系型数据库使用 table (tables of rows)形式存储数据,而MongoDB使用 collections (collections of documents)
  • 支持 临时查询(ad hoc queries): 系统不用提前定义可以接收的查询类型
  • 索引通过 B-tree 数据结构, 3.2版本的WiredTiger 支持 log-structured merge-trees(LSM)
  • 支持索引和次级索引(secondary indexes): 次级索引是指文档或row有一个 主键(primary key)作为索引,同时允许文档或row内部还拥有一个索引,提升查询的效率,这也是MongoDB比较大的一个特点

基本概念

和传统数据库对比

不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档、集合、数据库,下面我们分别介绍,下表将帮助您更容易理解Mongo中的一些概念:

对比项mongo数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joinsDBRef,$.lookup表连接
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

集合

相当于关系数据库的表,不过没有数据结构的定义。它由多个document组成。

命令规范

因为是无结构定义的,所以你可以把任何document存入一个collection里。每个collection用一个名字标识,需要注意以下几点:

  • 名字不允许是空字符串""
  • 名字不能包含字符,因为它表示名字的结束
  • 不能创建以system.开头的

文档

mongoDB的基本单位,相当于关系数据库中的行,它是一组有序的key/value键值对,使用json格式,

如:{“foo” : 3, “greeting”: “Hello, world!”}。

key的命令规范

key是个UTF-8字符串,以下几点是需要注意的地方:

  • 不能包含字符(null字符),它用于标识key的结束
  • .和 字符在 m a n g o d b 中有特殊含义,如 字符在mangodb中有特殊含义,如 字符在mangodb中有特殊含义,如被用于修饰符($inc表示更新修饰符),应该考虑保留,以免被驱动解析
  • 以_开始的key也应该保留,比如_id是mangodb中的关键字
注意事项
  • 在mangodb中key是不能重复的
  • value 是弱类型,甚至可以嵌入一个document
  • key/value键值对在mangodb中是有序的 {key: {key1:“1”, key2:“2”}}
  • mangodb是类型和大小写敏感的,如{“foo” : 3}和{“foo” : “3”}是两个不同的document,{“foo” : 3}和{“Foo” : 3}
  • 每个文档最大支持16M
  • 文档字段是有序的

MongoDB的数据类型

BSON

BSON(Binary Serialized Document Format)是一种类JSON的二进制形式的存储格式,简称Binary
JSON

	它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型,它支持下面数据类型。每个数据类型对应一个数字,在MongoDB中可以使用$type操作符查看相应的文档的BSON类型。

支持的数据类型

数据类型描述
String这是最常用的数据类型来存储数据。在MongoDB中的字符串必须是有效的UTF-8。
Integer这种类型是用来存储一个数值,整数可以是32位或64位,这取决于您的服务器。
Boolean此类型用于存储一个布尔值 (true/ false) 。
Double这种类型是用来存储浮点值。
Min/ Max keys这种类型被用来对BSON元素的最低和最高值比较。
Arrays使用此类型的数组或列表或多个值存储到一个键。
Timestamp时间戳。这可以方便记录时的文件已被修改或添加。
Object此数据类型用于嵌入式的文件。
Null这种类型是用来存储一个Null值。
Symbol此数据类型用于字符串相同,但它通常是保留给特定符号类型的语言使用。
Date此数据类型用于存储当前日期或时间的UNIX时间格式。可以指定自己的日期和时间,日期和年,月,日到创建对象。
Object ID此数据类型用于存储文档的ID。
Binary data此数据类型用于存储二进制数据。
Code此数据类型用于存储到文档中的JavaScript代码。
Regular expression此数据类型用于存储正则表达式
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。