June 13, 2018
分布式事务XA解决方案之两阶段提交(2PC)
"对于三阶段提交请参考:\nhttps://www.cnblogs.com/binyue/p/3678390.html\nhttps://www.cnblogs.com/charlesblc/p/6289348.html\n在 计算机网络 以及 数据库 领域内, 二阶段提交(英语:Two-phase Commit)是指,为了使基于 分布式系统 架构下的所有节点在进行 事务 提交时保持一致性而设计的一种 算法(Algorithm)。通常, 二阶段提交 也被称为是一种 协议(Protocol)。在分布式系统中,每个节点虽然可以知晓自己的操作时成功或者失败,却无法知道其他节点的操作的成功或失败。当一个事务跨越多个节点时,为了保持事务的 ACID 特性,需要引入一个作为 协调者 的组件来统一掌控所有节点(称作 参与者)的操作结果并最终指示这些节点是否要把操作结果进行真正的提交(比如将更新后的数据写入磁盘等等)。因此,二阶段提交的算法思路可以概括为: 参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是中止操作。\n需要注意的是, 二阶段提交(英文缩写: 2PC)不 …"
June 12, 2018
了解MySQL中的字符集
"https://dev.mysql.com/doc/refman/5.7/en/charset.html\n平时我们只说了字符集这个概念,另外还有对应的“字符序”。一个字符集(如utf8)对应多个字符序(utf8_general_ci、utf8_german2_ci等),每个字符集都有一个默认“字符序”。\n什么是字符集、字符序?简单的来说:\n字符集(character set):定义了字符以及字符的存储编码。 字符序(collation):定义了字符的比较规则。 可以通过命令查看字符集、字符序信息:\nSHOW CHARACTER SET; 在我们开发中,一般要保持服务器端的字符集与客户端的字符集保持一致,不然容易出现乱码的情况。\nMySQL提供了不同级别的设置,包括server级、database级、table级、column级,可以提供非常精准的设置。\n参考文章: https://www.cnblogs.com/chyingp/p/mysql-character-set-collation.html"
June 11, 2018
Linux下对进程通信管理的信号机制概述
"今天看到了篇使用golang实现的系统无感重启的文章, https://gravitational.com/blog/golang-ssh-bastion-graceful-restarts/,一般用来平滑处理一些系统服务,避免先停止再启用导致的服务不可用的情况。其中用到了信号机制,这里找了一些文章主要有来介绍这方面的文章,以便加深理解。 https://blog.csdn.net/junyucsdn/article/details/50519248 https://blog.csdn.net/tiany524/article/details/17048069 https://my.oschina.net/chenliang165/blog/125825"
June 7, 2018
MySQL中的sql_mode模式
"官方文档: https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sql-mode-setting\n一、模式分类\n在MySQL8.0中主要包括以下几种模式\nONLY_FULL_GROUP_BY 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么将认为这个SQL是不合法的,因为列不在GROUP BY从句中 STRICT_TRANS_TABLES 在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做任何限制 NO_ZERO_IN_DATE 在严格模式,不接受月或日部分为0的日期。如果使用IGNORE选项,我们为类似的日期插入’0000-00-00’。在非严格模式,可以接受该日期,但会生成警告。 NO_ZERO_DATE 在严格模式,不要将 ‘0000-00-00’做为合法日期。你仍然可以用IGNORE选项插入零日期。在非严格模式,可以接受该日期,但会生成警告 ERROR_FOR_DIVISION_BY_ZERO 在严格模式,在INSERT或UPDATE过程中,如果被零除( …"
June 7, 2018
了解MySQL中的驱动表
"一、为什么要用小表驱动大表\n1、驱动表的定义\n当进行多表连接查询时, [驱动表] 的定义为:\n1)指定了联接条件时,满足查询条件的记录行数少的表为[驱动表]\n2)未指定联接条件时,行数少的表为[驱动表](重要)\n忠告:如果你搞不清楚该让谁做驱动表、谁 join 谁,请让 MySQL 运行时自行判断\n既然“未指定联接条件时,行数少的表为[驱动表]”了,而且你也对自己写出的复杂的 Nested Loop Join 不太有把握(如下面的实例所示),就别指定谁 left/right join 谁了,请交给 MySQL优化器 运行时决定吧。\n2、mysql关联查询的概念:\nMySQL 表关联的算法是 Nest Loop Join(嵌套循环),是通过驱动表的结果集作为循环基础数据,然后一条一条地通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果。\n例: user表10000条数据,class表20条数据\nSELECT * FROM user u LEFT JOIN class c u.userid=c.userid\n这样则需要用user表循环10000次才能查询出来,而如果 …"
April 26, 2018
U盘安装Centos7.4
"启动盘制作教程: https://www.cnblogs.com/yeeo1/p/7306611.html http://blog.51cto.com/mifan6/2070118"
April 20, 2018
使用docker-compose 快速创建一个mysql 数据库容器
"//创建一个独立的容器目录\nmkdir docker-db cd docker-db 前提、创建 docker Compose 配置文件 #vi docker-compose.yml 文件,内容如下\nversion: \u0026#39;3.6\u0026#39; services: db: image: hub.c.163.com/library/mysql:5.7 restart: always environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: wordpress MYSQL_USER: root MYSQL_PASSWORD: 123456 MYSQL_ALLOW_EMPTY_PASSWORD: \u0026#34;yes\u0026#34; ports: - \u0026#34;33061:3306\u0026#34; image也可以直接写mysql:5.7 或者mysql:latest,不指定获取地址。 上面的 ports 这一块,是指宿主机端口号:容器端口号。在使用的时候,直接访问本机的 33061 端口即可。端口号前也可以指定一个固定的IP 地址。 Compose …"
March 29, 2018
MySQL InnoDB锁机制之Gap Lock、Next-Key Lock、Record Lock解析
"InnoDB是一个支持行锁的存储引擎,锁的类型有:共享锁(S)、排他锁(X)、意向共享(IS)、意向排他(IX)。为了提供更好的并发,InnoDB提供了非锁定读:不需要等待访问行上的锁释放,读取行的一个快照。该方法是通过InnoDB的一个特性:MVCC来实现的。\nInnoDB有三种行锁的算法 1,Record Lock:单个行记录上的锁。\n2,Gap Lock:间隙锁,锁定一个范围,但不包括记录本身。GAP锁的目的,是为了防止同一事务的两次当前读,出现幻读的情况。\n3,Next-Key Lock:1+2,锁定一个范围,并且锁定记录本身。对于行的查询,都是采用该方法,主要目的是解决幻读的问题。\n锁的是索引,并不是记录。 记录锁(Record Lock): 单个索引行记录上的锁 间隙锁(Gap Lock):一般是针对非唯一索引而言的. 后码锁(Next-Key Lock):记录锁和间隙锁的结合,对于InnoDB中,更新非唯一索引对应的记录,会加上Next-Key Lock。在RR下如果where未使用索引会使用全表扫描,这个时候会有Next-Key Lock。如果更新记录为空,就不能加记录 …"
March 29, 2018
聚簇索引概念(Myisam与Innodb索引的区别)转推荐
"myisam的主索引和次索引都指向物理行,下面来进行讲解\ninnodb的主键下存储该行的数据,此索引指向对主键的引用\nmyisam的索引存储图如下,可以看出,无论是id还是cat_id,下面都存储有存储物理地址的值。通过主键索引或者次索引来查询数据的时候,都是先查找到\u001b数据地址,然后再到物理位置上去寻找数据。\n[][1]\ninnodb的索引存储图如下,我们会发现,主键索引下面直接存储有数据,而次索引下,存储的是主键的id(不同于MyISAM,存储的是内容数据的物理地址)。通过主键查找数据的时候,就会很快查找到数据,但是通过次索引查找数据的时候,需要先查找到对应的主键id,然后才能查找到对应的数据。\n[][2]\n总结: InnoDB的主索引文件上 直接存放该行数据,称为聚簇索引,次索引指向对主键的引用. Myisam中, 主索引和次索引,都指向物理行(磁盘位置).\n注意:对InnoDB来说, 1: 主键索引 既存储索引值,又在叶子中存储行的数据 2: 如果没有主键, 则会Unique key做主键 3: 如果没有unique,则系统生成一个内部的rowid做主键. 4: 像innodb …"
March 27, 2018
IE浏览器报Promise错误的解决办法
"说明ie浏览器不支持Promise,可搜索关键字 polyfill,引入以下库即可\nhttps://cdn.polyfill.io/v2/polyfill.min.js?features=es6\n官方文档: https://cdn.polyfill.io/v2/docs/ 参考: https://www.cnblogs.com/XHappyness/p/7919610.html 参考: https://www.jianshu.com/p/2888a8e204e8"