diff --git a/_posts/2013-11-01-database.md b/_posts/2013-11-01-database.md index 83cb6daedc..ee7bba9ff3 100644 --- a/_posts/2013-11-01-database.md +++ b/_posts/2013-11-01-database.md @@ -3,7 +3,7 @@ layout: post title: "数据库及SQL-database&sql-note" date: 2013-11-01 23:02:00 categories: 数据挖掘 -tags: 数据库 SQL python pymysql sqlite redis go serverless 云数据库 +tags: 数据库 SQL python pymysql sqlite redis go serverless 云数据库 mongodb excerpt: 数据挖掘知识点、经验总结 author: 鹤啸九天 mathjax: true @@ -70,6 +70,25 @@ permalink: /data 注:关系型数据库其实不擅长处理关系型数据 +## ACID + +关系型数据库遵循ACID规则 + +**事务**在英文中是transaction,和现实世界中的交易很类似,有如下四个特性: + +- 1、`A` (Atomicity) **原子性** + - 原子性很容易理解,事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。 + - 比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。 +- 2、`C` (Consistency) **一致性** + - 一致性也比较容易理解,数据库要一直处于一致状态,事务的运行不会改变数据库原本的一致性约束。 + - 例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。 +- 3、`I` (Isolation) **独立性** + - 独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。 + - 比如现在有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。 +- 4、`D` (Durability) **持久性** + - 持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。 + + ## SQL ### 什么是 SQL @@ -776,17 +795,17 @@ NoSQL = Not Only SQL(不仅仅是SQL) - Not Only Structured Query Language 分析: -- 关系型数据库:列+行,同一个表下数据的结构是一样的。 -- 非关系型数据库:数据存储没有固定的格式,并且可以进行横向扩展。 +- 关系型数据库:列+行,同一个表下数据的结构一样。 +- 非关系型数据库:数据存储没有固定格式,并且可以进行**横向**扩展。 -NoSQL泛指**非关系型**数据库,随着web2.0互联网的诞生,传统的关系型数据库很难对付web2.0时代!尤其是超大规模的高并发的社区,暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅速,Redis是发展最快的。 +NoSQL 泛指**非关系型**数据库,随着web2.0互联网的诞生,传统的关系型数据库很难对付web2.0时代!尤其是超大规模的高并发的社区,暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅速,Redis是发展最快的。 -Nosql特点 +Nosql 特点 - 方便扩展(数据之间没有关系,很好扩展!) - 大数据量高性能(Redis一秒可以写8万次,读11万次,NoSQL的缓存记录级,是一种细粒度的缓存,性能会比较高!) - 数据类型是多样型的!(不需要事先设计数据库,随取随用) -传统的 RDBMS 和 NoSQL +### 传统 RDBMS 和 NoSQL 传统的 RDBMS(关系型数据库) - 结构化组织 @@ -817,15 +836,15 @@ Nosql [狂神说 Redis笔记](https://blog.csdn.net/DDDDeng_/article/details/108118544) -## NoSQL分类 +## NoSQL 分类 -Nosql的四大分类 +Nosql 四大分类 |分类 | Examples举例 | 典型应用场景 | 数据模型 | 优点| |---|---|-----|---|---| -|键值对(key-value) | Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB | 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。 | Key 指向 Value 的键值对,通常用hash table来实现 | 查找速度快| -|列存储数据库 | Cassandra, HBase, Riak | 分布式的文件系统 | 以列簇式存储,将同一列数据存在一起 | 查找速度快,可扩展性强,更容易进行分布式扩展| -|文档型数据库 | CouchDB, MongoDb | Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容) | Key-Value对应的键值对,Value为结构化数据 | 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构| +|**键值对**(key-value) | Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB | 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。 | Key 指向 Value 的键值对,通常用hash table来实现 | 查找速度快| +|**列存储**数据库 | Cassandra, HBase, Riak | 分布式的文件系统 | 以列簇式存储,将同一列数据存在一起 | 查找速度快,可扩展性强,更容易进行分布式扩展| +|**文档型**数据库 | CouchDB, MongoDb | Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容) | Key-Value对应的键值对,Value为结构化数据 | 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构| |图形(Graph)数据库 | Neo4J, InfoGrid, Infinite Graph | 社交网络,推荐系统等。专注于构建关系图谱 | 图结构 | 利用图结构相关算法。比如最短路径寻址,N度关系查找等| [狂神说 Redis笔记](https://blog.csdn.net/DDDDeng_/article/details/108118544) @@ -1488,6 +1507,23 @@ r.sunion("set_name","set_name1","set_name2") ``` + +## MongoDB + +MongoDB 是一个**文档型**数据库,以类似 JSON 的文档形式存储数据。 + +MongoDB 设计理念:大数据量、高性能和灵活性需求。 + +MongoDB 使用集合(Collections)来组织文档(Documents),每个文档都是由键值对组成的。 +- `数据库`(Database):存储数据的容器,类似于关系型数据库中的数据库。 +- `集合`(Collection):数据库中的一个集合,类似于关系型数据库中的表。 +- `文档`(Document):集合中的一个数据记录,类似于关系型数据库中的行(row),以 BSON 格式存储。 + +MongoDB 将数据存储为一个文档,数据结构由**键值**(key=>value)对组成,文档类似于 JSON 对象,字段值可以包含其他文档,数组及文档数组: + + + + ## 云数据库 【2022-4-7】[数据库技术新版图 - Serverless 数据库](https://www.toutiao.com/article/7083676554441523727)