For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
MySQL数据库的开发应用在许多软件编程开发项目中都是会经常用到的一个数据库类型,而本文我们就通过案例分析来简单了解一下,MySQL数据库入门概念分享。
一、MySQL逻辑架构
一层的服务不是MySQL独有的,大多数是基于网络的客户端/服务端的工具,如连接处理、授权认证、安全等等。
二层就是MySQL的核心功能,包括查询解析、分析、优化、缓存以及所有的内置函数,所有的跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。
三层包含了存储引擎,主要负责MySQL中数据的存储和提取。
1.连接管理与安全
每个客户端连接都会服务器进程中拥有一个线程,这个连接的查询只会在这个单独的线程中执行,该线程只能轮流在某个CPU核心或者CPU中运行,服务器会缓存线程,所以不需要对每个连接新建或者销毁一个线程(可以复用缓存中的线程)。
当客户端连接到MySQL时服务器需要对其进行认证,如果认证成功,服务器会继续验证该客户是否有执行某个待定查询的权限。
2.优化与执行
MySQL会解析查询,并且创建内部数据结构(解析树),然后对其进行各种优化,包括重写查询SQL、决定表的读取顺序,以及选择合适的索引等。
对于一个SELECT查询语句来说:在解析查询之前,服务器会先检查查询缓存,如果能够在其中找到对应的查询,服务器会直接返回结果,不需要再执行查询解析、优化和执行整个过程。
二、并发控制
1.读写锁
比如有一张表,多个线程对这张表进行操作,加入刚好有一个线程在对一条数据更改,另一个线程也对其进行读取操作,那么进行读操作的这个线程可能读到的数据是不正确的,怎么解决这个问题呢?这时就用到了并发控制,主要是通过两种锁来控制的:读锁(共享锁)、写锁(排他锁)
读锁是共享的,或者说是相互不阻塞的,即对个线程读取同一个资源,互不干扰;写锁是排他的,也就是说只要有一个线程对其进行写操作,那么其他的读和写线程将都会被阻塞。只有这样才能保证才能保证在给定的时间内只有一个线程在写操作,并防止其他线程读取正在写入的数据。
2.锁粒度
理想的情况是:需要写入哪个对象就锁定哪个对象。尽量只锁定需要修改的部分数据,而不是所有的数据。在任何时候,在给定的资源上,锁定的数据越少,系统的并发程度越高。
但是还有一个问题,加锁也会消耗资源,锁的各种操作:获得锁、检查锁是否已经解除、释放锁等,都会增加系统的开销,如果花费大量的时间来管理锁,而不是存取数据,那么系统的性能将会受到影响。
所谓的锁策略,就是在锁的开销和数据的完全性之间寻求平衡。
表锁是MySQL中基本的锁策略,并且是开销小的策略(意味着并发程度低),但是表锁的缺点是在执行插入、删除、更改的操作时会使其他的用户线程阻塞。(注意:读锁之间是互不影响的)。另外写锁比读锁的优先级更高。写锁可以插到读锁中,但是读锁却不能插到写锁中。
行级锁:可以大程度的支持并发处理(但是同时也带来了更大的锁开销)的就是InnoDB存储引擎,行级锁只在存储引擎层实现。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。