代码改变世界

随笔分类 -  开源研究

谈Mysql索引

2013-07-17 08:31 by 轩脉刃, 1473 阅读, 收藏, 编辑
摘要: myisam和innodb的索引有什么区别? 两个索引都是B+树索引,但是myisam的表存储和索引存储是分开的,索引存储中存放的是表的地址。而innodb表存储本身就是一个B+树,它是用主键来做B+树的key的。 因此innodb需要设置主键,如果没有的话,mysql会优先使用unique键做主键,如果没有unique的话,会生成一个隐含字段做主键。 innodb中的主键最好是要使用自增i... 阅读全文

Symfony学习--目录和入口

2013-05-16 10:09 by 轩脉刃, 6231 阅读, 收藏, 编辑
摘要: 1 目录结构 根目录下有: app src vendor web app是存放应用的一些配置文件,如果有一些配置文件或者文档,应当存放在这里面。 src是存放你的项目的php代码,这里的php至少必须是5.3,因为symfony中使用了命名空间的概念。 vendor是存放第三方代码的目录,这个目录可能非常庞大,因为symfony大量使用了第三方bundle的概念,连自身都是作为一个... 阅读全文

好文收藏系列(二)

2013-05-08 15:14 by 轩脉刃, 1784 阅读, 收藏, 编辑
摘要: 分析redis性能的项目 https://github.com/Instagram/redis-faina DB性能分析思路之全量query分析 http://txyey.org/?p=60 如何创建自适应系统来增强用户体验 http://www.alibuybuy.com/posts/81152.html#jtss-tsina PS: 自适应系统的概念 Golan... 阅读全文

Linux下安装tomcat+jdk+mysql记录

2013-04-21 16:32 by 轩脉刃, 2831 阅读, 收藏, 编辑
摘要: 先安装JDK下载jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.htmlwgethttp://download.oracle.com/otn-pub/java/jdk/7u21-b11/jdk-7u21-linux-x64.tar.gz?AuthParam=1366529379_f7fe2af81268eee41771542b3191968cmv jdk-7u21-linux-x64.tar.gz\?AuthParam\=1366529379_f7fe2af81268eee41 阅读全文

关于正则的迷思

2013-04-15 10:07 by 轩脉刃, 2405 阅读, 收藏, 编辑
摘要: 正则是我们日常编程中一定会使用到的,不管是各种语言中的正则匹配,还是linux/unix系统上的grep/egrep命令,都是在使用正则来匹配字符串。随着用的深入,可能会感到越来越迷惑:为什么有的语言要提供多种正则匹配的函数集?-- 比如php的preg系列和ereg系列为什么有的正则语句在不同的语言上匹配出来的东西是不一样的?-- 比如unix的grep命令和perl语言的grep故事从头开始讲正则表达式(Regular Expression)从1956年就开始出现这个概念,后来Unix之父Ken Tompson将这个概念引入Unix,出现了grep工具。但是随着Unix的版本不断演化,Un 阅读全文

论HTTP请求大小

2013-03-29 09:55 by 轩脉刃, 51483 阅读, 收藏, 编辑
摘要: HTTP分为URI,HEADER,Body三个部分。每个部分都可以包含请求信息,那么每个部分是否都有请求大小限制呢?刚开始以为这个问题很容易找到答案,后来发现这也是个挺复杂的问题。URI首先是URI,我们知道,在GET请求中,请求参数是放在URL进行传递的,所以,HTTP GET的请求最关心的一个问题:能有多长?我能放多少参数?URI从HTTP 1.1协议中开始找:(RFC 2616)The HTTP protocol does not place any a priori limit on the length of a URI所以明确一点的是HTTP协议是没有显式限制URI的长度的。理论上 阅读全文

好文收藏系列(一)

2013-03-26 13:26 by 轩脉刃, 2210 阅读, 收藏, 编辑
摘要: 好多好文章看完就直接丢了,或者放在浏览器标签内,但是标签多了也会烦,以后一段时间整理下放blog上。 用 Go 实现零停机升级 TCP 服务 http://www.mikespook.com/2012/05/%E7%BF%BB%E8%AF%91%E7%94%A8-go-%E5%AE%9E%E7%8E%B0%E9%9B%B6%E5%81%9C%E6%9C%BA%E5%8D%87%E7%BA... 阅读全文

MongoDB应用学习

2013-03-18 14:15 by 轩脉刃, 1919 阅读, 收藏, 编辑
摘要: 创建数据库可以直接使用use test 但是这个时候show dbs是看不到的,只有加入了数据才算真正创建了。 collection对应mysql中表的概念 collection中每条数据在生成的时候会自行生成_id的字段 db.pet.find() 相当于select * from pet > db.pet.find() { "_id" : ObjectId("513... 阅读全文

关于websocket

2013-03-11 09:54 by 轩脉刃, 28056 阅读, 收藏, 编辑
摘要: 这个是一次组内分享,关于websocket的协议和应用的。文章在分享之前就写好了,整理下放出来。对应的PPT地址是:http://websocket.funaio.com从推送技术开始说一篇文章10 Years of Push Technology, Comet, and WebSockets(http://cometdaily.com/2011/07/06/push-technology-comet-and-websockets-10-years-of-history-from-lightstreamers-perspective/)非常详细的说明清楚了从1996-2007年推送技术的更新。 阅读全文

聊天室服务分析设计

2013-03-05 09:52 by 轩脉刃, 17050 阅读, 收藏, 编辑
摘要: 如果你需要写一个简单的聊天室的服务,那么我想很多网上的demo都可以直接拿来用。但是如果你要做的是给线上百万甚至千万级用户用的服务,那么,整个结构和聊天室Demo是必然不一样的。本文就从设计一个大用户量的聊天室服务的角度出发来思考。 分布式? 首先用户量大必然先考虑的问题是服务是单进程还是多进程,单机器还是多机器,单进程代表的是单机上跑一个服务,单机器代表的是单机上跑一个或者多个服务,这两种方... 阅读全文

CGI的一些知识点

2012-12-24 11:31 by 轩脉刃, 5992 阅读, 收藏, 编辑
摘要: CGI(Common Gateway Interface)是能让web服务器和CGI脚本共同处理客户的请求的协议。它的协议定义文档是http://www.ietf.org/rfc/rfc3875。 其中Web服务器负责管理连接,数据传输,网络交互等。至于CGI脚本就负责管理具体的业务逻辑。 Web服务器的功能是将客户端请求(HTTP Request)转换成CGI脚本请求,然后执行脚本,接着将CGI... 阅读全文

mysql那些招

2012-11-22 13:04 by 轩脉刃, 2222 阅读, 收藏, 编辑
摘要: show table status mysql官方文档在 http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html 这里的rows行是表的行数,但是实际上是不准的。myisam是准的,其他的存储引擎是不准的。要准确的行数就需要使用count(*) 来获取了。 mysql执行大批量删除 执行大批量删除的时候注意要使用上limit 因为如果不用limit,删除大量数据很有可能造成死锁 如果delete的where语句不在索引上,可以先找主键,然后根据主键删除数据库 ps: 平时update和delete的时候最好也加... 阅读全文

为什么使用框架

2012-09-25 18:09 by 轩脉刃, 3310 阅读, 收藏, 编辑
摘要: 这是一篇翻译文章,原文说明了框架在开发过程中给使用带来的懒惰,不思维的弊病。文章来源:http://blog.8thlight.com/myles-megyesi/2012/09/12/why-frameworks.html ===========正文开始 我们是由于效率和易用性的考虑才产生框架。框架能节省开发时间。框架强制使用公共的约定,因此它能有效地解决一些共有的问题,比如页面渲染,ass... 阅读全文

Golang Http Server源码阅读

2012-08-22 15:04 by 轩脉刃, 39022 阅读, 收藏, 编辑
摘要: 这篇文章出现的理由是业务上需要创建一个Web Server。创建web是所有语言出现必须实现的功能之一了。在nginx+fastcgi+php广为使用的今天,这里我们不妨使用Go来进行web服务器的搭建。 前言 使用Go搭建Web服务器的包有很多,大致有下面几种方法,直接使用net包,使用net.http包,使用第三方包(比如gorilla)。使用net包就需要从tcp层开始封装,耗费人力物力极大... 阅读全文

Linux IO模型漫谈(2)

2012-05-31 09:57 by 轩脉刃, 3349 阅读, 收藏, 编辑
摘要: 不管Linux的IO模型的阻塞同步分类是如何分类,几种IO模型的具体实现是确定的。这里借用《Unix 网络编程:卷一》的图片说明。 1 阻塞式IO模型 这个模型也是最容易理解的 程序调用和我们基本的程序编写是一致的: fd = connect() write(fd) read(fd) close(fd) 程序的read必须在write之后执行,当write阻塞住了,read就不能执行下去 2 非阻塞IO模型 从图中可以看出来,这是一个轮询的过程 每次用户询问内核是否有数据报准备好(文件描述符缓冲区是否就绪),当数据报准备好的时候,就进行拷贝数据报的操作。当数据报没... 阅读全文

Unix家族编年史

2012-05-30 13:30 by 轩脉刃, 3646 阅读, 收藏, 编辑
摘要: Unix是多用户、多任务的操作系统,它的历史悠久,也有多种版本。在Unix接触过程中常使用到的词,BSD,Linux等。初学者,甚至是接触unix很久的用户也未必对其家谱了如指掌。这篇文章描述的是Unix的族谱和发展历史。 1969年,Unix的前身Unics出现 作者: 肯·汤普逊(左)和丹尼斯·里奇(右) Unix版本是由美国电话电报公司(AT&T)进行维护升级的。他们两位是AT&... 阅读全文

Linux IO模型漫谈(1)

2012-05-29 11:20 by 轩脉刃, 3719 阅读, 收藏, 编辑
摘要: 基础知识 Linux将所有外部设备都看做一个文件来进行操作。因此,linux对所有外部设备的操作都可以看做是文件的操作。文件的操作当然需要有个标示描述它,这就是文件描述符(file descriptor)。 linux的IO操作如何形象理解呢? 我们说网络socket的read()是一个IO操作命令,具体流程是这样的: 应用程序调用read命令,通知内核需要做读取数据操作 内核创建一个文件描述符 内核从物理层收到读数据的命令,从网络中获取数据包 数据包传递到TCP/IP层,解析数据包的头 内核将数据包缓存在文件描述符的读缓存区(接受缓存区)中,注意这里的读缓存区是在内核中的 ... 阅读全文

Lua的协同程序

2012-05-28 15:39 by 轩脉刃, 10610 阅读, 收藏, 编辑
摘要: Lua是一种简单,可扩展,可移植及高效的脚本语言。在嵌入式系统,移动设备,web服务器,游戏等方面都能见到它的身影。lua其中最吸引人的一点事它能很方便地与C语言或者其他语言。 这里说的是lua语言中的协同程序(coroute),也有人翻译成为协作程序 基本函数和语法 coroutine就是lua的协同程序 先讲一下coroutine的语法: coroutine.create() 创建coroutine,返回coroutine, 参数是一个函数,当和resume配合使用的时候就唤醒函数调用 coroutine.resume() 重启coroutine,和create配合使用... 阅读全文

nginx模块_使用gdb调试nginx源码

2012-05-10 16:45 by 轩脉刃, 19250 阅读, 收藏, 编辑
摘要: 工欲善其事必先利其器,如何使用调试工具gdb一步步调试nginx是了解nginx的重要手段。 ps:本文的目标人群是像我这样初接触Unix编程的同学,如果有什么地方错误请指正。 熟悉gdb的使用 这里就不说了,谷歌一搜一堆,这里推荐一篇文章:GDB 命令详细解释 请重点看一下step,run,break,list,info,continue命令 下载nginx源码 这里使用nginx-1.0.14 src是源代码,auto文件夹是configure运行时候的各种命令集合 修改config并编译 由于gdb需要gcc的时候加上-g参数,这样生成的文件才能使用gdb调试,因此... 阅读全文