Vimer.Me

基础·极致·分享

煮酒编码空望月,疯疯癫癫醉人生


  1. MySql InnoDB事务死锁问题

    这篇博客的文章内容发生于某天晚上服务端日志报了一大堆 Deadlock found when trying to get lock; try restarting transaction,当时通过字面意思果断可以判断出是Sql事务死锁了,与此同时,MySql所在服务器CPU也远超100%,第一直觉是事务死锁导致线程阻塞,请求数瞬间过多导致CPU超100%。

    什么情况下会导致死锁呢?根据以往经验,应该是同时操作了(update/delete等)同一条数据库的记录导致了事务阻塞,由于事务的执行时间过长导致了其他事务的等待,导致CPU攀高。

    死锁这个问题基本上可以说涉及了InnoDB大部分特性:行锁设计,非锁定读,事务,MVCC,聚簇索引 等等,有必要写篇文章好好分析下。

    阅读全文 InnoDB, Mysql, 死锁

  2. 动态分支预测

    说起这个话题也挺有意思,上周五我在公司技术分享的时候,在最末提到一个问题:
    为什么排序过的数据在遍历的时候速度更快 ?
    这里我拿出很久之前在Stack Overflow上火车在行驶的过程中的例子

    阅读全文 cpu, 性能

  3. MongoDB Map-Reduce 原理及提速

    想要优化Map-reduce就要深入理解其原理.
    Map-Reduce基本原理请见下图:

    Map-Reduce基本原理

    阅读全文 Map-Reduce, MongoDB

  4. Node.js异步回调池, Maximum call stack size exceeded error

    这种错误主要发生在js调用栈的限制,如下面递归调用的代码:

    
    (function a() {
        a();
    })();
    
    

    但是在Node.js中除了因为调用栈限制导致这种错误,还会因为异步回调的池满了导致这个问题,正常来说每个异步函数调用的回调函数,基本都是由事件触发回调的,这些事件触发器存在于一个地方,异步回调完成后,这个内存才会被回收.

    阅读全文 Node.js, 异常

  5. Node.js和cpu密集型计算

    
    setTimeout(function () {
        for (var i = 0; i < 10000000000; i++) {
            //CPU密集
        }
    }, 200);
    
    setTimeout(function () {
        console.log('210 ms...');
    }, 210);
    
    

    这个小例子很经典的解释了Node.js遇到密集型CPU的时候问题,这个程序分别在两个时间点触发,虽然在210ms得时候回调内得程序执行非常很快,但是在200ms得时候处理了一个CPU非常密集型的任务就导致整个线程阻塞了.

    阅读全文 Node.js, cpu密集型计算

  6. nohup和SIGHUP信号

    为什么这篇文章会提到nohup呢,主要还是最近在使用了一个叫maptail东西,它可以根据nginx的日志中IP来把IP和具体地址进行转换并显示在中国地图上.这样可以实时的查看接口的调用情况.

    阅读全文 SIGHUP, nohup

  7. Node.js原子性操作MongoDB

    假设基础数据为:

    
    {
        "name" : "cb",
        "data" : 0,
    }
    
    

    有时候为了充分利用多核,会同时开启多个node进程,但是若部分代码若涉及到操作mongodb就会有下面现象.
    “理想情况下”,多个进程执行完后得数据为:

    
    {
        "name" : "cb",
        "data" : 6000,
    }
    
    

    其实不然 !

    阅读全文 MongoDB, Node.js, 原子性

  8. 由 C 中字符串比较引入的问题

    一个同事在Project中写下如下错误代码(为了说明问题, 代码已经简写)

    
    void function(const char* _str) {
        if (_str == "OK") {
    
        }
    }
    
    

    这段代码 错就错在把char*(从堆里分配的)字符串直接 常量字符串进行比较.
    而这位同事不解的拿出下面这个例子对我发出这样的疑问:为什么会这样?

    阅读全文 C, 字符串

  9. MONGODB的BASIC INDEXES 和 COMPOUND INDEXES 研究

    前几天看到一个关于 MongoDB 深入索引的PPT

    MongoDB Indexing: The Details

    仔细的从头看到尾, 里面有个关于Compound Indexes的Range and Equality的讲解,在ppt第129页,重新回顾下这个例子.向一个collection中插入 9 条数据,像下面这样:

    
    > db.good.find()
    { "_id" : ObjectId("4e8d629d8ad8bdf2ed6c1990"), "x" : 1, "y" : "b" }
    { "_id" : ObjectId("4e8d62a38ad8bdf2ed6c1991"), "x" : 3, "y" : "d" }
    { "_id" : ObjectId("4e8d62ad8ad8bdf2ed6c1992"), "x" : 4, "y" : "g" }
    { "_id" : ObjectId("4e8d62b28ad8bdf2ed6c1993"), "x" : 5, "y" : "c" }
    { "_id" : ObjectId("4e8d62ba8ad8bdf2ed6c1994"), "x" : 6, "y" : "a" }
    { "_id" : ObjectId("4e8d62c18ad8bdf2ed6c1995"), "x" : 7, "y" : "e" }
    { "_id" : ObjectId("4e8d62ce8ad8bdf2ed6c1996"), "x" : 8, "y" : "c" }
    { "_id" : ObjectId("4e8d62d38ad8bdf2ed6c1997"), "x" : 9, "y" : "f" }
    { "_id" : ObjectId("4e8d719a6cee6416a5a75a43"), "x" : 5, "y" : "d" }
    
    

    阅读全文 MongoDB, 索引