黑猫的博客

系统吞吐量、TPS(QPS)、用户并发量概念和公式

**QPS: **每秒钟处理完请求的次数;注意这里是处理完。具体是指发出请求到服务器处理完成功返回结果。

**TPS:**每秒钟处理完的事务次数。

并发量:系统能同时处理的请求数。

RT:响应时间,处理一次请求所需要的平均处理时间。

计算关系:

QPS = 并发量 / 平均响应时间

并发量 = QPS * 平均响应时间

SQL语言概念

SQL:Structured Query Language,结构化查询语言!

DDL:Data Definition Language,数据定义语言!

主要是用来定义和维护数据库的各种对象(比如库、表、索引和视图等),也可以说操作的层次是在数据库和表的逻辑结构和存储结构上面,并没有对表中的实际的数据进行操作!

DML:Data manipulation Language,数据操作语言

主要是对表中的记录进行增删改查的操作!

DCL:Data Control Language,数据控制语言

主要是对数据库进行统一控制和统一管理的工作,比如并发控制、存取控制、安全控制等;具体的有:数据库的权限管理,数据的备份与恢复等!

mysql之索引

分类:

  1. 主键索引:一个表只能有一个主键索引,但是可以有复合主键索引.
  2. 普通索引:一个表可以有多个普通索引.
  3. 全文索引:只有(varchar,text英文)myisam引擎才有(mysql5.6版本后也有),只对英文有效,对中文索引采用sphinx来操作
  4. 唯一索引:一个表可以有多个唯一索引,就是字段的值不可以相同(一般使用程序控制一个字段的唯一性)
  5. 复合(多列、联合)索引:由多个字段组成的索引

git常用命令

初始化当前目录为git仓库:

git init  :执行完后会在当前目录生成一个.git的隐藏文件夹

克隆远程的仓库代码到指定目录:

git clone url  [目录名称,不写默认会在当前目录创建一个与版本库同名的目录]

git clone url .

 

添加当前目录的所有文件到暂存区:

git add .

查看暂存区状态:

git status

提交文件:

git commit -m ‘备注信息’

查看提交备注的信息

git log 或者 git reflog

版本回退:

git reset –hard *******(取前7位)

查看版本所有的分支:

git branch

创建分支(创建devlop分支):

git branch devlop

切换分支(切换到master分支):

git checkout master

合并分支devlop分支到master主分支

git checkout  master

git merge  –no-ff devlop

删除分支(删除devlop分支):

git branch -d devlop

推送到远程服务器:

git push

从远程服务器获取内容:

git pull

python获取mac地址

import uuid
def get_mac_address(): 
    mac=uuid.UUID(int = uuid.getnode()).hex[-12:] 
    return ":".join([mac[e:e+2] for e in range(0,11,2)])

print(get_mac_address())

 

mysql之 子查询

从形式上看,子查询就是一个select语句中又出现了一个select语句

最基本的要求:子查询语句需要使用一对括号括起来!

mysql之数据的备份

数据备份与还原,具体如下

mysql之用户权限管理与密码修改

root用户,超级管理员,拥有全部的权利。在mysql中,所有的用户的信息都在mysql(这里的mysql是一个数据库名)数据库下user表中!其中有三个字段比较重要:host、use、password。

my.ini详解

[client]

#password = your_password

port  = 3306

socket  = /tmp/mysql.sock

# Here follows entries for some specific programs

# The MySQL server

[mysqld]

port  = 3306

socket  = /tmp/mysql.sock

#避免外部锁定(默认是ON).

skip-external-locking

#索引缓冲区(仅作用于MYISAM表和临时表),决定了数据库索引处理的速度,改为10M

key_buffer_size = 16K

#通信缓冲区的最大长度。包或任何生成的/中间字符串的最大大小。可改为更大的比如32M

max_allowed_packet = 1M

#所有线程打开的表的数目(一个表使用2个文件描述符),表数量多,就要大一些。增大该值可以增加mysqld需要的文件描述符的数量。可以检查Opened_tables(已经打开的表的数量)状态变量来检查你是否需要增加表缓存。可改为2048  

table_open_cache = 4     

#每个排序线程分配的缓冲区的大小。增加该值可以加快ORDER BY或GROUP BY操作,可改为5M

#排序缓冲区内存大小,询需要排序时才分配内存,分配这个参数的全部大小!

sort_buffer_size = 64K 

#MyISAM表进行全表扫描时,每个线程连续扫描时为扫描的每个表分配的读缓冲区的大小,如果进行多次连续扫描,可能需要增加该值,可改为1M,一定要是4k的倍数!

read_buffer_size = 256K  

#索引缓冲区的大小,只会分配需要的大小。当排序后按排序后的顺序读取行时,则通过该缓冲区读取行,避免搜索硬盘。将该变量设置为较大的值可以大大改进ORDER BY的性能。但是,这是为每个客户端分配的缓冲区,因此你不应将全局变量设置为较大的值。相反,只为需要运行大查询的客户端更改会话变量。可改为2M

read_rnd_buffer_size = 256K 

#在查询之间将通信缓冲区重设为该值。如果语句超出该长度,缓冲区自动扩大,直到max_allowed_packet字节。 

net_buffer_length = 2K

#每个线程的堆栈大小

#thread_stack = 128K          #thread_stack = 194K

#mysql服务器安装目录

basedir=f:/server/mysql

#mysql数据存储目录

datadir=f:/server/mysql/data

#mysql数据库编码(防止命令行下乱码)

character-set-server = gbk

 

#主从同步配置。主机是1。备机从2开始。

server-id = 1

#启动数据库更新二进制日志记录,日志文件名前缀为mysql-bin

#log-bin=mysql-bin

# binary logging format - mixed recommended

#binlog_format=mixed

# Causes updates to non-transactional engines using statement format to be

# written directly to binary log. Before using this option make sure that

# there are no dependencies between transactional and non-transactional

# tables such as in the statement INSERT INTO t_myisam SELECT * FROM

# t_innodb; otherwise, slaves may diverge from the master.

#binlog_direct_non_transactional_updates=TRUE

# Uncomment the following if you are using InnoDB tables

 #InnoDB 不会自己建立目录,必须自己使用操作系统命令建立相应的目录。检查你的 MySQL 服务程序在datadir 目录里 有足够的权限建立文件(mysql用户组拥有)。

#这是InnoDB表的目录共用设置。如果没有设置,InnoDB 将使用MySQL的 datadir 目录为缺省目录。如果设定一个空字串,可以在 innodb_data_file_path 中设定绝对路径。

#innodb_data_home_dir = C:\\mysql\\data\\      

#这里应当预先创建好10个2048M的文件,目前还没有创建  innodb_data_file_path = ibdata1:2000M;ibdata2:2000M;ibdata3:2000M;ibdata4:2000M;ibdata5:2000M;ibdata6:2000M;ibdata7:2000M;ibdata8:2000M;ibdata9:2000M;ibdata10:2000M:autoextend

#innodb_data_file_path = ibdata1:10M:autoextend   

#InnoDB 日志文件的路径。如果没有明确指定将默认在 MySQL 的 datadir 目录下建立两个 5 MB 大小的ib_logfile0和ib_logfile1文件。

#将日志文件与数据文件分别放在不同的物理硬盘中对提高性能通常是很有益的

#innodb_log_group_home_dir = C:\\mysql\\data\\     

#表和索引数据的内存缓冲区,越大性能越高。但不能超过物理内存的50%。若64位OS,该值可以更大。32位OS受2G内存的限制,不能将内存使用设置太高, glibc 会把进程堆增长到线程堆栈之上,这将会使服务器崩溃。下面的接近或超过于 2G 将会很危险:innodb_buffer_pool_size + key_buffer +    max_connections * (sort_buffer_size + record_buffer_size + binlog_cache_size) + max_connections * 2 MB

#每个线程将使用 2MB(MySQL AB 二进制版本为 256 KB)的堆栈,在最坏的环境下还会使用 sort_buffer_size + record_buffer_size 的附加内存。可改为512M
#总内存-(每个线程所需要的内存*连接数)-系统保留内存

#innodb_buffer_pool_size = 16M            

#主要用来存储表结构和数据字典,表越多要求内存就越大,可改为16M

#innodb_additional_mem_pool_size = 2M

#日志组中的每个日志文件的大小(单位 MB)。如果 n 是日志组(innodb_log_files_in_group)中日志文件的数目,那么理想的数值为 1M 至缓冲池(innodb_log_buffer_size)大小的 1/n。较大的值,可以减少刷新缓冲池的次数,从而减少磁盘 I/O。但是大的日志文件意味着在崩溃时需要更长的时间来恢复数据。可改为256M

#innodb_log_file_size = 5M

#InnoDB 将日志写入日志磁盘文件前的缓冲大小。理想值为 1M 至 8M。大的日志缓冲允许事务运行时不需要将日志保存入磁盘而只到事务被提交(commit)。因此,如果有大的事务,设置大的日志缓冲可以减少磁盘I/O。 

#innodb_log_buffer_size = 8M

#1表示每次事务结束都写日志并刷新磁盘;2表示每次事务写日志但不刷新磁盘(每秒刷新);0(默认值)表示每秒写日志并刷新磁盘。0表示最多丢失1秒的数据,但性能最好。

#innodb_flush_log_at_trx_commit = 1       

#InnoDB行锁导致的死锁等待时间(默认值是50S),可改为30

#innodb_lock_wait_timeout = 50

设计模式六大原则

开放封闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象.
依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
单一职责原则:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。
接口隔离原则:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
迪米特法则 :一个对象应该对其他对象保持最少的了解。