用mysqlslap进行mysql压力测试

mysqlslap是一个mysql官方提供的压力测试工具,通过模拟多个并发客户端访问mysql来执行测试,使用起来非常的简单。通过mysqlslap –help可以获得可用的选项。
下面我们就来看看一些比较重要的参数:
--defaults-file,配置文件存放位置
–create-schema,测试的schema,MySQL中schema也就是database
-concurrency,并发数
--engines,测试引擎,可以有多个,用分隔符隔开。
--iterations,迭代的实验次数
--socket,socket,文件位置
--debug-info,打印内存和CPU的信息
--only-print,只打印测试语句而不实际执行
--auto-generate-sql,自动产生测试SQL
--auto-generate-sql-load-type,测试SQL的类型。类型有mixed,update,write,key,read。
--number-of-queries,执行的SQL总数量
–number-int-cols,表内int列的数量
--number-char-cols,表内char列的数量
--query=name,使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。
mysqlslap -a -concurrency=50 --number-of-queries 300 -T -hlocalhost -uroot -p123
此处表示自动测试,mysql将自动创建数据库,自动insert以及读取,给出最终的查询结果,其查询结果可能如下:
Benchmark
        Running for engine myisam
        Average number of seconds to run all queries: 0.087 seconds
        Minimum number of seconds to run all queries: 0.087 seconds
        Maximum number of seconds to run all queries: 0.087 seconds
        Number of clients running queries: 200
        Average number of queries per client: 1
你也可以指定自己的SQL语句,使用很简单,这里就不举例了。注意下--(两个下划线)和-(一个下划线)这样的参数形式就可以了。例子以及展示了其用法。

firefox5+卸载顽固扩展

firefox有时候会出现扩展无法卸载或者卸载后重启firefox依然在扩展列表里的情况。一般有如下几种:
1.windows强制安装的。比如.net framework。
2.独立程序为firefox安装的。Httpwatch basic editon。
3.已安装的扩展卸载出错。这种情况我很早前遇到过,不过现在没遇过了。情况是在用nightly版本firefox时通过修改扩展版本号安装扩展后扩展依然不兼容,于是卸载。但是卸载后重启firefox,扩展列表里仍然存在该扩展。并且提示不兼容于xx版或者提示将在重启后卸载。总之就是无法以常规办法卸载掉。
如图所示
2011-07-28_093127.jpg
网上已经有很详细的卸载教程了,参见这里:http://www.firefox.net.cn/forum/viewtopic.php?t=29635
不过此文很繁琐,一看就头疼,我也没看下去。
      然而现在基本上大家的firefox都升级到5了,firefox8都内测了,firefox跟着chrome当起了版本帝。firefox5的结构也做了调整,很多配置文件都是用sqlite来管理,卸载也更方便了。那篇文章自然也就不适用了,下面是最新的简单的方法。
1.打开如下的路径:C:\Documents and Settings\Administrator\Application Data\Mozilla\Firefox\Profiles\kiee3fc5.default,其中
Profiles目录下会有两个文件夹,选择正确的那个。另外一个文件夹里是一些备份数据,文件比较少。
2。使用navicat类的工具打开
kiee3fc5.default目录下的extensions.sqlite文件(其实这是个sqlite数据库文件,写代码的人都知道),查看addon表,看看是否有待删除的扩展,删除此记录。

阅读剩余部分...

转:用php说明char和varchar区别

大家在建表时可能经常会遇到类似char和varchar这类的字段类型选择。

如有以下数据结构:

工号 姓名 部门
———————–
1 张三 财务
2 李四 人事
3 王五 销售
……..

我们定义”姓名”为char(10)(静态)的时简单地用php代码表示:
简单地模拟底层数据存储链表$data
$col_num_len  =1;      //工号长度为1
$col_name_len=10;    //姓名长度为10
$col_unit_len   =4;     //部门长度为4
$col_len=$col_num_len+$col_name_len+$col_unit_len+3;         //表示每笔记录的总长度,包括3个分隔符
实现如下:
$data="1|张三      |财务|2|李四      |人事|3|王五      |销售|...";         //简单地模拟底层数据存储链表

阅读剩余部分...

JS实现图片上传时的本地预览,兼容IE和firefox

   一般如果要实现在上传前预览图片的话,用纯服务器端的语言必定是办不到的,需要先传到服务器上,哪怕是只是服务器上的临时文件,这也是个很麻烦的事情,不过可以用javascript来做这件事。下面的javascript就可以是现在服务器上预览本地图片。不过代码还有一些问题,仅支持IE和firefox。不过我想也不会有多少人愿意去支持chrome,“吃肉么”浏览器一向我行我素,非要自己再弄套标准,谁吃饱了去支持吃肉么啊。明明IE和火狐都正常的代码,这个小不点的chrome浏览器非要跳出来不兼容你的代码。请无视google吧。
     firefox使用了getAsDataURL方法,而IE是用了滤镜。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <body>
        <input type=file name="doc" id="doc" onchange="javascript:setImagePreview();">
<p>
<div id="localImag"><img id="preview" width=-1 height=-1 style="diplay:none" /></div>
</p>
<script>
function setImagePreview() {
    var docObj=document.getElementById("doc");
    var fileName = docObj.value;
    var imgObjPreview=document.getElementById("preview");
        if(docObj.files &&  docObj.files[0]){
            //火狐下,直接设img属性
            imgObjPreview.style.display = 'block';
            imgObjPreview.style.width = '150px';
            imgObjPreview.style.height = '120px';          
            imgObjPreview.src = docObj.files[0].getAsDataURL();
        }else{
            //IE下,使用滤镜
            docObj.select();
            var imgSrc = document.selection.createRange().text;
            var localImagId = document.getElementById("localImag");
            //必须设置初始大小
            localImagId.style.width = "150px";
            localImagId.style.height = "120px";
            //图片异常的捕捉,防止用户修改后缀来伪造图片
            try{
                localImagId.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
                localImagId.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc;
            }catch(e){
                alert("您上传的图片格式不正确,请重新选择!");
                return false;
            }
            imgObjPreview.style.display = 'none';
            document.selection.empty();
        }
        return true;
    }
</script>
</body>
</html>
预览地址:http://aiyooyoo.com/t/imgprew.htm
有需要的可以自行改一下代码。

脱节的国度

你一直问,他们何以如此的丧心病狂,他们却觉得自己已经非常的克制忍让。

你一直问,他们何以如此的颠倒黑白,他们却觉得自己已经非常的公正坦率。

你一直问,他们何以如此的包庇凶手,他们却觉得自己已经非常的愧对炮友。

你一直问,他们何以如此的掩盖真相,他们却觉得自己已经非常的透明开放。

你一直问,他们何以如此的生活腐化,他们却觉得自己已经非常的艰苦朴素。

你一直问,他们何以如此的骄横傲慢,他们却觉得自己已经非常的姿态低下。

 

你觉得自己很委屈,他们也觉得自己很委屈,他们认为,在清政府的统治下,老百姓连电视机都看不上,现在电视机已经走进了千家万户,这是多大的进步。

 

他们觉得,我们建了这个,我们建了那个,你别管过程中发生了什么,也别管这是给谁献礼,至少你用到了吧。你以前从上海到北京火车要一天一夜,现在只要不被雷劈,五个小时就到了,你为何不感激,为何充满了质疑?

 

偶然发生一个安全事故,中央最高领导都已经表示了关心,我们还派人来回答你们记者的问题,原来赔17万,现在赔50万,甚至撤职了一个兄弟,事情都做到这份上了,你们为什么还抓着一些细节不放呢,你们的思想怎么反而就这样不开放呢?你们的大局观都去哪里了呢?为什么要我们谢罪呢,我们又没犯罪,这是发展的代价。迅速处理尸体是我们的惯例,早签字多发奖金,晚签字少拿赔偿,这是我们的兄弟部门在强拆工作中被证明了行之有效的手段。掩埋车厢的确是当时一个糊涂做出的一个决定,况且是上头叫我们这么做的。因为上头觉得任何可能引发的麻烦都是可以就地掩埋的。错就错在大白天就开始施工,洞挖太大,而且没有和宣传部门沟通好,现场的摄影记者也没有全控制住,准备工作比较仓促。这次事故最大的教训就是以后在就地掩埋某些事物的时候还是要考虑到物体的体积和工作的保密。低估了。

 

他们认为,总体来说,这次的救援是成功的,及时的。调度合理,统筹规范,善后满意。唯一的遗憾是在舆论上有点失控,他们觉得这就不是我们的责任了,舆论不归我们管。

 

他们认为,从大的来说,我们举办了奥运会,我们取消了农业税,这些你们不赞美,老是抓住一些细枝末节的东西,这是什么居心。我们本可以在政治上比朝鲜更紧,在经济上比苏丹更穷,在治国上比红色高棉更狠,因为我们拥有比他们更多的军队,但是我们没有那么做,你们不感恩,却要我们谢罪,我们觉得很委屈。这个社会里,有产者,无产者,有权者,无权者,每个人都觉得自己很委屈。一个所有人都觉得委屈的国家,各个阶层都已经互相脱节了,这个庞大的国家各种组成的部分依靠惯性各顾各的滑行着,如果再无改革,脱节事小,脱轨难救。

 

国家为什么不进步,是因为他们中的很多人一直在用毛泽东斯大林时代的他们来衡量自己,所以他们永远觉得自己太委屈了,太开明了,太公正了,太仁慈了,太低姿态了,太不容易了。他们将科技裹着时代向前走的步伐当成了自己主动开放的幻象,于是你越批评他,他越渴望极权,你越搞毛他,他越怀念毛。

 

有一个国家机器朋友对我说,你们就是不知足,你这样的文人,要是搁在四十年前,你就被枪毙了,你说这个时代,是进步了还是退步了。

我说,你们就是不知足,你这样的观点,要是搁在九十年前,早就被人笑死了,你说这个时代,他到底是进步了还是。

refer:http://blog.sina.com.cn/s/blog_4701280b0102drhj.html
谢绝跨省,

让我郁闷到家的groovy

    groovy是一个基于JVM的动态语言,实际上它就是java,只不过java是一个平台,任何语言只要基于JVM的class文件格式,那就你被JVM处理。groovy实际上是把自己的语法通过ASM包翻译成class字节码,所以当然其能百分百兼容java了,对java程序员来说,学习成本就是0.这一点比php好多了,这才是真正的跨平台的体现。
昨天本来想玩玩groovy的,下载下来,搞了半天,
在命令行下运行groovy -v就报一堆错误,形如:
java.lang.SecurityException: Prohibited package name: java.lang
百度了下,是由于包的权限问题,好吧,按照网上的说法修改classpath,去除rt.jar,可死活不顶用,搞了一个小时。
回到家,用了windows的安装版,还是这个问题,搞了两小时,不顶用。
后来再一细看,我以前的JDK的classpath就配置错了,还有就是修改了环境变量,一定要新开个CMD窗口,否则session还是基于当前窗口,是没效的。就这个小问题折腾了两个多小时。终于安装好了,运行groovyconsole,我被雷倒了
2011-07-24_012823.png
尼玛的,你这乱码也太有水平了,连英文和数字都乱码,啥都乱码。。。
我彻底无语了。
按理说,groovy是个很帅的东西,用它来写代码比java很轻松
for(def i=1;i<10;i++){
print i;
}
没了java的繁琐,也多了许多特性,可是groovy的发布总是那么草率,一个乱码把许多人搞得焦头乱额。。
我电脑是WIN7,明天上公司用XP试试。关键是我搜索不到和我类似的问题,别人的截图都是正常的,是我人品问题吗?不过可以肯定的是groovy的编码处理不完美造成的.
----
我悲剧的发现了,在WINXP上是正常的,WIN7就乱码了。。。

网上看了下没人遇到类似的问题,要解决只有重新编译了,不过我不大喜欢ANT,MAVEN等工具,只有等实在闲着没事去搞了,唉

转:用Eclipse调试Node.js代码

node.js是基于Google V8的,而Google V8有一个Eclipse的调试插件,这个插件同样也支持node.js。


1、安装Eclipse debugger for V8


这个,用过Eclipse的应该都知道,不过还是简单说下吧:

1.png选择“Install New Software”

2.png点“Add”

3.pngLocation为: http://chromedevtools.googlecode.com/svn/update/dev/
Name你喜欢,整一个方便你记忆的就好。

点击确定后,在“Work with“选择你刚才添加的站点:

阅读剩余部分...

学好数学很重要-谈CRC32碰撞的概率和可能性

      前段时间跟某大牛叽歪的时候,才被提到我写的一篇文章里提到的CRC32算法有误。今天写代码,恰好需要用到这个函数,想起来了,就又回去看了下。确认了下,原先的文章并没有错误,但是有一处描述是很有问题的。
      原文是这样的,『综合以上的思路,决定采用CRC32来实现。CRC32也是一个哈希算法,和MD5类似,不过它是32位的,故更短一些,速度也更快。它所能表示的范围为40亿,也会产生冲突,但是对以一般应用足够了,这也是个成本很低廉的做法。
这只是我提到的一种简单做法而已。但是我确实是在这里可能误导数学不好的读者。我们知道,CRC32是32位的,MD5是128位(谁说16位、32位,我敲死他),也就是CRC128的演化版。通常我们习惯用MD5来做hash。但是我在此文为了简单和压缩长度,使用了CRC32。容易知道,CRC32发生冲突的概率是1//2^32,即大约40亿分之一。
     这是不是说在实际应用中,我们就可以大胆使用CRC32了呢?因为一般来说,我们所用的数据很少过亿,更别说40亿了。在原文,我是作为短网址算法的引子展开的。就算腾讯那样的规模,也没那么容易超过40亿(腾讯的短网址算法是用在微博里的)。如果你回答,应该是的。那么我断定,你的高数是周公教的。在这里,我们说的40亿分之一的指的是CRC32所拥有的样本空间。在概率论中,尤其要注意至少这样的字眼。CRC32的样本空间是2^-32次方,这并不表明在40亿(2的32次方)的数据中就才可能产生一对碰撞,而是比这大得多。
  假设有1000万组数据,
则第一个数据不碰撞的概率为,1/4000000000
第二个数据不和第一个碰撞的概率是(4000000000-1)/4000000000
以此类推,1000万个数据完全不碰撞的概率是个小的不能再小的数字,反过来,就是有可能碰撞了,即“完全不碰撞”的逆事件。1减去一个小的不能再小的数据,那么就是一个大的不能再大的数据了(和小于1的数比较)。想到了什么?生日悖论!不是吗?
  任意两个数经过CRC32后不碰撞,是一个随机事件。根据期望的线性限制,对模型简化,可以得到,碰撞对的数目,即E(X)=k(k-1)/2n,代入1000万,结果可知。实际上,只需要92682组数据,CRC32就已经有碰撞的可能性了。
   那么为了让1000万组数据碰撞的可能性不大于1/2,也该有多少位呢?如果利用从一个全散列中随机选出的散列函数h,将n个关键字存储到一个大小为m=n^2的那么出现碰撞的概率小于1/2.E(X)=(n,2)*1/n^2<1/2。即N的桶最好承载square(N)的数据,这样保证冲突概率小于50%。
    到这里已经很清楚了,CRC32不是足够用,而是用不成的。原文也提供了另一种思路。
    更多知识请参考概率论。希望你没有被我之前的文章所误导,也希望此文没有误导人。有兴趣的话,可以去看下生日悖论。
   
    Page :
  1. 1
  2. 2
  3. 3