• 2012-12-19

    SSDB – 支持 zset 的 LevelDB 服务器

    Views: 26176 | No Comments

    Google 开源的 LevelDB 是一个单纯的 key-value 存储的类库, 可以理解为是一个存储引擎, 并不是常见意义的服务器. 你无法通过网络接口来使用它, 只能用 C/C++ 语言才能使用它.

    LevelDB 速度非常快, 是 Google 内部分布式存储系统 Bigtable 的存储引擎的开源版本, 作为分布式系统的一个存储节点(Tablet). LevelDB 的设计思想和 Google 内部的版本部分相同, 但肯定也被隐藏了一些接口和思想, 而这部分很可能是非常重要和关键的.

    Continue reading »

    Posted by ideawu at 2012-12-19 13:48:10 Tags: ,
  • 2012-11-16

    必须放在循环中的pthread_cond_wait

    Views: 11427 | No Comments

    消费者线程(多个):

    // *错误做法*
    lock(my_lock){
        if(wait = 1){
            pthread_cond_wait(cond, my_lock);
        }
        wait = 1;
    }
    

    生产者线程:

    lock(my_lock){
        wait = 0;
        pthread_cond_signal(cond);
    }
    

    由于在 if(wait=1) 之后和 pthread_cond_wait() 在之前, wait 有可能已经被其它消费者线程更改了.

    所以, 必须把 pthread_cond_wait() 放在循环中:

    // 正确做法
    lock(my_lock){
        while(wait = 1){
            pthread_cond_wait(cond, my_lock);
        }
        wait = 1;
    }
    
    Posted by ideawu at 2012-11-16 18:36:55
  • 2012-11-05

    HBase 在 Linux 下安装和配置

    Views: 26673 | No Comments

    1. 下载安装包

    Hbase 官网下载页面下载安装包, 然后

    tar xfz hbase-0.94.2.tar.gz
    cd hbase-0.94.2
    chmod ugo+x ./bin/*.sh
    

    注意, 要修改 bin/ 目录下的脚本的的权限, 不然启动出错.

    2. 配置 hbase-env.sh 和 hbase-default.xml

    两个配置文件中的一个 hbase-env.sh 已经存在于 conf/ 目录下, 但 hbase-default.xml 并不在 conf/ 目录, 需要从 ./src/main/resources/ 目录拷贝
    Continue reading »

    Posted by ideawu at 2012-11-05 12:10:54 Tags: , , ,
  • 2012-10-17

    转: Unix文本编辑器

    Views: 10146 | 3 Comments

    Unix大师听到学徒学习的计算机机房里出来痛苦的哭啼声,他打算要弄清这是怎么回事。

    他发现学徒明显的满脸痛苦,眼泪在眼圈里直打转。“出了什么事?”大师问道。“你哭什么?”

    “Unix系统太难用了。我每天要用四种不同的编辑器才能把学习任务完成,因为它们每种都不能单独的完成这些事情。”

    大师自信的点了点头,问,“如果让你去解决这个大麻烦,你打算怎么做?”

    学生认真的思考了几分钟,表情一下子多云转晴。他兴奋的说,“这个问题的解决方法很显然:我要开发一个有史以来最好的编辑器。这个编辑器具有目前这四种编辑器的所有功能,而且更好用,速度更快。由于有了我的这个新编辑器,世界将会变得更美好。”

    大师突然举起手,照着这个学徒的脑袋上打了一巴掌。大师年迈而且体弱,学徒并没感觉到很痛,但他对发生的事很震惊。“我做错了什么?”他问。

    “愚蠢!”大师说。“你以为我还想再学一种编辑器吗?”

    一下子,学徒被点化了。

    Posted by ideawu at 2012-10-17 14:25:07
  • 2012-09-07

    MySQL命令行按Delete键输出”~”的问题

    Views: 8216 | No Comments

    MySQL 默认用了一个叫 libedit 的东西来替代 libreadline, 如果按 Delete/Home/End 键, 就会输出 "~", 非常不好用. 解决方法很简单, 只要换回 libreadline 就 OK 了. 编译时加上参数:

     --without-readline\
     --without-libedit\
    

    执行 mysql –version 看输出.

    (正确)mysql Ver … using readline 5.1
    (错误)mysql Ver … using EditLine wrapper

    Posted by ideawu at 2012-09-07 12:26:54
  • 2012-03-24

    Linux 核心编程 – fsync, write

    Views: 17353 | 1 Comment

    write

    ssize_t write(int fd, const void *buf, size_t count);

    将数据写到文件中. 注意, 如果文件是保存在硬盘中, write() 函数调用返回之后, 并不表示数据已经写入到硬盘中, 这时如果掉电, 数据可能会丢失.

    fsync

    int fsync(int fd);

    程序调用本函数, 通知内核把数据写到硬盘(file)中. 比如, 你开发一个数据库软件, 就需要这样的函数, 否则掉电或者系统崩溃时便会丢失数据.

    如果你的程序不调用 fsync(), Linux 内核也会自动在"合适"的时候将你的数据真正写入到硬盘(类似调用 fsync), 最长的延时默认是 30 秒.

    阻塞

    阻塞是 IO 的精华所在, 不管是文件 IO 还是网络 IO, 只有真正了理解了 IO 阻塞, 才能做出所谓在高并发高性能软件(服务器).

    当 fsync() 和 write() 同一个 fd 时, write() 必然阻塞. 当系统 IO 非常繁忙时, fsync() 可能会阻塞, 即使系统 IO 不繁忙, fsync() 也会因为数据量大而慢.

    注: 许多 Linux 系统函数如 read(), write() 等, 粗看起来很简单, 也很容易用. 正如所有的事情一样, 要做到精致肯定不简单. 当你脱离初级的学习阶段, 要写真正生产环境的软件时, 这些"简单"的函数就大有门道了. 你需要不断的阅读它们的手册, 了解每一个参数, 每一个返回值, 同时还要阅读和试验在各种条件和环境下这些函数的表现, 这样, 才有可能做出真正的软件.

    Posted by ideawu at 2012-03-24 16:14:19 Tags: ,
|<<<123456789>>>| 5/15 Pages, 86 Results.