`
jimmee
  • 浏览: 539930 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
IO性能对于一个系统的影响是至关重要的。一个系统经过多项优化以后,瓶颈往往落在数据库;而数据库经过多种优化以后,瓶颈最终会落到IO。而IO性能的发展,明显落后于CPU的发展。Memchached也好,NoSql也好,这些流行技术的背后都在直接或者间接地回避IO瓶颈,从而提高系统性能。   IO系统的分层:     三层结构 上图层次比较多,但总的就是三部分。磁盘(存储)、VM(卷管理)和文件系统。专有名词不好理解,打个比方说:磁盘就相当于一块待用的空地;LVM相当于空地上的围墙(把空地划分成多个部分);文件系统则相当于每块空地上建的楼房(决定了有多少房间、房 ...
可参考mysql的官方文档:http://dev.mysql.com/doc/refman/5.7/en/explain-output.html 在分析查询性能时,考虑EXPLAIN关键字同样很管用。EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行数。explain 可以帮助我们分析 select 语句,让我们知道查询效率低下的原因,从而改进我们查询,让查询优化器能够更好的工作。 一、MySQL 查询优化器是如何工作的MySQL 查询优化器有几个目标,但是其中最主要的目标是尽可能地使用索引,并且使用最严格 ...
一、在一个表执行了分别执行了两条语句:a.SELECT ID FROM MNG_ROLE ORDER BY ID; -- 耗时37秒b.SELECT ID FROM MNG_ROLE ORDER BY ID, NAME; -- 耗时0.01秒c.SELECT ID FROM MNG_ROLE; -- 耗时0.22秒二、表结构如下,插入3万条数据,而且REMARK和RESERVER字段都是填满数据:====================================================CREATE TABLE `MNG_ROLE` (`ID` int(10) unsigned N ...
   goto语句可以用于同一个函数内异常处理,不幸的是,goto是本地的,它只能跳到所在函数内部的标号上。为了解决这个限制,C函数库提供了setjmp()和longjmp()函数,它们分别承担非局部标号和goto作用。头文件<setjmp.h>申明了这些函数及同时所需的jmp_buf数据类型。    1.setjmp(jbuf)设置“jump”点,用正确的程序上下文填充jmp_buf对象jbuf。这个上下文包括程序存放位置、栈和框架指针,其它重要的寄存器和内存数据。当初始化完jump的上下文,setjmp()返回0值。    2. 以后调用longjmp(jbuf,r)的效果就是 ...
一、    相关概念的介绍 什么是Makefile?怎么书写Makefile?竟然有工具可以自动生成Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚。   1. Makefile   makefile用来定义整个工程的 ...
curl -O http://mirrors.kernel.org/gnu/m4/m4-1.4.13.tar.gztar -xzvf m4-1.4.13.tar.gzcd m4-1.4.13./configure –prefix=/usr/localmakesudo make install cd ..curl -O http://mirrors.kernel.org/gnu/autoconf/autoconf-2.65.tar.gztar -xzvf autoconf-2.65.tar.gzcd autoconf-2.65./configure –prefix=/usr/localmake ...
JCIP 提到了在 Java 6 中引入了两个新的并发集合类 ConcurrentSkipListMap 和 ConcurrentSkipListSet。其实只要介绍一下 ConcurrentSkipListMap 即可(后面简称为 CSLM),因为我们都知道 JDK 中 Set 是基于 Map 实现的。简而言之,CSLM 是一个并发的、可排序的 Map,因此它可以在多线程环境中弥补 ConcurrentHashMap 不支持排序的功能不足。从名字上就可以看出 CSLM 是基于 SkipList 跳表实现。学过算法的同学应该对跳表不陌生。不过还是要简单说一下跳表。 跳表是一种采用了用空间 ...
hbase:   1. 下载源码 svn co http://svn.apache.org/repos/asf/hbase/trunk hbase   2. 执行 mvn eclipse:eclipse -DskipTests   3. 导入到eclipse   tomcat:   tomcat的源码是利用ant来创建和管理的。先安装ant,再执行ant ide-eclipse,该命令执行成功后,会在tomcat7目录下生产.project和.classpath两个文件,即成为eclipse工程了。这样你就可以将tomcat源码导入eclipse了。
在二叉搜索树(BST)的基础上,要实现一颗平衡树,可以使用2-3树的方式,2-3树的直接实现,相对比较复杂 ,因此算法的研究者们提出了红-黑树的实现方式。   package com.test; public class RedBlackTree<Key extends Comparable<Key>, Value> { private static final boolean RED = true; private static final boolean BLACK = false; private Node root; pr ...
NWR模型把CAP的选择权交给了用户,让用户自己的选择你的CAP中的哪两个。   所谓NWR模型。N代表N个备份,W代表要写入至少W份才认为成功,R表示至少读取R个备份。配置的时候要求W+R > N。 因为W+R > N, 所以 R > N-W 这个是什么意思呢?就是读取的份数一定要比总备份数减去确保写成功的倍数的差值要大。 也就是说,每次读取,都至少读取到一个最新的版本。从而不会读到一份旧数据。当我们需要高可写的环境的时候,我们可以配置W = 1 如果N=3 那么R = 3。 这个时候只要写任何节点成功就认为成功,但是读的时候必须从所有的节点都读出数据。如果我们要求 ...
1. Keyspace Keyspace是一款基于Paxos的开源Key-Value的数据库,底层存储基于BerkelyDB,Keyspace的核心功能是在 BerkelyDB之上添加了一致层,保证每个节点的数据完全一致。Keyspace基于Master-Slave模式,所有的写均有Master承担, 并通过paxos一致传播到slave,读可以根据基本路由到master或slave。因此,当master出现宕机或不可访问时,会存在一套 master的选举机制,在keysapce中成为PaxosLease算法。默认,master拥有Lease的时间是7秒,但只要master没有 crash ...
epoll - I/O event notification facility在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __FD_SETSIZE    1024表示select最多同时监听1024个fd,当然,可以通过修改头文件再重编译内核来扩大这个数目 ...
统一的项目结构 写了不少python项目后, 越来越认识到Python项目结构重要性. 不管项目是否要开源, 是否要提交pypi, 项目结构的一致性带来的好处还有很多: 多人合作开发大家都有个基本的guideline, 别人日后维护也方便, 也容易形成项目开发的best practice. 所以花了写时间, 仔细研究了github上python的 top 10 项目的结构, 项目结构还真不太一样. 比较合我口味的是sandman这个项目. 我做了少许的修改, 主要是将tests package 从sandman package下移到顶层目录. |- LICENSE |- READ ...
1. 模板函数                  模板函数定义的就是一种函数。既然是函数,那么就有输入数据和输出数据。和模板类的概念差不多,模板函数的初衷也是为了在函数操作上抽取共同的特性,屏蔽的是类型的不同和差异。         模板函数的反汇编示例:      #include <stdio.h> #include <stdlib.h> template <typename type> type compare(type a, type b) { return a > b ? a : b; }; in ...
1. 类就可以看作一个struct,类的方法,可以理解为通过函数指针的方式实现的,类对象分配内存时,只分配成员变量的,函数指针并不需要分配额外的内存保存地址。 2. c++中类的构造函数,就是进行内存分配(malloc),调用构造函数 3. c++中类的析构函数,就时回收内存(free) 4. c++是基于栈和全局数据分配内存的,如果是一个方法内创建的对象,就直接在栈上分配内存了。 专门在克隆时使用的构造函数,是构造拷贝函数,原型时“类名(const 类名&)",避免拷贝整个对象,在传递对象时,改为传递指针,同时将构造拷贝函数设置为私有这样做到强制限制。 5. 成 ...
Global site tag (gtag.js) - Google Analytics