NinGoo@Net --- Just a simple Oracle & MySQL DBA
常用标签:

Blog一周年

昨天收到Dreamhost从信用卡划款的短信,才想起这个Blog开通已经一周年了。时间过得真快,去年的这个时候还在上海,而现在在杭州又呆了三分之二年了。

昨天和d.c.b.a从文三西路到老和山到北高峰,再走回文三西路,好好的舒展了下筋骨。没想到d.c.b.a暴走的本事居然不输于我,佩服佩服。除了暴走,d.c.b.a在一些工具的开发和想法上也让我orz,以后也要多多努力,将经验和知识生成工具和文档,沉淀下来。所谓言之无文,行而不远。做了几年DBA,要是都没有自己的百宝箱,你都不好意思跟人打招呼^_^

d.c.b.a来了杭州,从此又多了个牌友,越来越热闹啦,集团的DBA,估计还有一小半人都是不怎么认识的,下周末(2008.5.24)将举行《第二届中国网络工程师侠客行大会》,大家终于有机会有借口齐聚一下,不容易啊。

编写Perl模块

这两天在用Perl编写一些监控脚本,其实写代码也是一件挺有意思的事情,就是挺废时间的。而且,由于语法不太熟,基本想到一个东西都要先Google一下看怎么实现。Perl的语法相对来说有点晦涩,主要是一些内置变量和函数处理得相当精巧,而过于精致的东西理解起来就有点费力。相对于Shell,Perl在很多方面更加强大高效,比如Hash(关联数组)就非常好用,如果要将不同主机发出来的告警信息发送到不同的责任人,在shell中要做非常多的if或者case判断,修改起来也非常费力,而使用关联数组,则可以轻松实现该功能,代码简洁,配置方便,一个字,爽。

Perl支持以模块对代码进行封装。著名的CPAN上就有非常多好用的Module,可以极大的减轻开发量。一个简单的模块:

package NinGoo;
require Exporter;
use strict;
use warnings;

our @ISA     = qw(Exporter);
our @EXPORT  = qw(fun_public); #要输出给外部调用的函数或者变量,以空格分隔
our @version = 1.0;
sub func_private{
  print "This is a private function";
}

sub func_public{
 print "Hello,world\n";
 func_private();
}

1;
__END__

模块的文件名一般以.pm做后缀,名字和package相同,也就是上面这个Module的名字为NinGoo.pm。然后在普通的.脚本中调用:

#!/usr/bin/perl -w
# creator: NinGoo
# function: test perl module

BEGIN {
    push (@INC,'/home/module');
}

use strict;
use NinGoo;

func_public();

O’Relly出版了一系列Perl的图书,比较著名的大骆驼《Programming Perl》在这里有一个在线中文版本的,可以看看。

2008,老天保佑

update:刚看到新浪新闻说已经有救援部队进入汶川县,但愿能够救助更多的幸存者。最新的消息是汶川映秀镇9000人目前生还2000人。

2008真的是一个多灾多难的年头。年初百年一遇的大雪,然后是藏独的人祸,接着是两辆火车相撞,这次又是全国都有震感的大地震。

已经过去一天了,震中四川汶川县依旧没有任何消息传出来,情况不容乐观。而北川教学楼的倒塌,更是让人觉得揪心,都是些十来岁的孩子啊。不过内地很多教学楼都是危楼。记得我小学开始两年都是在一个祠堂里,土砖房,即使没有地震墙上也是手臂粗的裂缝。而初中教学楼当年就已经从中间裂开成两栋楼了。

春节以来工作上的压力也是越来越大,突然发现已经快一个月没有更新blog了,最近连续的晚间维护已经弄得有点精疲力尽。但愿2008年的困难,到此而止,但愿苦尽能够甘来,老天保佑。

李连杰壹基金淘宝网捐款入口:http://www.taobao.com/onefound/1jijin.php

   各地伤亡汇总(来自新浪) 最后更新时间:5月13日23时36分
全国 汶川地震死亡人数超1.2万人(更新)
四川 死亡12012人,7841人失踪,收治26206人
绵阳市 死亡人数达到7395人 (其中北川县7千人死亡) 被埋18692人 茂县 死亡27人失踪4人
广安 1人死亡 广元 死亡700人
德阳 2648人死亡7695人受伤(更新) 成都市 死亡人数达959人
都江堰市 聚源镇中学死亡人数已增至50余人 资阳市 15人死亡,86人受伤
眉山市 9人死亡,逾3000人受伤 中江县 5人死亡
甘孜州 死亡8人 阿坝州 死亡161人(汶川县伤亡情况仍在统计中)
内江 死亡4人 遂宁 死亡21人
雅安 死亡15人 巴中 死亡8人
南充 死亡15人 乐山 死亡7人
重庆 遇难者已达11人 房屋垮塌317间(更新)
梁平小学 死亡5人,掩埋20多人,100多人受伤
甘肃 甘肃死亡人数升至206人 2179人受伤(更新)
陇南市 173人死亡,2027人受伤
云南 死亡1人
昭通 1人死亡,9人受伤
陕西 103人死亡,893人受伤(更新)
西安 死亡21人,受伤120余人,受灾人口3421人
河南 2人死亡,5人受伤(更新)

不使用SimpleDB的10个理由

自从Amason推出SimpleDB,基于key-value键值对的分布式数据存储系统受到了广泛关注,类似的系统还有ApacheCouchDB,以及最近重磅推出的Google App Engine的基于BigTableDatastore API等,毫无疑问,分布式数据存储系统提供了更好的横向扩展能力,是未来的发展方向。但是现阶段,对比传统的RDBMS,也还有一定的差距和不足。Ryan Park撰文指出了SimpleDB的10大不足之处:

1.数据完整性无法保证

类似SimpleDB的分布式数据存储系统目前还无法实现和RDBMS一样严格的完整性约束,例如唯一性约束和外键约束等,所以数据的完整性需要在应用中来实现。

2.数据一致性无法保证,将导致非常糟糕的用户体验

SimpleDB做写入操作做了优化,调用API时只需要写入数据到一台SimpleDB服务器即返回写入成功的信息,随后数据会被分布复制到更多的SimpleDB服务器上,而在分布完成之前无法查询到最新的数据。所以需要在应用中来处理这种查询延时导致的数据一致性问题。

3.数据聚合将需要更多的额外编码实现

SimpleDB没有实现诸如join,group by,sum/average,sort等,这些操作都需要在应用中来实现。

4.复杂查询和即席查询更难实现

SQL标准已经出现很多年,数据库引擎对于一些复杂的SQL查询做了足够多的优化。SimpleDB对于过于复杂的查询和条件不定的Ad hoc查询没有提供特别的支持,所以SimpleDB还不太适合数据仓库等OLAP应用。

5.数据聚合操作性能比RDBMS差

RDBMS引擎对于join,group by等聚合操作做了很多优化,优化器可以提供根据不同的情况使用诸如hash join,nested loop join等方式来实现。自己在应用中实现这些操作可能效率会不如成熟的RDBMS。当然,这一点有些牵强,在应用中实现有可能更坏也有可能更好,从分布式趋势来看,数据库将倾向于做越来越简单的数据存储,计算更多的应该交给前面的应用服务器来完成。

6.数据的导入导出,备份等操作更慢更繁琐

RDBMS提供了很多成熟的数据迁移和备份工具,这一点刚刚出世的SimpleDB等自然有不足,但这不是问题,只要有需求和时间,就会有工具。

7.SimpleDB并没有想象中的快

Todd Hoff在一篇文章中的数据:从SimpleDB的1000条记录的表中读取10条记录需要141ms,从100000条记录中读取10条记录需要266ms,而从1000000记录中读取10条需要433ms,这比RDBMS明显要慢很多。当然,对于分布式系统,数据量越大才能体现出优势。在小数据量的情况下,集中式比分布式肯定更有优势。

8.RDBMS也可以良好的可扩展性

列举了一些RDBMS的成功应用案例,如Facebook和Livejournal使用MySQL,myspace使用MS SQL Server,Salesforge.com使用Oracle。通过良好的应用设计、数据的垂直分割和水平分割、主从复制和群集等技术,传统的RDBMS也能实现不错的可扩展性,支撑大型的网站系统毫无问题。

9.超级可扩展性是一种过度设计

技术应该以适用为原则,过度设计是一种巨大的浪费。

10.SimpleDB非常有用,但也要用在合适的场合

SimpleDB并不是为了替代OLTP数据库而生的,它的key-value存储结构更加适用于处理半结构化的数据。好的产品也要用的合适的地方才能扬长避短。