关系型数据库:SQLite、Oracle、mysql(面向行)
非关系型数据库:MongoDb(面向文档)、redis(键值对)、HBase(面向列)
数据库类型 | 特性 | 优点 | 缺点 |
关系型数据库: SQLite、Oracle、mysql | 1.采用关系模型来 搭建的 2.具有事务的一致性 | 1. 容易理解:关系 模型更贴近逻辑 世界 2. 使用方便:有通用 的SQL语句 3.易于维护 | 1.读写性能差 2.固定的表结构 3.高并发读写需求 |
非关系型数据库(NoSQL): MongoDb、redis、HBase | 1.使用键值对存储数据 2.分布式 3.一般不支持ACID特性 | 1.无需经过sql语句 的解析,读写性能 很高 2.基于键值对,数据 没有耦合性 | 1.不支持通用的sql 语句,学习和使用 成本较高 2.无事务处理 |
Redis属于这种类型。Redis有些特殊,临时性和永久性兼具。Redis首先把数据保存在内存中,在满足特定条件(默认是 15分钟一次以上,5分钟内10个以上,1分钟内10000个以上的键发生变更)的时候将数据写入到硬盘中,这样既确保了内存中数据的处理速度,又可以通过写入硬盘来保证数据的永久性,这种类型的数据库特别适合处理数组类型的数据。总结来说:
。同时在内存和硬盘上保存数据
。可以进行非常快速的保存和读取处理
。保存在硬盘上的数据不会消失(可以恢复)
。适合于处理数组类型的数据
面向文档的数据库
MongoDB、CouchDB属于这种类型,它们属于NoSQL数据库,但与键值存储相异。
(1)不定义表结构
即使不定义表结构,也可以像定义了表结构一样使用,还省去了变更表结构的麻烦。
(2)可以使用复杂的查询条件
跟键值存储不同的是,面向文档的数据库可以通过复杂的查询条件来获取数据,虽然不具备事务处理和Join这些关系型数据库所具有的处理能力,但初次以外的其他处理基本上都能实现
MySQL:
视图:1. 一个复杂的sql语句可以使用视图替换,代理
2. 数据库表结构更换了,我们可以不用更换python代码
事务:保持数据修改的完整性
原子性:意思就是事务中一系列的sql语句操作要保持完整性,不能只执行一半
一致性:就是在没有提交事务前,对数据的所有操作,真实的数据库都不会发生变化,只有提交了事务才会数据更改
隔离性:就是在没有完成本次事务前,不允许其他用户对数据的操作
持久性:就是在提交了事务后,就永久的写到数据库中了
索引:当数据非常庞大时,并且这些数据不是经常修改,为了加快查询速度,我们会使用索引
原理:对我们的字段进行分组,如果大并发的情况下,修改数据会变慢
优点:数据量大的时候查询速度会快很多
缺点:如果建立索引的表经常修改,会影响性能,占用一定的磁盘空间