一、各类数据库及其类型关系
DBMS:
数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。
RDBMS:
关系数据库管理系统(Relational Database Management System)。
所谓的关系型数据库,是建立在关系模型基础上的数据库。
关系型数据库遵循ACID规则
NoSQL:
泛指非关系型的数据库,是对不同于传统的关系型数据库的数据库管理系统的统称。
是对关系型数据库的一种补充。NoSql与关系型数据库并不是对立关系,二者各有优劣,取长补短,在合适的场景下选择合适的存储引擎才是正确的做法。
SQL:
结构化查询语言(Structured Query Language)。
是用于访问和处理数据库的标准的计算机语言。
是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
使用 SQL 访问和处理数据系统中的数据,这类数据库包括:MySQL、SQL Server、Access、Oracle、Sybase、DB2 等等。
MySQL:
是最流行的关系型数据库管理系统。
是最好的 RDBMS应用软件之一(在 WEB 应用方面)。
ACID规则:
原子性(Atomicity)
一个事务的所有系列操作步骤被看成一个动作,所有的步骤要么全部完成,要么一个也不会完成。如果在事务过程中发生错误,则会回滚到事务开始前的状态,将要被改变的数据库记录不会被改变。
一致性(Consistency)
一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏,即数据库事务不能破坏关系数据的完整性及业务逻辑上的一致性。
隔离性(Isolation)
主要用于实现并发控制,隔离能够确保并发执行的事务按顺序一个接一个地执行。通过隔离,一个未完成事务不会影响另外一个未完成事务。
持久性(Durability)
一旦一个事务被提交,它应该持久保存,不会因为与其他操作冲突而取消这个事务。
文件系统:
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。
DFS:
分布式文件系统(Distributed File System)
是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点(可简单的理解为一台计算机)相连;或是若干不同的逻辑磁盘分区或卷标组合在一起而形成的完整的有层次的文件系统。
MongoDB:
是一个使用C++编写的,基于分布式文件存储的数据库。
是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
是一种文档型数据库,适合存储海量数据并提高性能存取。
旨在为WEB应用提供可扩展的高性能数据存储解决方案。
GridFS:
是基于MongoDB的分布式文件存储系统。
是Mongo的一个子模块, 使用GridFS可以基于MongoDB来持久存储文件并且支持分布式应用(文件分布存储和读取)。
是一种将大型文件存储在MongoDB的文件规范。
GridFs规范提供了一种透明的机制,可以将一个大文件分割成多个较小的文档。
SQL 与 MongoDB 的类比:
Mongodb 与 GridFS
- GridFS是基于mongodb存储引擎是实现的“分布式文件系统”。
- GridFS适合存储超过16MB的大型文件。
- GridFS将文件分成多个parts或者说chunks,然后将每个chunk作为作为一个单独的document存储。
- 当用户查询GridFS中的文件时,客户端或者driver将会重新按序组装这些chunks。
使用场景、GridFS 内部存储结构简析等详细说明见链接
MONGODB GridFS 存储文件 与 文件系统存储
数据库中大部分都不建议存储较大的文件到数据库中,为何 MongoDB 使用 GridFS 而不使用文件系统存储?
- 存储数据的个数限制
- 文件的同步传输问题
- 数据安全方面的需求
详细说明及如何操作 gridfs 见链接
二、MongoDB
概念解析
术语类比
数据类型
数据库、集合、文档的 CRUD 操作
条件操作符
操作数据库
含义 | 操作 | 说明 |
---|---|---|
创建 / 切换数据库 | use DATABASE_NAME | |
查看数据库 | db | |
查看所有数据库 | show dbs | |
删除数据库 | db.dropDatabase() | 先切换到要删除的数据库 |
. | ||
创建集合 | db.createCollection(name, options) | |
删除集合 | db.COLLECTION_NAME.drop() | |
. | ||
插入文档 | db.COLLECTION_NAME.insert(document) | 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据 |
插入 / 更新文档 | db.COLLECTION_NAME.save(document) | 如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 来代替。 |
插入一条文档 | db.collection.insertOne() | |
插入多条文档 | db.collection.insertMany() | |
更新文档 | db.collection.update() | |
删除文档 | db.collection.remove() | |
删除该文档所有数据 | db.collection.remove({}) | |
查询文档 | db.collection.find(query, projection) | db.col.find().pretty() 易读的方式 |
. | ||
指定数量 | db.COLLECTION_NAME.find().limit(NUMBER) | |
跳过指定数量 | db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER) | |
排序 | db.COLLECTION_NAME.find().sort({KEY:1}) | 1 为升序排列,而 -1 是用于降序排列 |
索引 | db.collection.createIndex(keys, options) | Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可 |
聚合 | db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION) |
聚合的表达式
管道
- $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
- $match:用于过滤数据,只输出符合条件的文档。match使用MongoDB的标准查询操作。
- $limit:用来限制MongoDB聚合管道返回的文档数。
- $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
- $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
- $group:将集合中的文档分组,可用于统计结果。
- $sort:将输入文档排序后输出。
- $geoNear:输出接近某一地理位置的有序文档。
更多内容参考:
- 菜鸟教程
- 有很多 MongoDB 与 MySQL 语句的对比
- 有很多的 MongoDB 语句的例句
- Sql Or NoSql,从结构、架构演进、优缺点、代表等角度类比分析
更多推荐
数据库——MongoDB
发布评论