January 19, 2016
MySQL索引之聚集索引
"导读 在MySQL里,聚集索引和非聚集索引分别是什么意思,有什么区别?\n在MySQL中,InnoDB引擎表是(聚集)索引组织表(clustered index organize table),而MyISAM引擎表则是堆组织表(heap organize table)。\n也有人把聚集索引称为聚簇索引。\n当然了,聚集索引的概念不是MySQL里特有的,其他数据库系统也同样有。\n简言之,聚集索引是一种索引组织形式,索引的键值逻辑顺序决定了表数据行的物理存储顺序,而非聚集索引则就是普通索引了,仅仅只是对数据列创建相应的索引,不影响整个表的物理存储顺序。\n我们先来看看两种存储形式的不同之处:\n简单说,IOT表里数据物理存储顺序和主键索引的顺序一致,所以如果新增数据是离散的,会导致数据块趋于离散,而不是趋于顺序。而HOT表数据写入的顺序是按写入时间顺序存储的。 IOT表相比HOT表的优势是:\n范围查询效率更高;\n数据频繁更新(聚集索引本身不更新)时,更不容易产生碎片;\n特别适合有一小部分热点数据频繁读写的场景;\n通过主键访问数据时快速可达;\nIOT表的不足则有:\n数据变化如果是离散为主的话,那么效率 …"
January 19, 2016
你真的了解SQL的索引吗?
"其实对于非专业的数据库操作人员来讲,例如软件开发人员,在很大程度上都搞不清楚数据库索引的一些基本知识,有些是知其一不知其二,或者是知其然不知其所以然。造成这种情况的主要原因我觉的是行业原因,有很多公司都有自己的DBA团队,他们会帮助你优化SQL,开发人员即使不懂优化问题也不大,所以开发人员对这方面也就不会下太多功夫去了解SQL优化,但如果公司没有这样的DBA呢,就只能靠程序员自己了。 最近突然想起前一阵和一朋友的聊天,当时他问我的问题是一个非常普通的问题:说说SQL聚集索引和非聚集索引的区别。\n大家可能认为这个问题难度不大,认为太熟悉了,也许不会感兴趣,但你真能说清楚吗?其实要想说明白这两者的差别也不是三两句就说的清的,那天我也是觉的这问题太泛了,就随便说了其中的两个区别:\n聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个,这个跟没问题没差别,一般人都知道。\n聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续,这个大家也都知道。\n上面的两点从大的方面讲都是讲的通的,后面我们继续探讨,举一个实际点的例子,一个学生表student,里面是学生号id,学生 …"
January 19, 2016
MySQL聚簇索引&聚集索引&索引组织表myisam
"MySQL聚簇索引\u0026amp;聚集索引\u0026amp;索引组织表\nhttp://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html\n聚簇索引和聚集索引(Clustered Index) 说起索引,不能不说B+树。\n引用: http://blog.codinglabs.org/articles/theory-of-mysql-index.html\nMySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。\n我们知道,数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优秀的查找算法,例如二分查找(binary search),二叉树查找(binary tree search)等。如果稍微分析一下会发现,每种查找算法都只能应用于特定的数据结构 …"
December 22, 2015
使用 Git Hook 实现网站的自动部署
"自动化能解放人类的双手,而且更重要的是,因为按照规定的流程来走,也减少了很多误操作的产生。不知道大家平时都是怎么样更新自己生产环境的代码的,FTP 覆盖旧文件、服务器定时任务去 build 最新的源码,还是有更高级的做法?\n目前我在使用 Git Hook 来部署自己的项目。Git Hook 是 Git 提供的一个钩子,能被特定的事件触发后调用。其实,更通俗的讲,当你设置了 Git Hook 后,只要你的远程仓库收到一次 push 之后,Git Hook 就能帮你执行一次 bash 脚本。\nGit的挂钩(Hook)主要包含:\napplypatch-msg post-update pre-rebase commit-msg pre-applypatch update post-commit pre-commit post-receive prepare-commit-msg 这里我们只需要使用 post-receive 这个 Hook:在接收 post(push)请求之后执行。\n下面是我使用 Git Hook 进行简单的自动化部署,可能还有更高级的做法,大家自己去挖掘。\n服务器上需要配置两 …"
December 22, 2015
Git中的hooks钩子
"Git可以定制一些钩子,这些钩子可以在特定的情况下被执行,分为Client端的钩子和Server端的钩子。 Client 端钩子被operation触发,比如commit,merge等Server 端钩子被网络动作触发,比如pushed commits。\n那么钩子是放在哪的呢?\n在.git/hooks/文件夹下。当你init一个仓库的时候,下边会有一些钩子的例子,以.sample结尾。\n那么钩子什么时候被执行,Git预定义了触发时机:\nClientSide hooks:\n1 pre-commit,当执行commit动作时先执行此hook,可以用此hook做一些检查,比如代码风格检查,或者先跑测试。\n2 prepare-commit-msg, 当commit时需要输入message前会触发此hook,可以用此hook来定制自己的default message信息。\n3 commit-msg,当用户输入commit的message后被触发,可以用此hook校验message的信息,比如是否符合规定,有没有cr等。\n4 post-commit, 当commit完成后被触发,可以用此hook发 …"
December 17, 2015
javascript静态类型检测器 flow(facebook)
"http://flowtype.org/\n对于flow的介绍可以参考: http://blog.jobbole.com/80364/"
December 16, 2015
linux中 kill USR1和USR2 的区别
"USR1亦通常被用来告知应用程序重载配置文件;例如,向Apache HTTP服务器发送一个\n**USR1信号将导致以下步骤的发生: ** 停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。\n以上摘自wiki:\n呃,近日发现还有USR2,貌似这个USR1和2都可以用户自定义的,同样摘自上面的wiki:\n在POSIX兼容的平台上,SIGUSR1和SIGUSR2是发送给一个进程的信号,它表示了用户定义的情况。它们的符号常量在头文件signal.h中定义。在不同的平台上,信号的编号可能发生变化,因此需要使用符号名称。kill -HUP pid 或者 killall -HUP pName: 其中pid是进程标识,pName是进程的名称 如果想要更改配置而不需停止并重新启动服务,可以使用上面两个命令。在对配置文件作必要的更改后,发出该命令以动态更新服务配置。 根据约定,当你发送一个挂起信号(信号1或HUP)时,大多数服务器进程(所有常用的进程)都会进行复位操作并重新加载它们的配置文件。"
December 13, 2015
brew tap介绍
"官方介绍: https://github.com/Homebrew/homebrew/wiki/brew-tap\nbrew 有个默认的仓库,brew tap 你可以看成是第三方的仓库。 这个相信很多人都已经用到过了,安装他人扩展的 brew 服务。由于 brew 和包含的包源都是通过 github 来管理,人为的维护管理,除了自己的源还允许别人的源添加进来。类似与 Ubuntu 的 ppa。好处在于只有我安装规定的方式把包丢到 github 上面就可以用了!\n$ brew tap \u0026lt;gihhub_user/repo\u0026gt; 这个命令并没有包含任何的帮助说明,其实它只接受上面的这个参数。\n举例说明一下,Mac OS 比较歧视 PHP ,所以每次系统更新都会把常用的开发包(Ruby、Python 等)也顺带着更新到最新版本。(吐槽:Java 都已经被抛弃不再默认安装了),而 brew 居然也不包含 PHP 的包,那怎么办呢?\n$ brew tap josegonzalez/php 命令完成之后,执行(当前最新是 php 5.5 版本,请根据需要替换)\n$ brew install …"
December 9, 2015
mac下安装PHP提示configure: error: Cannot find OpenSSL’s 的解决办法
"在mac 10.11.2 下安装PHP7的时候,在./configure的时候,提示\nchecking for strftime… (cached) yes checking whether to enable LIBXML support… yes checking libxml2 install dir… /usr checking for xml2-config path… /usr/bin/xml2-config checking whether libxml build works… yes checking for OpenSSL support… yes checking for Kerberos support… no checking whether to use system default cipher list instead of hardcoded value… no checking for RAND_egd… no checking for pkg-config… no configure: error: Cannot find OpenSSL’s\n错 …"
December 9, 2015
常用 Git 命令清单(推荐)
"作者: 阮一峰\n日期: 2015年12月 9日\n我每天使用 Git ,但是很多命令记不住。\n一般来说,日常使用只要记住下图6个命令,就可以了。但是熟练使用,恐怕要记住60~100个命令。\n下面是我整理的常用 Git 命令清单。几个专用名词的译名如下。\nWorkspace:工作区\nIndex / Stage:暂存区\nRepository:仓库区(或本地仓库)\nRemote:远程仓库\n一、新建代码库 # 在当前目录新建一个Git代码库 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init [project-name] # 下载一个项目和它的整个代码历史 $ git clone [url] 二、配置 Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。\n# 显示当前的Git配置 $ git config --list # 编辑Git配置文件 $ git config -e [--global] # 设置提交代码时的用户信息 $ git config [--global] user.name …"