杨 发布的文章

索引 说白了,索引问题就是一个查找问题。。。
数据库索引 ,是数据库管理系统中 一个排序的数据结构 ,以协助快速查询、更新数据库表中数据。
索引的实现通常使用B树及其变种B+树 。 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。



- 阅读剩余部分 -

react 周期

  1. constructor
  2. componentWillMount
  3. render
  4. componentDidMount
  5. componentWillReceiveProps
  6. ...

本篇文章重点讲 componentDidMount 和 componentWillReceiveProps

首先这两个方法都是在页面渲染之后执行的,一般用来做数据变化后的重新渲染。

区别是
componentDidMount 只执行一次,多用于当前组件,有数据变化后的渲染。
componentWillReceiveProps 初始化不会调用,没有次数限制,只要状态发生变化就会调用该函数,一般用于子组件。

批量修改

vim多行操作利用 vim的 VISUAL 模式

具体操作步骤:

① 在命令模式下 按 v ,进入visual模式

② 按ctrl+v,利用↑、↓操作符选中多行

③ 一 输入的话 输入大写I,进入插入模式。二 删除的话 按d

④ 编辑好后按两下ESC,完成

Tips: 最终的下标位置由在进visual模式之前的位置决定,所以可以自行选择位置。

隐藏行号

:se nonu

问题假设有256M内存,要对一个有10G数据文件进行排序

思路: 先分治,再归并。
步骤1:把文件根据内存大小进行拆分为若干小文件,具体大小保证小于排序所需要的内存,并排序。
步骤2:合并有序小文件。
如何合并呢? 取每个文件的第一个元素进行比较,最小值就是所有元素中最小的,放到大文件。下一轮再拿第二个,以此类推...
步骤2其实是N个数找最小值问题,原始方法时间复杂度较高,可以用更优的算法替换。

MySQL字符串最主要的类型是varcharchar

varchar 用于存储可变长字符串,比定长节省空间。原理是使用1或2个额外字节记录字符串的长度:列长小于等于255字节,则用1字节表,否则用2字节。例如varchar(10)的列的存储空间为11字节,varchar(1000)的列则需要1002字节。

但是由于变长的,在update时会做额外的工作。

合适的场景:字符串列的最大长度比平均长度大很多;列更新较少;使用了像UTF-8这样复杂的字符集,每个字符都使用不同的字节数进行存储。

char 是定长的,MySQL 会删除所有的末尾空格。

合适的场景:很短的字符串,或者所有值接近同一个长度。如MD5值。经常更新的列char不容易产生碎片。定长的列最好用char,如身份证,手机号

长度限制:

char:最大长度为255,超过这个数值会提示:

MySQL said: Column length too big for column 'char' (max = 255); use BLOB or TEXT instead

varchar:最大长度与字符集有关:
字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;
字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。
使用utf-8mb4字符集,一个字符占用4个字节,最大长度是(65535-2)/4=16383 个字符。
若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。

text:变长,最大长度65535字节。没有默认值。
mediumtext:最大长度16777215(2^24-1)字节。
longtext:最大长度2147483647(2^31-1)字节。

总结:varchar可变长,用额外1个或2个字节存储长度,节省空间;char定长,没有额外操作,更适合短且定长的列。

linux 性能监控的指标包括:

CPU、内存、IO、网络等等。

这些子系统之间关系是相互彼此依赖的,任何一个高负载都会导致其他子系统出现问题.比如:
大量的页调入请求导致内存队列的拥塞
网卡的大吞吐量可能导致更多的 CPU 开销
大量的CPU 开销又会尝试更多的内存使用请求
大量来自内存的磁盘写请求可能导致更多的 CPU 以及 IO 问题
所以要对一个系统进行优化,查找瓶颈来自哪个方面是关键,虽然看似是某一个子系统出现问题,其实有可能
是别的子系统导致的.







- 阅读剩余部分 -

事务

InnoDB的事务符合ACID特性:

  • 原子性 atomicity
  • 一致性 consistency
  • 隔离性 i
  • 一致性 d

事务通过redo log(重做日志)和 undo log(回滚日志)实现。
redolog保证事务的原子性和持久性,undolog保证事务的一致性。redolog是物理操作,记录页的修改操作,undolog是逻辑日志,根据每行记录进行记录。


- 阅读剩余部分 -