数据库基础(Mysql+MongoDB)
MySQL
概念
-
MySQL是著名的关系型数据库,顾名思义,是建立在关系模型基础上的数据库。关系模型说明数据库中存储的数据之间的联系(一对一、一对多、多对一、多对多)。 关系型数据的数据都放在表里,表的每一行代表一条数据。 关系型数据通过sql来操作数据库中的数据。
事务
何为事务
一组逻辑操作,要么都执行,要么都不执行
经典eg,银行转账问题: 小明给小红转账100元的实际操作 小明账户减1000元 小红账号加1000元
ACID特性
-
原子性 一致性 隔离性 持久性
事务的隔离级别
-
读未提交: 读已提交: 可重复读:(Innodb默认隔离级别)能够避免脏读和不可重复读,但幻读仍有可能发生 序列化:
并发事务所带来的问题
-
脏读:读取到还未提交的数据 丢失修改:两个事务同时修改一个数据,第一个事务修改的结果就丢失了 不可重复读:一个事务多次读取同一条事务的过程中,如果其他事物对这条数据进行了修改,则第一个事务多次读取到的值可能不同 幻读:条件查询时,一个事务前后两次查询到的数据条目数量不相同 不可重复读和幻读的区别:不可重复读针对的是某一列的值,幻读针对的是记录的数量
索引
什么是索引
用于快速查询和检索结构的数据结构(类似新华字典的目录)
索引优缺点
优点:
-
加快查询速度 通过创建唯一性索引保障数据库中每行数据的唯一性 缺点: 创建和维护索引需要耗费时间 索引使用物理文件存储,占用空间
索引底层数据结构
- Hash表 哈希表就是键值对集合,通过hash操作(散列算法)快速找到key对应的index 会有哈希冲突,一般通过拉链法, 同时,哈希表不支持顺序和范围查找
- B树 多路平衡查找树 非叶子节点也存放数据,因此把热点数据放在靠近根节点的位置,可以提高热点数据的索引效率
- B+树 非叶子节点仅存放键,而不存放数据,所以一次io操作可以容纳更多的关键字,从而降低io操作次数 innodb中叶子结点存放所有数据(聚簇索引)
区别:
-
B树只适用于随机索引,B+树使用随机和顺序检索
索引类型
- 主键索引:一般为自增的唯一字段,Innodb为聚簇索引
- 二级索引:叶子结点存放主键,来定位主键的位置,非聚簇索引 2.1
MongoDB
NoSQL数据库是什么
not only sql 即非关系型数据库,通过键值对的方式存储数据
MongoDB的好处?
-
存储方式基于虚拟内存+持久化,热数据放在内存中,读写性能更高 扩展性更高 BSON存储格式更适用于文件存储 内置GridFS适用于文件存储(对大文件拆分)
上一篇:
通过多线程提高代码的执行效率例子