Vue3源码解析,打造自己的Vue3框架朝辞白帝彩云间

鲍忠
• 阅读 341

Vue3源码解析,打造自己的Vue3框架朝辞白帝彩云间

Vue3源码解析,打造自己的Vue3框架朝辞白帝彩云间

整理相关的数据库知识点,帮你获得心仪的优惠。 1.数据库事务 1.1什么是数据库事务? 事务是指一组逻辑上相关的操作,这些操作要么全部完成,要么都没有完成。 它是事务管理系统执行过程中的逻辑工作单元,是用户自定义的操作序列。这些操作要么全部执行,要么都不执行,是一个不可分割的工作单元。 1.2.交易的特征 交易的ACID属性:

原子性:事务是不可分割的工作单元。一个事务中包含的所有操作,不是完成就是未完成,不会在中间环节结束。 一致性:事务必须将数据库从一种一致性状态更改为另一种一致性状态。 隔离:一个事务的执行不能被其他事务干扰。当并发执行多个事务时,这些事务应该相互隔离。 持久性:一旦事务被提交,它的更改将永久存储在数据库中,即使数据库失败也不会丢失。

1.3.事务的隔离级别 事务的隔离级别指的是在事务期间数据修改被其他公司看到的程度。从最低到最高的事务隔离级别是:

未提交读取:一个事务可以读取由另一个事务修改但尚未提交的数据。 Read Committed:一个事务只能读取另一个事务已经提交的数据。 可重复读取(Repeatable Read ):同一数据在事务执行过程中被多次读取,结果总是一致的。在可重复读取隔离级别下,不允许幻像读取,但允许不可重复读取。 Serializable:所有事务逐个执行,事务不能并发执行。

隔离级别越高,事务之间的并发越少,但并发性能越差。 1.4.事务的并发性 事务的并发问题主要如下:

脏读:一个事务读取另一个事务的未提交数据。 不可重复读取:一个事务多次读取相同的数据,结果不一致。 幻像读取:一个事务多次读取同一范围的数据,结果不一致。 丢失更新:一个事务读取另一个事务提交的数据。

不可重复读数和幻象读数的区别:

不可重复读取是指同一数据在一个事务中被多次读取,结果不一致; 幻读是指在一个事务中多次读取同一范围的数据,结果不一致。

1.5.交易的并行处理 交易的并发处理主要包括以下内容:

序列化:所有事务都是逐个执行的,事务不能并发执行。 乐观锁定:当提交一个事务时,检查数据是否被其他事务修改过,如果是,放弃提交,否则提交该事务。 悲观锁:当一个事务被执行时,数据被锁定,在该事务结束之前,其他事务不能修改数据。 两阶段锁定协议:在事务执行之前,数据被锁定,直到事务完成。 多版本并发控制(MVCC):读取数据时,读取数据的当前版本,而不是最新版本。 时间戳:事务提交时,检查数据是否被其他事务修改过,如果是,放弃提交,否则提交事务。 快照隔离:在事务执行之前,数据被锁定,直到事务结束。

2.数据库索引 2.1.指数的作用 索引的功能如下:

加快数据检索; 索引可以帮助我们避免排序和分组操作; 随机I/O可以通过索引变成顺序I/O; 索引可以帮助我们避免表之间的连接操作。

2.2.指数分类 主要有以下几类索引:

单值索引:索引列只包含一个值。 多值索引:索引列包含多个值。 唯一索引:索引列的值必须是唯一的,但允许空值。 主键索引:一个表只能有一个主键索引。主键索引的值必须是唯一的,不允许有空值。 复合索引:索引列是多个列的组合。 覆盖:索引包含所有需要查询的列。 全文索引:索引列是全文索引列。 哈希:索引列是哈希索引列。 空间:索引列是一种空间数据类型。 其他索引:索引列是其他数据类型。

2.3.索引的优点和缺点 索引的优点和缺点如下:

优势:

索引可以大大加快数据检索速度; 索引可以帮助我们避免排序和分组操作; 索引可以把随机I/O变成顺序I/O; 索引可以帮助我们避免表之间的连接操作。

缺点:

索引会占用物理空间,建立过多的索引会浪费物理空间; 索引会减慢写入数据的速度,因为数据库服务器在写入数据时也需要维护索引数据; 索引会减慢更新数据的速度,因为数据库服务器在更新数据时也需要维护索引数据; 如果频繁添加或删除表中的数据,索引将无效,从而降低查询速度。

2.4.索引的使用 索引的使用主要如下:

使用Overwrite Index: Index可以帮助我们避免排序和分组操作。 使用复合索引:索引列是多个列的组合。 使用索引下推:索引可以帮助我们避免表之间的连接操作。

3.数据库的类型 3.1.数据库的分类 数据库的分类主要包括以下内容:

关系数据库:关系数据库是指使用关系模型组织数据的数据库。关系模型是基于二维表的数据模型。二维表中的每一行代表一条记录,每一列代表一个属性。二维表之间的关系可以用行之间的关系来表示。 非关系数据库:非关系数据库是指不使用关系模型组织数据的数据库。非关系数据库的数据模型可以是键值对、文档、图形、列存储等。 文档数据库:文档数据库是指使用文档模型组织数据的数据库。文档模型是基于文档的数据模型,文档是一个自包含的数据结构。文档中的数据可以是键值对、文本、二进制数据等。

3.2.关系数据库的分类 主要有以下类型的关系数据库:

MySQL:MySQL是一个关系数据库,它是一个关系数据库管理系统。它是由瑞典的MySQL AB公司开发的,现在属于甲骨文公司。 Oracle:Oracle是一个关系数据库。它是一个关系数据库管理系统,由美国Oracle公司开发。 SQL Server:SQL Server是一个关系数据库。它是一个关系数据库管理系统,由美国微软公司开发。 PostgreSQL:PostgreSQL是一个关系数据库。它是一个关系数据库管理系统,由美国PostgreSQL全球开发集团开发。 DB2:DB2是一个关系数据库。它是一个关系数据库管理系统,由美国IBM公司开发。 SQLite:SQLite是一个关系数据库。它是由加拿大加州大学开发的一个关系数据库管理系统。 Maria DB: Maria DB是关系数据库,是由瑞典Maria DB基金会公司开发的关系数据库管理系统。 MemSQL:MemSQL是一个关系数据库。它是一个关系数据库管理系统,由美国MemSQL公司开发。 H2: H2是一个关系数据库,是一个关系数据库管理系统,由德国H2数据库引擎公司开发。 HSQLDB:HSQLDB是一个关系数据库。它是一个关系数据库管理系统,由美国HSQLDB公司开发。 Derby:Derby是一个关系数据库。它是一个关系数据库管理系统,由美国Apache Derby公司开发。 火鸟:火鸟是一个关系数据库。它是一个关系数据库管理系统,由美国火鸟基金会公司开发。 Sybase:Sybase是一个关系数据库,它是一个关系数据库管理系统,由美国Sybase公司开发。 Informix:Informix是一个关系数据库。它是一个关系数据库管理系统,由美国Informix公司开发。 Access:Access是一个关系数据库。它是一个关系数据库管理系统,由美国微软公司开发。 Teradata:Teradata是关系数据库,是美国Teradata公司开发的关系数据库管理系统。 Vertica:Vertica是一个关系数据库。这是一个关系数据库管理系统,由美国的Vertica Systems公司开发。 Netezza:Netezza是关系数据库,是美国Netezza公司开发的关系数据库管理系统。 Greenplum:Greenplum是关系数据库,是美国Greenplum公司开发的关系数据库管理系统。

这些关系数据库可能缺失,个人统计也不是很全面,可能会有错误。欢迎大家补充。

3.3.非关系数据库的分类 主要有以下类型的非关系数据库:

Redis:Redis是一个非关系数据库。这是一个基于内存的键值对数据库,用C语言编写。 MongoDB:MongoDB是一个非关系数据库。这是一个基于文档的数据库,用C++语言编写。 HBase:HBase是一个非关系数据库。它是一个基于列存储的数据库,用Java语言编写。 Secondary: Secondary是非关系数据库。它是用Java语言编写的基于图形的数据库。 Elasticsearch:Elasticsearch是一个非关系数据库。这是一个基于文档的数据库,用Java语言编写。 Memcached:Memcached是一个非关系数据库。这是一个基于内存的键值对数据库,用C语言编写。 Cassandra:Cassandra是一个非关系数据库。它是一个基于列存储的数据库,用Java语言编写。 CouchDB:CouchDB是一个非关系数据库。这是一个基于文档的数据库,用Erlang语言编写。 Riak:Riak是一个非关系数据库。这是一个基于键值对的数据库,用Erlang语言编写。 Hadoop:Hadoop是非关系数据库。这是一个基于文件的数据库,用Java语言编写。 influre DB:influre DB是一个非关系数据库。它是一个基于时间序列的数据库,用Go语言编写。 Level DB: Level DB是一个非关系数据库。它是一个基于键值对的数据库,用C++语言编写。 RocksDB:RocksDB是一个非关系数据库。它是一个基于键值对的数据库,用C++语言编写。 Tarantool:Tarantool是一个非关系数据库。这是一个基于键值对的数据库,用C语言编写。 TimescaleDB:TimescaleDB是一个非关系数据库。它是一个基于时间序列的数据库,用C语言编写。 VoltDB:VoltDB是一个非关系数据库。这是一个基于内存的键值对数据库,用Java语言编写。 Aerospike:Aerospike是一个非关系数据库。这是一个基于内存的键值对数据库,用C语言编写。 ArangoDB:ArangoDB是一个非关系数据库。它是一个基于文档的数据库,用C++语言编写。 Foundation DB: Foundation DB是一个非关系数据库。它是一个基于键值对的数据库,用C++语言编写。 OrientDB:OrientDB是一个非关系数据库。它是用Java语言编写的基于图形的数据库。

非关系数据库也就是我们常说的NoSQL数据库。它们的特点是不支持SQL语句,但是支持各种API,比如Redis支持Redis命令,MongoDB支持MongoDB命令等等。

3.4.文档数据库 文档数据库是一种非关系数据库,是基于文档的数据库。事实上,文档数据库与上述非关系数据库的区别在于,文档数据库的数据是以文档的形式存储的,而非关系数据库的数据是以键值对的形式存储的。 文档数据库的数据以文档的形式存储,文档是一种数据结构。它是一种类似于JSON的数据结构。它是键-值对的数据结构,但它的值可以是任何类型的数据,如字符串、数字、数组、对象等。 文件数据库包括但不限于:

MongoDB:MongoDB是一个基于文档的数据库,用C++语言编写。 CouchDB:CouchDB是一个基于文档的数据库,用Erlang语言编写。 Couchbase:Couchbase是一个基于文档的数据库,用C++语言编写。 ArangoDB:ArangoDB是一个基于文档的数据库,用C++语言编写。 Foundation DB: Foundation DB是一个基于文档的数据库,用C++语言编写。 OrientDB:OrientDB是一个基于文档的数据库,用Java语言编写。 RethinkDB:RethinkDB是一个基于文档的数据库,用C++语言编写。 Mark Logic: Mark Logic是一个基于文档的数据库,用Java语言编写。

4.InnoDB和myisam的区别 4.1.innodb InnoDB是MySQL 5.5之后默认的存储引擎,是一个事务型数据库。它支持事务、行级锁、外键、崩溃恢复和并发控制。 优势:

支持事务、行级锁、外键、崩溃恢复和并发控制。 支持MVCC,多版本并发控制,可以有效解决魔读问题。 支持B+树索引和哈希索引。 支持全文索引。 支持自增长列。 支持外键。

缺点:

它占用了大量的磁盘空间,因为它是以页为单位存储的,而且页的大小是固定的,通常是16KB,所以如果数据量很小,就会造成磁盘空间的浪费。 不支持全文索引的排序、分组和限制,不支持全文索引的模糊查询等。

4.2.米沙姆 MyISAM是MySQL 5.5之前的默认存储引擎。它是一个非事务数据库。它不支持事务、行级锁、外键、崩溃恢复和并发控制。 优势:

占用的磁盘空间小,因为是以表为单位存储的,表的大小不固定,所以如果数据量小,会造成磁盘空间的浪费。 支持全文索引的排序、分组和限制,全文索引的模糊查询等。

缺点:

不支持事务、行级锁、外键、崩溃修复功能和并发控制。 不支持MVCC和多版本并发控制,无法有效解决魔读问题。 不支持B+树索引和哈希索引。 支持非自增长列。 不支持外键。

4.3.InnoDB和myisam的区别 它们的区别主要如下:

Innodb支持事务,myisam不支持。 Innodb支持行级锁,但myisam不支持。 Innodb支持外键,myisam不支持。 Innodb支持崩溃修复能力和并发控制,而myisam不支持。 Innodb支持MVCC和多版本并发控制,可以有效解决魔读问题。myisam不支持MVCC和多版本并发控制,无法有效解决魔读问题。 Innodb支持B+树索引和hash索引,myisam不支持。 Innodb支持自生长列,但myisam不支持。 Innodb支持外键,myisam不支持。 Innodb占用大量磁盘空间,而myisam占用少量磁盘空间。 Innodb支持全文索引的排序、分组和限制,全文索引的模糊查询,myisam支持全文索引的排序、分组和限制,全文索引的模糊查询等。

可以看到上面列出的innodb和myisam的优缺点。它们的优缺点是相反的,所以在实际开发中,我们需要根据自己的业务场景选择合适的存储引擎。 0.3.group by和having之间的区别

Group语句用于对查询结果进行分组。 Having语句用于过滤分组结果。 Group语句必须在having语句之前。 Having语句必须在order by语句之前。 Group语句可以使用聚合函数,having语句不能使用聚合函数。

download:Vue3源码解析,打造自己的Vue3框架朝辞白帝彩云间

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
鲍忠 鲍忠
1年前
Webpack5 入门与实战,前端开发必备技能朝辞白帝彩云间
!Description(https://www.sisuoit.com/wpcontent/uploads/2022/11/1667485461a76716af3de015e.png)Webpack5入门与实战,前端开发必备技能
何婆子 何婆子
3个月前
2023全新升级,基于Vue3新标准,打造后台综合解决方案
2023全新升级,基于Vue3新标准,打造后台综合解决方案基于Vue3新标准,打造后台综合解决方案download》chaoxingit.com/119/Vue.js3是一个流行的JavaScript框架,用于构建交互式的用户界面。创建一个基于Vue3的后
乐和 乐和
1个月前
Vue3+Nuxt3打造SSR网站应用,0到1实现服务端渲染
Vue3Nuxt3打造SSR网站应用,0到1实现服务端渲染download》chaoxingit.com/309/Vue3和Nuxt3是当前非常流行的前端框架,它们提供了强大的工具和库,可以帮助开发者快速构建高质量的网站和应用程序。在Vue3和Nuxt3
乐和 乐和
1个月前
基于 Vue3 ,打造前台+中台通用提效解决方案
基于Vue3,打造前台中台通用提效解决方案download》chaoxingit.com/297/基于Vue3,打造前台中台通用提效解决方案随着互联网技术的发展,前端框架的选择和应用变得越来越重要。Vue3作为当前最受欢迎的前端框架之一,具有强大的功能
程昱 程昱
1个月前
2023全新升级,基于Vue3新标准,打造后台综合解决方案
2023全新升级,基于Vue3新标准,打造后台综合解决方案download》quangnengit.com/119/基于Vue3的后台综合解决方案可以包括以下关键方面:1.Vue3框架和生态系统Vue3框架:使用Vue3的最新特性和性能优化,提供更快的渲染
乐和 乐和
1个月前
Vue3源码解析,打造自己的Vue3框架
Vue3源码解析,打造自己的Vue3框架download》chaoxingit.com/186/Vue3源码解析:打造属于自己的Vue3框架在当今的前端开发领域,Vue.js已经成为了一款非常受欢迎的框架。随着Vue.js的不断发展,Vue3应运而生,它带
韦康 韦康
3星期前
Vue3源码解析,打造自己的Vue3框架(完结)
Vue3源码解析,打造自己的Vue3框架(完结)download》itzcw.com/8960/Vue3源码解析:打造自己的Vue3框架(完结篇)在本文中,我们将深入探讨Vue3的源码,了解其核心模块的工作原理,并尝试构建一个简单的Vue3框架。通过这个过
光之守卫 光之守卫
2星期前
2023全新升级,基于Vue3新标准,打造后台综合解决方案
2023全新升级,基于Vue3新标准,打造后台综合解决方案download》itzcw.com/8939/随着前端技术的不断发展,Vue3作为新一代的前端框架,以其强大的性能和丰富的功能,正在成为开发者的首选。本文将探讨如何基于Vue3新标准,打造一个高效
彭玘 彭玘
1星期前
Vue3源码解析,打造自己的Vue3框架
Vue3源码解析,打造自己的Vue3框架download》shanxueit.com/186/Vue3源码解析的重要性Vue3作为目前流行的JavaScript框架,其源码解析对于深化对前端框架的理解和开发能力有着重要的帮助。通过解析Vue3的源码,可以更