Life

二月 5th, 2010

Many things happened during the past few days, just like the past year.

Most of those things was the first sense for me.

But I think I can do it better, not for you or he and she, just for myself, I want to do it better.

Some notices:

1. Do things neatly, not sloppily. That’s my real life style.

2. Make a better dress and communication.

3. Listen more, speak less.

4. Have a exact understanding for everything.

As all, life is hard.

Am I tired?

2010

十二月 31st, 2009

今天是2009年的最后一天了,一直都在忙着,也该写些什么来总结总结下这过去的一年。

年初写下的wish list. :)

1、个人问题 :)
2、持续的开发完成手头的几个项目
3、去一个地方旅游
4、提升处世能力与自我调节能力
5、多交几个新的朋友
6、增加看纸质书的量

2009年最大的收获莫过于实现了wish list 1,呵呵,自此不再是一个人在江洲奋斗了。 :)

其它各项也还不错,手头上的项目最终没有完成一个,不过却和潘东一起将蟠龙娱乐中心做了起来,让有一种“无心插柳柳樱”的感觉,也期待这个刚刚出生的孩子一路上成长得很好。

09年去过的地方还真不少:南京、杭州、温州、广州、东莞、苏州,关键是这些地方都还是这辈子第一次去,哈哈。

朋友也交了不少,感觉上海也比之前饱满了。 ^_^

1、CGP项目 :)
2、去一个地方旅游
3、老婆工作可以变得轻松些
4、变得成熟和稳重一些

2010, 我来了。

恭祝大家2010年身体健康、工作顺利、大大发财! :)

最近

十一月 5th, 2009

最近压力有些大,老婆生病了,项目要上线,杂事也一堆…

老婆身体快点好起来吧 :)

好久没有好好学习和看书了,要抽点时间!

批量处理多个表

十月 30th, 2009

xaprb上发现的一个工具,很是有用,记录之.

平时在数据库设计的过程中会设计成单个表为分表,比如说POST表最终为一个POST库,这个库有几百个表,对数据进行切分。

在这种情况下,如果添加或者修改字段或者清空数据时就很麻烦了,之前一直是使用自己的脚本进行处理,而Xaprb开发的这个小工具则刚好可以做这个事,呵,以后不用再为类似的事情操心了。

$ wget http://www.maatkit.org/get/mk-find
$ perl mk-find --exec 'TRUNCATE TABLE %D.%N'

%D表示任意数据库
%N表示任意表

对于单个数据库进行操作则如下:

$ wget http://www.maatkit.org/get/mk-find
$ perl mk-find dbname --exec 'TRUNCATE TABLE %D.%N'

ngx_http_request_t是在编写nginx模块中经常用到的结构体,大多的模块的工作都是基于该结构体的,该结构中的request_body是记录请求的数据主体,大部分情况在POST状态时有数据。实际情况下,如果需要HOOK上行的数据,即在提交给后端的SERVER前基于request_body进行处理,那么nginx现有提供的几个模块的注册位置都读取不到request_body,估计可能很多同学都碰到这个问题,我觉得很有必要加上一个阶段,呵呵。

当然nginx给我们提供了相应的函数来做这个事情,这个函数就是ngx_http_read_client_request_body。可采用如下方式进行调用:

static ngx_int_t
ngx_http_x_up_handler(ngx_http_request_t *r)
{
	ngx_int_t rc;
 
	if (r->method == NGX_HTTP_POST)
	{
		ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0, "post:%V", &r->uri);
		rc = ngx_http_read_client_request_body(r, ngx_http_x_up_body_handler);
 
		if (rc >= NGX_HTTP_SPECIAL_RESPONSE) 
			return rc;
		else
			return NGX_DECLINED;
	}
	else
		ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0, "get:%V", &r->uri);
 
	return NGX_DECLINED;
}
 
 
static void
ngx_http_x_up_body_handler(ngx_http_request_t *r)
{
	if (r->request_body) 
	{
		ngx_chain_t	*cl;
		for (cl = r->request_body->bufs; cl; cl = cl->next) 
		{
			ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0, "post request body:%s", cl->buf->pos);
		}
	}
 
}
 
 
static ngx_int_t
ngx_http_x_up_init(ngx_conf_t *cf)
{
	ngx_http_handler_pt        *h;
	ngx_http_core_main_conf_t  *cmcf;
 
	cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
 
	h = ngx_array_push(&cmcf->phases[NGX_HTTP_ACCESS_PHASE].handlers);
	if (h == NULL) {
		return NGX_ERROR;
	}
 
	*h = ngx_http_x_up_handler;
 
	return NGX_OK;
}

至此,包括header/request_uri/request_body这些HTTP请求中的数据段都能获取了,基于POST的数据写个LB如何? :)