存档

‘C’ 分类的存档

Gearman

2009年11月26日 谭俊青 没有评论

gearman_stack

上面是Gearman的一个角色功能图,它在整个系统体系里面担任中间代理人的作用,负责接收和分配任务并返回结果。这样它能很好的胶合各个子系统从而实现项目目标。

之所以介绍这个,我是想将它用到MySQL的监控管理备份平台上,DB服务器上运行worker daemon连接到管理节点上,这样需要对DB进行动作的时候,只要在管理节点上通过gearman下达任务即可,而且不同的地方可以用最合适的语言去实现,实现开发效率和运行效率的平衡和统一。开发人员能给我们带来这么好的东东,实乃大幸。Gearman可用的地方非常多,它在一定程度上开阔了人的思路,提供了一个相对通用的解决方案。

----------     ----------     ----------     ----------
| Client |     | Client |     | Client |     | Client |
----------     ----------     ----------     ----------
     \             /              \             /
      \           /                \           /
      --------------               --------------
      | Job Server |               | Job Server |
      --------------               --------------
            |                            |
    ----------------------------------------------
    |              |              |              |
----------     ----------     ----------     ----------
| Worker |     | Worker |     | Worker |     | Worker |
----------     ----------     ----------     ----------

Gearman的官方网站在这里

分类: C, MySQL, news / tools 标签:

Innodb表空间page size的选择

2009年9月25日 谭俊青 1 条评论

前段时间看innodb plugin源码的时候,看到有如下一段
include/univ.i

/* The 2-logarithm of UNIV_PAGE_SIZE: */
#define UNIV_PAGE_SIZE_SHIFT    14
/* The universal page size of the database */
#define UNIV_PAGE_SIZE          (1 << UNIV_PAGE_SIZE_SHIFT)

/* Maximum number of parallel threads in a parallelized operation */
#define UNIV_MAX_PARALLELISM    32

尝试将 UNIV_PAGE_SIZE_SHIFT 改成13 (相当于page size为8K),编译通过并可以正常使用。
后来找到Google的MySQL团队发表的一篇文章,文中的介绍 Innodb page size 可以选择 8K、 16K、 32K、 64K。不过因为Innodb每个page都有不小的冗余空间,从空间和内存利用的角度来讲,page size越大越好。但是从checkpoint的角度来讲恰恰相反,page size越小,性能越好(上次演讲的时候我介绍过原理)。所以最后选择多大的page size可以根据实际的业务测试而定。

分类: C, MySQL Innodb 标签:

mylab_sys_exec UDF调用mysql外部系统命令(For linux)

2009年5月13日 谭俊青 没有评论

有时候为了方便,利用event/trigger调用系统外部命令,可因为安全问题,mysql自身并没有提供相关命令,这里提供个调用系统命令的自定义函数mylab_sys_exec

so文件下载:mylab_sys_exec.so ( mysql5.1.34 测试通过)


加载:

CREATE FUNCTION mylab_sys_exec RETURNS INTEGER SONAME "mylab_sys_exec.so";



使用:

SELECT mylab_sys_exec (‘CMD’);



源码:

my_bool mylab_sys_exec_init (UDF_INIT *initid, UDF_ARGS *args, char *message );
void mylab_sys_exec_deinit (UDF_INIT *initid );
int mylab_sys_exec (UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error );

my_bool mylab_sys_exec_init( UDF_INIT *initid, UDF_ARGS *args, char *message )
{
    if(args->arg_count == 1  && args->arg_type[0]==STRING_RESULT)
    {
        return 0;
    } else {
        strcpy( message, "One string type parameter expected")
        return 1;
    }
}

void mylab_sys_exec_deinit ( UDF_INIT *initid ){}

int mylab_sys_exec( UDF_INIT *initid , UDF_ARGS *args , char *is_null , char *error )
{
    return system (args->args[0]);
}

文章链接地址:mylab_sys_exec UDF调用mysql外部系统命令(For linux)

分类: C, MySQL 标签:

Linux C Function 参考手册

2009年4月20日 谭俊青 1 条评论
分类: C 标签: