分类目录归档:技术随笔

Mysql技术内幕InnoDB存储引擎-事务&备份&性能调优

事务

transaction是数据库区别于文件系统的重要特性之一,innodb引擎完全符合事务的ACID特性。

Atomicity 原子性

Consistency一致性

Isolation 隔离性

Durability 持久性

7.1、事务概述

Atomicity 原子性:整个数据库事务是不可分割的工作单位。

Consistency一致性:事务将数据库从一种状态转变为下一种一致的状态。

Isolation 隔离性:一个事务的影响在该事务提交前对其他事务都不可见。

Durability 持久性:事务一旦提交,其结果就是永久性的。 继续阅读

Mysql技术内幕InnoDB存储引擎-表&索引算法和锁

4.1、innodb存储引擎表类型

innodb表类似oracle的IOT表(索引聚集表-indexorganized table),在innodb表中每张表都会有一个主键,如果在创建表时没有显示的定义主键则innodb如按照如下方式选择或者创建主键。
首先表中是否有唯一非空索引(unique not null),如果有则该列即为主键。
不符合上述条件,innodb存储引擎会自动创建一个6字节大小的指针,rowid()。

4.2、innodb逻辑存储结构

innodb的逻辑存储单元由大到小分别是 tablespace,segment,extent,page(block)组成

4.2.1、表空间(tablespace)

所有数据都是存放在表空间中的,启用了参数innodb_file_per_table,则每张表内的数据可以单独放到一个表空间中,每张表空间内存放的只是数据,索引和插入缓冲,其他类的数据,如undo信息,系统事务信息,二次写缓冲等还是存放在原来你的共享表空间。 继续阅读

Mysql技术内幕InnoDB存储引擎-InnoDB存储引擎

自己工作也有几年了,最近打算把过去的知识点与学习内容再整理整理。Mysql重量级数据《Mysql技术内幕InnoDB存储引擎》。

一.mysql体系结构和存储引擎

1.1、数据库和实例的区别

         数据库:物理操作系统或其他形式文件类型的集合。在mysql下数据库文件可以是frm,myd,myi,ibd结尾的文件。

数据库实例:由数据库后台进程/线程以及一个共享内存区组成。数据库实例才是真正用来操作数据库文件的。

mysql数据库是单进程多线程的程序,与sql server比较类似。也就是说,Mysql数据库实例在系统上的表现就是一个进程。 继续阅读

Api对接之-单例模式

这次的api对接,除了使用适配器模式和工厂模式,同时也用到了单例模式。何为单例模式,单例模式应该算是设计模式中较为简单的模式了。它确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

在计算机系统中,线程池、缓存、日志对象、对话框、打印机、数据库操作、显卡的驱动程序常被设计成单例,其中数据库操作算是比较常见的一个应用。 继续阅读

Api对接之-工厂模式

这次的api对接,除了使用适配器模式,同时也用到了工厂模式。首先我们来定义下工厂模式是什么?优点是什么?工厂模式的优点就在创建对象上。建立一个工厂(一个函数或一个类方法)来制造新的对象,它的任务就是把对象的创建过程都封装起来,创建对象不是使用new的形式了。而是定义一个方法,用于创建对象实例。

做过开发的人可能都知道,数据库的链接需要配置不同的数据库参数来创建数据库实例。只需要参数不同,就能够创建不同的数据连接对象。在上文中我们提到了适配器模式,根据每个第三方平台,我们会编写不同的适配类。那么如何在上层调用代码的地方保持不变,就需要使用工厂模式,根据参数获取不同的适配类对象。然后再调用适配类的具体方法。 继续阅读

Api对接之-适配器模式

最近需要对接第三方独立平台的推送订单,同步库存以及同步包裹信息。考虑不同平台数据接口的差异,以及我们自有系统的维护便利性,这里采用了适配器模式来处理。

何为适配器模式:其核心思想把对某些相似的类的操作转化为一个统一的“接口”(这里是比喻的说话)–适配器,或者比喻为一个“界面”,统一或屏蔽了那些类的细节。适配器模式还构造了一种“机制”,使“适配”的类可以很容易的增减,而不用修改与适配器交互的代码,符合“减少代码间耦合”的设计原则。 继续阅读

PHP如何结束正在运行的进程

之前看了Java的部署代码,发现需要每次需要手动结束正在运行的进程,然后再启动新的部署代码。所以我在考虑如何用程序自动实现这个功能。今天看程序的源码正好看到这个功能,所以来整理下相关的知识点以及描述如何实现。

1.第一步是如何查询相关关键词的进程。(PS:我先执行一个命令php artisan testQuery,内容就是sleep(10000)). 继续阅读

PHP使用github和packagist创建自己的composer工程

最近打算写个自己的应用,放在github上,然后做成自己的composer镜像,这样大家用着就会非常方便了,说干就干,其中简单的步骤就不再赘述,网上有很多的例子。

1.新建一个github的私有工程。

2. 本地使用composer初始化一个工程。(使用composer init初始化,选择psr-4规范),类似的例子如下: 继续阅读

Centos下php7编译安装以及配置

刚购买了阿里云的centos系统机器。系统原来自带的php5.4版本,后来自己又装了php7.1。发现phpinfo()识别的是php5.4,php -V输出的是php7.1。所以今天把自带的版本直接删除了。

rpm -qa | grep php 查询所有关于php的依赖以及插件,然后使用rpm -e 删除了列出来的所有依赖插件。 继续阅读