2009年5月15日星期五

数据库查询的分页优化技巧

  分页浏览功能是常见的Web应用功能,对于MySQL数据库来说可以很轻松的使用limit语句实现分页,而对于SQL Server数据库来说,常见的方法是使用数据集本身的游标实现分页,这种方法对于少量数据来说没什么问题,但是对于稍大一点的数据量,例如几十万条数据,则查询速度会降低很多,这里我介绍一种常用的技巧,只要简单的重新构造一下查询SQL语句,就能大幅提高查询性能的方法。

  在分页算法中,影响查询速度的关键因素在于返回数据集的大小,我们先在数据表中设置一个名为id的主键,数值为自增量的整数,然后通过重构查询SQL语句,就可以实现SQL查询的优化,重构的SQL如下所示

 

select top 页大小 *
from table1
where id<=
      (select min (id) from
      (select top ((页码-1)*页大小) id from table1 order by id desc) as T
       )   
order by id desc

 

  下面的JSP演示代码中,intPageSize为页大小,intPage为页码,id为主键,演示了操作一个t_Product表,并加入各类查询条件之后的重构SQL的主要语句,经过实际调试,经过这样简单优化后的SQL查询速度远远高于优化前的查询速度。

 

String sql=" from t_Product where 1=1 and ";
String ProductName = request.getParameter("ProductName");
if (ProductName!=null) sql=sql+"ProductName like '%" + ProductName + "%' and " ;
sql=sql.substring(0,sql.length()-4);  // 去掉尾部的 and 字符串
sql="select top " + String.valueOf(intPageSize) + " *" +sql+" and id <=(select min(id) from (select top " +  String.valueOf(intPage*intPageSize) + " id " + sql + " order by id desc) as T) "; //通过子查询加快速度
sql=sql+" order by id desc ";
 

 

2009年5月13日星期三

社交网站与成人网站的零和游戏

  SNS(Social Networking Services、社会化网络服务,简称“社交网络”)在过去两年间掀起了一轮轮的高潮,发展速度惊人,用户快速增长。值得注意的一个事件是,去年Google统计美国的“Facebook”搜索量已经超过了“Sex”的搜索量,这从另一个方面表明,社交网站已经逐步替代了成人网站,成为美国用户最喜欢上的网站,同时也成为美国企业和学校最痛恨的网站

  在美国,社交网站和成人网站是一个零和游戏,存在着一种规律,当一个访问量增大的时候,另一个就会降低。在2006年,社交网站开始崛起的时候,也正是成人网站衰落的时刻。因为年轻人喜欢用社交网站这种新形式来寻找异性,而成人网站则显得过时且缺乏互动。

  中国其实也是一样的道理,虽然中国没有大型的成人网站,却很早就发展出了一个大型的社交网络。很多人可能并没有意识到腾讯QQ就是一个庞大的社交网络,中国的年轻人同样也沉迷于在QQ上和异性朋友的交流,毕竟青少年学生和孩子的自我控制能力较弱,在沉迷社交网络后,往往将大量的时间都投入到了社交网络上,荒废了时间和学业。

  当前国内的SNS网站普遍不太注重“交友”,而是主要通过网页游戏来获得用户量的增加,这条道路仅仅只是SNS初期发展的权宜之计,后期国内的SNS发展很可能加大异性交友的功能,增强用户之间的交互性,开辟聊天室,甚至推出婚介等形式的平台。

  不过,中国的社交网络同样是一个零和游戏,最终的成功者只有一个。只要腾讯QQ还在继续向前发展,所有其他的SNS网站、微博客网站等社交网络都很难实现类似Facebook和Twitter在美国的辉煌成就。

  以上内容是读比尔·唐瑟尔的《在线为王》的杂感。

  名词解释:“零和游戏”

  “零和游戏”是指:在一项游戏中,游戏者有输有赢,一方所赢正是另一方所输,游戏的总成绩永远为零。

2009年5月11日星期一

Blogspot重定向确认引争议

  Blogger已经使用一种新的技术手段限制用户使用外部FTP服务器发布Blogger,当用户从内部Blogger(blogspot.com域名)切换到自己的外部FTP服务器的时候,Blogger不再直接使用301重定向功能,而是显示一个提示框,让用户确认是否跳转网页,而提示框的语言类似Google搜素中的恶意网站提示,让不明原因的用户不敢点击确认,这导致用户从Blogger切换到自己的FTP服务器,将损失几乎全部的搜索引擎流量和原先的外部链接流量。

  Google的确很想推广自己的Blogger自定义域的功能,但不可否认的是,Blogger的自定义域的确有很多功能上的缺陷,例如用户控制能力较弱,无法修改htaccess文件,无法使用FTP进行文件下载备份,甚至无法FTP上传文件,特别是对于中国用户来说,Blogger自定义域服务的IP地址在中国处于长期封锁中,大部分时间都无法正常访问,这一点就足以使得中国用户不得不使用自己的FTP服务器来发布Blogger,这是很无奈的选择。

Blogspot的重定向确认引争议

  而现在,从Blogspot域名切换到自己的FTP将被Google强制进行限制,这会导致该博客损失大部分原有的流量,为了保持原有的流量,用户不得不放弃自己的FTP而使用Blogger的自定义域,这样,用户的大部分服务都被Google所掌控。从我个人的理解来看,把所有的鸡蛋都放在一个筐子里是很危险行为,用户有必要通过自己掌控的部分服务来分担这种风险。

  对于现有的Blogger用户来说,我建议他们早些切换到自己的域名,不管是Blogger自定义域还是外部FTP,不要过多依赖blogspot,因为使用域名进行切换的时候,只是切换域名IP地址,不会出现上述跳转确认,从而避免了流量的损失。

五个基于Google Earth的小游戏

  Google Earth是互联网巨头Google公司于2005年推出的一款虚拟地球仪软件,它把卫星照片、航空照相和地理信息系统布置在一个地球的三维模型上,使用者可以通过这个软件浏览全球各地的高清晰度卫星图片。自这项服务问世以来,深受广大网友的喜爱,给人们的生活带来了很多方便。Google Earth不仅仅是一个有用的卫星地图软件,由于其开放了Google Maps API,于是产生了很多基于Google Earth的第三方应用,其中有一些是一些有趣的游戏,可以大为加强Google Earth的趣味性,让大家在玩乐之中轻松掌握了Google Earth的使用方法,这里我就介绍一些有趣的基于Google Earth和Google Maps的小游戏,供大家参考。

  1、Google Earth解谜游戏

Google Earth解谜游戏

  Google Earth上有很多未解之谜,也有很多引人入胜的图片,这个游戏的任务是在Google Earth卫星地图上找到某个指定的地点,系统会随机显示一个世界上某个独特景观的卫星图片,并给出一些提示信息,根据这些提示信息,用户可以在卫星地图上去搜索这个地点,挑战自己的地理常识,当用户把经度和纬度移动到该景观附近,并且显示放大比率相同,则算赢得了这次游戏的胜利。

  这个游戏的难度非常大,可以说同时挑战了用户的地理常识和卫星地图查看能力,通常只有卫星图片专家才有可能轻松的玩过这个游戏的每一关。

  Google Earth解谜游戏的地址是:http://www.williamlong.info/google/earth/

  2、Google Earth模拟飞行游戏

Google Earth模拟飞行游戏

  这是Google Earth内置的一个小游戏,打开Google Earth,然后按Ctrl+Alt+A,就会看到一个让你选择两架飞机的对话框,选择一个飞机和机场位置后,就可以进入这个模拟飞行游戏了。游戏完全是在真实的卫星地图上飞行,视角是飞机驾驶舱的视角,和通常的模拟飞行游戏挺像,不过操作起来还是挺困难的,对于网速的要求较高,低速的网络玩起来比较卡。

  3、Google Earth模拟海底潜水艇游戏

Google Earth模拟海底潜水艇游戏

  这个游戏将带我们进入神秘的海底世界,我们可以模拟潜水艇(或者是模拟鲨鱼),在世界各个地区海底进行模拟旅行。目前已经发布了6个地方:加利福尼亚、直布罗陀海峡、希腊、马利亚纳群岛海沟、美国沃尔基海域的深海探险和罗曼西海沟探秘。操作的方法是,点击页面左下角的Run/Pause,就可以开始或者暂停,Speed按钮用来调节浏览速度,使用左右键可以转向,使用上下键控制深度。另外,这个网站也提供了另外一个版本的模拟飞行的游戏。

  Google Earth模拟海底潜水艇游戏的地址:http://www.sea-seek.com/

  4、Google Earth模拟直升飞机游戏

Google Earth模拟直升飞机游戏

  请不要误会,这不是另一个Google Earth的模拟飞行游戏,而是一个有趣的Google Earth查看应用,点击下载这个直升飞机地标,就可以从直升飞机里面观察卫星地图。飞机的窗户都是透明的,所以这时候的Google Earth看上去就像是从直升飞机里面望向窗外一样,这是一个非常酷的显示效果。

  Google Earth模拟直升飞机下载地址:http://bbs.keyhole.com/ubb/download.php?Number=987400

  5、Google Earth的模拟赛车游戏

Google Earth的模拟赛车游戏

  这又是一个基于Google地图的小游戏,可以在Google地图上模拟驾车,在全球各个角落上飙车,我们可以在自己熟悉的城市和熟悉的街道上四处开车。玩家可以指定的城市名称,然后开始模拟驾驶,用户可以选择不同的车型,操作非常简单,四个方向箭头来控制,拐弯有些困难,不是很好操作,车辆也太小,看不太清楚。

  Google Earth的模拟赛车游戏的地址:http://geoquake.jp/en/webgame/DrivingSimulatorGM/

  好了,以上就是我介绍的一些有趣的Google Earth小游戏,如果大家还知道什么其他的Google Earth游戏,请留言告诉我。

2009年5月10日星期日

Google Earth的模拟赛车游戏

  这是一个基于Google地图的小游戏,可以在Google地图上模拟驾车,在全球各个角落上飙车,我们可以在自己熟悉的城市和熟悉的街道上四处开车。

  玩家可以指定城市名称,然后开始模拟驾驶,用户可以选择不同的车型,操作非常简单,四个方向箭头来控制,拐弯有些困难,不是很好操作,车辆也太小,看不太清楚。

  这个游戏是Flash做的,基于利用Google Maps的API,开发起来其实不算难,其实,地图只是作为一个背景,即使不是公路,你都可以畅通无阻地开,游戏显得非常简单,其开发难度可能还不如我的“Google Earth解谜游戏”呢。

  游戏地址:http://geoquake.jp/en/webgame/DrivingSimulatorGM/

  下面是游戏的截图。

Google Earth的模拟赛车游戏

2009年5月9日星期六

Google Earth图片地标出现Google广告

  Google Earth是Google收购的一个非常流行的免费软件,通常免费软件到了Google手里,都会被增加上Google AdSense广告,例如YouTube,现在,Google在Google Earth的一些随机的Panoramio照片中放置显示了AdSense广告。这大概是Google进行的一些前期测试工作,来测试在Google Earth上显示广告的效果和布局,因此只有非常少的部分照片会出现AdSense广告。

  如果广告测试结果正常的话,那么Google可能就会允许其他KML地标提供商在地标中加入AdSense广告代码,就如同AdSense for feeds一样,这将使得提供KML的个人或组织从中得到一定的收益,但可能会降低人们使用Google Earth的用户体验,下面是一个Google Earth的广告例子,Sponsored Links(赞助商链接)下面的内容就是Google的广告。

Google Earth图片上出现Google广告

2009年5月8日星期五

“一声响”电话诈骗的应对方法

  响一声就挂电话的收费也称为电话回拨吸费,这是目前常见的诈骗方法,已经超过短信诈骗居手机诈骗首位。这种诈骗方式通常在半夜时分,手机忽然响起却又立即挂断,如果你回了电话,则瞬间电话费用却被疯狂吸走。

  这种诈骗的方式通常都是用特殊的拨号器以群拨的形式拨打出去,会集中“轰炸”某一号段的所有用户,这些用户会在同一时间段收到同一号码呼叫,由于有些人会出于对业务以及工作的需要,有少部分用户仍然会选择回拨,累计之下,这种低成本的诈骗会获得很大的收入。

  按道理说,电信或者移动运行商是有办法通过技术方法处理的,就像互联网上防范Spam的方法一样,正常用户拨打没有问题,反常用户拨打通过技术手段甄别是人还是机器拨打的,比如正常用户通常不可能十分钟拨打十个电话,如果运行商发现某个用户在十分钟内拨打了十个电话,那在其拨打第十一个电话的时候,通过语音方式提示,要求用户按四个“验证码”数字,如果用户按正确,才进行拨号,否则就中止拨号,通常的“拨号器”是不具备语音识别功能的,因此这个技术手段就可以让现行的所有拨号器无法继续自动拨号。

  这种技术方法的优点是,实现难度很低,对正常用户的干扰很小,通常不会有用户那么频繁的打电话,即时频繁拨号,当系统提示“验证码”的时候,输入正确后依旧可以正常拨号,不会对自己的业务产生任何影响,而诈骗犯的应对手段却非常有限,最主要的是语音识别这个技术难关,电脑自动语音识别技术相当复杂,如果语音加上杂音干扰,很难进行区分和识别,即使有这样的软件,其判别成功率也不会很高,但其成本却不菲,改造拨号器会增加相当大的资金成本。

  如果诈骗者通过雇佣人力来手动拨号,运行商可以根据拨号的频率增加语音“验证码”的长度,这样,就可以极大的提高诈骗者的行骗成本,降低其行骗效率,这种低效高成本的诈骗方法自然就会没人再使用了。

  为什么这么简单有效的防止诈骗的技术方案运营商不采用呢?为什么运营商一直要求用户提高警惕防止诈骗,对于自身应尽的义务却百般推卸呢?据内幕人士透露:这种回拨电话吸费诈骗幕后黑手,不仅仅有声讯台,还有运营商,在利益分成上,运营商占了五成,或许这才是运营商迟迟不通过技术手段屏蔽这种诈骗的原因吧。