2009年7月29日星期三

JAVA中的取整函数

舍掉小数取整:Math.floor(3.5)=3
四舍五入取整:Math.rint(3.5)=4
进位取整:Math.ceil(3.1)=4

甲骨文软件价格大幅调涨 某些产品涨价幅度达40%

甲骨文(Oracle)一年前才调高软件价格20%以上,如今又再度调涨售价,这回某些产品的调涨幅度达40%。

有趣的是,这回大幅调涨价格的不是甲骨文的核心产品,例如产品资料库或应用程序服务软件,而是软件管理工具(administrative tools),用来监控和遵守有关当局的规定。

我很想说这是在敲竹杠,但不得不说这纯粹是精明的商业行动。甲骨文深知数据库软件销售不会永远快速增长,而客户迟早会需要添购额外的管理工具。就商业策略而言,调高非核心软件元件的价格,是比较明智的,既可确保客户持续地采用产品,也可维持主要产品线的现金流源源不断。

不过,这也令人不禁想问几个与甲骨文并购Sun有关的策略问题。具体来说就是,甲骨文将如何订定MySQL及其相关套装产品的价格?现有的工具能不能与MySQL并用,目前使用两种软件的客户会不会被迫购买两套管理工具? MySQL的用户能接受甲骨文调整价格政策吗?

调整价格对软件公司而言是稀松平常的事,但MySQL这类开放源代码软件公司通常会采用简单的定价模式,达到薄利多销的目的。

最大的问题是,甲骨文掌控MySQL对客户而言有没有助益。无庸置疑的是,在一些情况下,客户向单一来源购买产品和取得支持服务,会更方便。不过,很难想像甲骨文积极管理的销售作风,和MySQL纳入销售转换的过程,能配合无间。

附带一提,若你认为GPL与开放源代码授权艰涩难懂,不妨瞄一眼甲骨文的应用程序授权表(Application Licensing Table),乍看下似乎简单明了,但等到你需要用到非阳春型(non-vanilla)安装时便知没那么简单。

RAID

RAID 0又称为Stripe或Striping,它代表了所有RAID级别中最高的存储性能。RAID 0提高存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能

RAID 1又称为Mirror或Mirroring,它的宗旨是最大限度的保证用户数据的可用性和可修复性。 RAID 1的操作方式是把用户写入硬盘的数据百分之百地自动复制到另外一个硬盘上。由于对存储的数据进行百分之百的备份,在所有RAID级别中,RAID 1提供最高的数据安全保障。同样,由于数据的百分之百备份,备份数据占了总存储空间的一半,因而,Mirror的磁盘空间利用率低,存储成本高。

Mirror虽不能提高存储性能,但由于其具有的高数据安全性,使其尤其适用于存放重要数据,如服务器和数据库存储等领域。

RAID 5 是一种存储性能、数据安全和存储成本兼顾的存储解决方案。RAID 5不对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。

RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程度要比Mirror低而磁盘空间利用率要比Mirror高。RAID 5具有和RAID 0相近似的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作稍慢。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较低。

RAID0+1:正如其名字一样RAID 0+1是RAID 0和RAID 1的组合形式,也称为RAID 10。

RAID 0+1是存储性能和数据安全兼顾的方案。它在提供与RAID 1一样的数据安全保障的同时,也提供了与RAID 0近似的存储性能。

由于RAID 0+1也通过数据的100%备份提供数据安全保障,因此RAID 0+1的磁盘空间利用率与RAID 1相同,存储成本高。

RAID 0+1的特点使其特别适用于既有大量数据需要存取,同时又对数据安全性要求严格的领域,如银行、金融、商业超市、仓储库房、各种档案管理等。

RAID是通过磁盘阵列与数据条块化方法相结合, 以提高数据可用率的一种结构.IBM早于1970年就开始研究此项技术 .RAID 可分为RAID级别1到RAID级别6, 通常称为: RAID 0, RAID 1, RAID 2, RAID 3,RAID 4,RAID 5,RAID6.每一个RAID级别都有自己的强项和弱项. “奇偶校验”定义为用户数据的冗余信息, 当硬盘失效时, 可以重新产生数据.

RAID 0: RAID 0 并不是真正的RAID结构, 没有数据冗余. RAID 0 连续地分割数据并并行地读/写于多个磁盘上. 因此具有很高的数据传输率. 但RAID 0在提高性能的同时,并没有提供数据可靠性,如果一个磁盘失效, 将影响整个数据.因此RAID 0 不可应用于需要数据高可用性的关键应用.

RAID 1: RAID 1通过数据镜像实现数据冗余, 在两对分离的磁盘上产生互为备份的数据. RAID 1可以提高读的性能,当原始数据繁忙时, 可直接从镜像拷贝中读取数据.RAID 1是磁盘阵列中费用最高的, 但提供了最高的数据可用率. 当一个磁盘失效, 系统可以自动地交换到镜像磁盘上, 而不需要重组失效的数据.

RAID 2:从概念上讲, RAID 2 同RAID 3类似, 两者都是将数据条块化分布于不同的硬盘上, 条块单位为位或字节。然而RAID 2 使用称为"加重平均纠错码"的编码技术来提供错误检查及恢复。 这种编码技术需要多个磁盘存放检查及恢复信息, 使得RAID 2技术实施更复杂。 因此,在商业环境中很少使用。

RAID 3:不同于RAID 2, RAID 3使用单块磁盘存放奇偶校验信息。 如果一块磁盘失效, 奇偶盘及其他数据盘可以重新产生数据。 如果奇偶盘失效,则不影响数据使用.RAID 3对于大量的连续数据可提供很好的传输率, 但对于随机数据, 奇偶盘会成为写操作的瓶颈。

RAID 4:同RAID 2, RAID 3一样, RAID 4, RAID 5也同样将数据条块化并分布于不同的磁盘上, 但条块单位为块或记录. RAID 4使用一块磁盘作为奇偶校验盘, 每次写操作都需要访问奇偶盘, 成为写操作的瓶颈。 在商业应用中很少使用。

RAID 5:RAID 5没有单独指定的奇偶盘, 而是交叉地存取数据及奇偶校验信息于所有磁盘上。 在RAID5 上, 读/写指针可同时对阵列设备进行操作, 提供了更高的数据流量。 RAID 5更适合于小数据块,随机读写的数据。RAID 3与RAID 5相比, 重要的区别在于RAID 3每进行一次数据传输,需涉及到所有的阵列盘。而对于RAID 5来说, 大部分数据传输只对一块磁盘操作, 可进行并行操作。在RAID 5中有"写损失", 即每一次写操作,将产生四个实际的读/写操作, 其中两次读旧的数据及奇偶信息, 两次写新的数据及奇偶信息。

RAID 6:RAID 6 与RAID 5相比,增加了第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法, 数据的可靠性非常高。 即使两块磁盘同时失效,也不会影响数据的使用。 但需要分配给奇偶校验信息更大的磁盘空间,相对于RAID 5有更大的“写损失”。 RAID 6 的写性能非常差, 较差的性能和复杂的实施使得RAID 6很少使用。

2009年7月25日星期六

PostgreSQL的編碼

安裝完Linux,如果選擇用Webmin來Initial PostgreSQL,此時PostgreSQL編碼為Unicode,之後,建立資料庫時如果沒特別指定資料庫編碼,則資料庫編碼也會是Unicode。

如果要改變PostgreSQL的編碼,例如,想將編碼改為SQL_ASCII,步驟如下:

1.執行以下指令,刪除/var/lib/pgsql/data目錄。

[root@tokyo root]# rm /var/lib/pgsql/data -r -f

2.再執行以下指令。

[root@tokyo root]# su postgres

bash-3.00$ initdb -E SQL_ASCII -D /var/lib/pgsql/data

3.執行Exit指令。

bash-3.00$ exit

備註:底下指令可以檢視所有資料庫編碼

bash-3.00$ psql -l

2009年7月24日星期五

jQuery表单常用操作

1.取下拉菜单选中项的文本


view plaincopy to clipboardprint?
$("#select option[selected]").text();//select和option之间有空格,option为select的子元素
$("#select option:selected").text();//如果写成$("#select").text();会把所有下拉菜单的文本选择出来

view plaincopy to clipboardprint?
$("#select option[selected]").text();//select和option之间有空格,option为select的子元素
$("#select option:selected").text();//如果写成$("#select").text();会把所有下拉菜单的文本选择出来
$("#select option[selected]").text();//select和option之间有空格,option为select的子元素
$("#select option:selected").text();//如果写成$("#select").text();会把所有下拉菜单的文本选择出来

2.获取和设置下拉菜单的值


view plaincopy to clipboardprint?
$("#select").val();//取值
$("#select").val("value");//设置,如果select中有值为value的选项,该选项就会被选中,如果不存在,则select不做任何变动

view plaincopy to clipboardprint?
$("#select").val();//取值
$("#select").val("value");//设置,如果select中有值为value的选项,该选项就会被选中,如果不存在,则select不做任何变动
$("#select").val();//取值
$("#select").val("value");//设置,如果select中有值为value的选项,该选项就会被选中,如果不存在,则select不做任何变动

3.清空下拉菜单


view plaincopy to clipboardprint?
$("#select").empty();
$("#select").html("");

view plaincopy to clipboardprint?
$("#select").empty();
$("#select").html("");
$("#select").empty();
$("#select").html("");

4.给下列菜单添加元素


view plaincopy to clipboardprint?
$('').appendTo($("#select"));
$("#select").append('');

view plaincopy to clipboardprint?
$('').appendTo($("#select"));
$("#select").append('');
$('').appendTo($("#select"));
$("#select").append('');

5.取单选框值


view plaincopy to clipboardprint?
$("#id[checked]").val();

view plaincopy to clipboardprint?
$("#id[checked]").val();
$("#id[checked]").val();

6.单选或复选按钮的选择


view plaincopy to clipboardprint?
$("#id[value=val]").attr("checked",true);//选择
$("#id[value=val]").attr("checked","");//取消选择
$("#id[value=val]").attr("checked",false);//取消选择
$("#id[value=val]").removeAttr("checked");//取消选择

view plaincopy to clipboardprint?
$("#id[value=val]").attr("checked",true);//选择
$("#id[value=val]").attr("checked","");//取消选择
$("#id[value=val]").attr("checked",false);//取消选择
$("#id[value=val]").removeAttr("checked");//取消选择
$("#id[value=val]").attr("checked",true);//选择
$("#id[value=val]").attr("checked","");//取消选择
$("#id[value=val]").attr("checked",false);//取消选择
$("#id[value=val]").removeAttr("checked");//取消选择

7.取复选框值


view plaincopy to clipboardprint?
$("input[type=checkbox][checked]").each(function(){
alert($(this).val());
})
//如果用$("input[type=checkbox][checked]").val(),只会返回第一个被选中的值

view plaincopy to clipboardprint?
$("input[type=checkbox][checked]").each(function(){
alert($(this).val());
})
//如果用$("input[type=checkbox][checked]").val(),只会返回第一个被选中的值
$("input[type=checkbox][checked]").each(function(){
alert($(this).val());
})
//如果用$("input[type=checkbox][checked]").val(),只会返回第一个被选中的值

8.判断单选或复选框是否被选中


view plaincopy to clipboardprint?
if($("#id").attr("checked")){}//判断选中
if($("#id").attr("checked")==true){}//判断选中
if($("#id").attr("checked")==undefined){}//判断未选中

view plaincopy to clipboardprint?
if($("#id").attr("checked")){}//判断选中
if($("#id").attr("checked")==true){}//判断选中
if($("#id").attr("checked")==undefined){}//判断未选中
if($("#id").attr("checked")){}//判断选中
if($("#id").attr("checked")==true){}//判断选中
if($("#id").attr("checked")==undefined){}//判断未选中

9.元素可用不可用


view plaincopy to clipboardprint?
$("#id").attr("disabled",false);//设为可用
$("#id").attr("disabled",true);//设为不可用

view plaincopy to clipboardprint?
$("#id").attr("disabled",false);//设为可用
$("#id").attr("disabled",true);//设为不可用
$("#id").attr("disabled",false);//设为可用
$("#id").attr("disabled",true);//设为不可用

10.判断元素可用不可用


view plaincopy to clipboardprint?
if($("#id").attr("disabled")){}//判断不可用
if($("#id").attr("disabled")==undefined){}//判断可用

2009年7月21日星期二

CSS:鼠标经过时改变背景颜色或图片

CSS:鼠标经过时改变背景颜色或图片
可以用于table的td,也可以用在div上,类似IBM的效果
鼠标经过时改变背景颜色
插入代码:
5istudy.cn

鼠标经过时改变背景图片
插入代码:
5istudy.cn