珠海金山软件之行[原创]
[ 2009-4-19 23:56 | by 张宴 ]
[文章作者:张宴 本文版本:v1.0 最后修改:2009.04.19 转载请注明原文链接:http://blog.zyan.cc/post/410/]
2009年4月14日(星期二)
下班后,和同事打的到首都国际机场,乘21:10起飞的中国南方航空CZ3734航班飞往珠海。这也是我第一次坐飞机。
波音737穿越着宁静的天空,云端望月的景象,罕见而优美。经过的三个小时的飞行,掠过了大半个中国,飞机降落在珠海三灶机场。
走出飞机,打的前往吉大区的如家快捷酒店,沿途海风扑面,湿气弥漫,与北京的干燥行成鲜明的对比。
2009年4月15日(星期三)
上午10点,我们去了珠海金山软件公司,在“万花谷”会议室跟西山居工作室开了个小会,随后参观了三楼的《剑侠世界》研发团队和四楼的《剑侠情缘网络版3》研发团队,向他们请教了100多人协作开发的项目管理经验。
下午,跟金山网游公司CTO的会议,是我主要关心的议题,以下几项收获也不错:
1、我所设计的“广州电信机房、天津网通机房、北京电信通多线机房”三个核心IDC的系统架构得以通过,只是做了点小调整,将“广州电信机房”换成了“珠海电信机房”,因为金山享有珠海电信在带宽和线路上的特殊待遇。
PS:百度网页搜索前端服务器也分布在三个机房:北京电信机房、北京网通机房、北京长城宽带多线机房。
全国所有电信用户访问 www.baidu.com 将被解析到以下两个VIP:
220.181.6.19 (北京市·电信)
220.181.6.18 (北京市·电信)
全国所有网通用户访问 www.baidu.com 将被解析到以下两个VIP:
202.108.22.5 (北京市·网通)
202.108.22.43 (北京市·网通)
全国铁通、教育网等其他访问 www.baidu.com 将被解析到以下两个VIP:
119.75.213.50 (北京市·长城宽带)
119.75.213.51 (北京市·长城宽带)
2、获批了20台服务器。搭建我三个IDC的架构平台,硬件资源得以满足,剩下要解决的就是这20台服务器尽快到位的问题了。
3、允许了将来购买 Adobe 即将推出的 Flash Media Server 4.0 授权,利用 Flash Player 10 和 RTMFP协议(支持P2P)提供 FLV/MP4(H264) 视频流媒体点播服务。
目前逍遥网《基于开源Flash Server:Red5构建RTMP流媒体播放平台》,采用的是 RTMP 协议,生产环境(剑网3相关视频:http://jx3.xoyo.com/xgxz/video/)平均每个视频播放所消耗的带宽是25KB/秒,100M独享带宽可以支撑500人同时在线观看。将来采用 RTMFP 协议进行 Flash P2P 视频点播服务,将大大地节省带宽。
RTMFP 是 Real‐Time Media Flow Protocol的缩写,是Adobe推出的一种新的通信协议,这种通信协议可以让 Flash 客户端直接和另外一个Flash 客户端之间进行数据通信,也就是常说的P2P的方式进行通信。
RTMFP 将会大大地减少音视频直播、点播、多人在线游戏等应用的网络带宽的消耗,减轻服务器的负担。因为很多数据都是客户端之间直接传输了,无须再经过服务器中转了。RTMFP由于使用了UDP网络协议,所以相对之前的TCP协议在数据传输效率上也会大大提高,这种优势在音视频数据传输方面是非常明显的。
下面的示意图表现了RTMFP和RTMP的不同之处:
2009年4月14日(星期二)
下班后,和同事打的到首都国际机场,乘21:10起飞的中国南方航空CZ3734航班飞往珠海。这也是我第一次坐飞机。
波音737穿越着宁静的天空,云端望月的景象,罕见而优美。经过的三个小时的飞行,掠过了大半个中国,飞机降落在珠海三灶机场。
走出飞机,打的前往吉大区的如家快捷酒店,沿途海风扑面,湿气弥漫,与北京的干燥行成鲜明的对比。
2009年4月15日(星期三)
上午10点,我们去了珠海金山软件公司,在“万花谷”会议室跟西山居工作室开了个小会,随后参观了三楼的《剑侠世界》研发团队和四楼的《剑侠情缘网络版3》研发团队,向他们请教了100多人协作开发的项目管理经验。
下午,跟金山网游公司CTO的会议,是我主要关心的议题,以下几项收获也不错:
1、我所设计的“广州电信机房、天津网通机房、北京电信通多线机房”三个核心IDC的系统架构得以通过,只是做了点小调整,将“广州电信机房”换成了“珠海电信机房”,因为金山享有珠海电信在带宽和线路上的特殊待遇。
PS:百度网页搜索前端服务器也分布在三个机房:北京电信机房、北京网通机房、北京长城宽带多线机房。
全国所有电信用户访问 www.baidu.com 将被解析到以下两个VIP:
220.181.6.19 (北京市·电信)
220.181.6.18 (北京市·电信)
全国所有网通用户访问 www.baidu.com 将被解析到以下两个VIP:
202.108.22.5 (北京市·网通)
202.108.22.43 (北京市·网通)
全国铁通、教育网等其他访问 www.baidu.com 将被解析到以下两个VIP:
119.75.213.50 (北京市·长城宽带)
119.75.213.51 (北京市·长城宽带)
2、获批了20台服务器。搭建我三个IDC的架构平台,硬件资源得以满足,剩下要解决的就是这20台服务器尽快到位的问题了。
3、允许了将来购买 Adobe 即将推出的 Flash Media Server 4.0 授权,利用 Flash Player 10 和 RTMFP协议(支持P2P)提供 FLV/MP4(H264) 视频流媒体点播服务。
目前逍遥网《基于开源Flash Server:Red5构建RTMP流媒体播放平台》,采用的是 RTMP 协议,生产环境(剑网3相关视频:http://jx3.xoyo.com/xgxz/video/)平均每个视频播放所消耗的带宽是25KB/秒,100M独享带宽可以支撑500人同时在线观看。将来采用 RTMFP 协议进行 Flash P2P 视频点播服务,将大大地节省带宽。
RTMFP 是 Real‐Time Media Flow Protocol的缩写,是Adobe推出的一种新的通信协议,这种通信协议可以让 Flash 客户端直接和另外一个Flash 客户端之间进行数据通信,也就是常说的P2P的方式进行通信。
RTMFP 将会大大地减少音视频直播、点播、多人在线游戏等应用的网络带宽的消耗,减轻服务器的负担。因为很多数据都是客户端之间直接传输了,无须再经过服务器中转了。RTMFP由于使用了UDP网络协议,所以相对之前的TCP协议在数据传输效率上也会大大提高,这种优势在音视频数据传输方面是非常明显的。
下面的示意图表现了RTMFP和RTMP的不同之处:
中国移动飞信免费发短信API接口(第三方 Fetion API)[原创]
[ 2009-3-22 10:35 | by 张宴 ]
[文章作者:张宴 本文版本:v1.1 最后修改:2010.08.03 转载请注明原文链接:http://blog.zyan.cc/fetion_api/]
备注:2010年7月底移动飞信修改协议,造成影响的 sms.api.bz 免费发送短信API接口,已于2010年8月3日19:00恢复正常。
飞信是由中国移动通信集团公司推出的一款集商务应用和娱乐功能为一体的,基于手机应用以及与Internet深度互通的即时通讯产品,可免费给好友发送短信。
1、下载中国移动飞信PC客户端软件(http://www.fetion.com.cn/downloads/pc.aspx),并注册开通飞信。注册成为飞信用户,下载飞信PC客户端、使用PC客户端基本功能,不收取费用。
2、通过PC客户端,邀请并添加免费短信接收方的手机号码(仅限中国移动)到您的飞信好友,该手机号需要通过通过PC客户端、或回复短信接受您的邀请;
3、通过 http://sms.api.bz/ 提供的 API 接口,即可免费给飞信好友或给你自己的手机发短信。利用本API接口可进行日程提醒、服务器监控、报警、故障通知或短信自动控制等功能。
飞信免费发短信API接口在线演示页面:
http://sms.api.bz/
https://sms.api.bz/ (HTTPS加密接口)
飞信免费发短信API接口调用方式(通过HTTP访问以下网址、支持GET和POST):
注:短信内容最大长度为180个汉字,超过180个汉字不发送。返回的信息为UTF-8编码的中文文本信息。
2009年5月28日新增:飞信免费发短信API接口调用方式(通过HTTPS加密隧道访问以下网址、支持GET和POST,进一步保证您的密码安全):
注:短信内容最大长度为180个汉字,超过180个汉字不发送。返回的信息为UTF-8编码的中文文本信息。
例1:在Linux命令行下通过curl命令给自己的手机号(假设为13800138000)发送短信(HTTP GET 方式)
例2:在PHP5中通过file_get_contents函数发送短信(HTTP GET 方式)
备注:2010年7月底移动飞信修改协议,造成影响的 sms.api.bz 免费发送短信API接口,已于2010年8月3日19:00恢复正常。
飞信是由中国移动通信集团公司推出的一款集商务应用和娱乐功能为一体的,基于手机应用以及与Internet深度互通的即时通讯产品,可免费给好友发送短信。
1、下载中国移动飞信PC客户端软件(http://www.fetion.com.cn/downloads/pc.aspx),并注册开通飞信。注册成为飞信用户,下载飞信PC客户端、使用PC客户端基本功能,不收取费用。
2、通过PC客户端,邀请并添加免费短信接收方的手机号码(仅限中国移动)到您的飞信好友,该手机号需要通过通过PC客户端、或回复短信接受您的邀请;
3、通过 http://sms.api.bz/ 提供的 API 接口,即可免费给飞信好友或给你自己的手机发短信。利用本API接口可进行日程提醒、服务器监控、报警、故障通知或短信自动控制等功能。
飞信免费发短信API接口在线演示页面:
http://sms.api.bz/
https://sms.api.bz/ (HTTPS加密接口)
飞信免费发短信API接口调用方式(通过HTTP访问以下网址、支持GET和POST):
http://sms.api.bz/fetion.php?username=您的移动飞信登录手机号&password=您的移动飞信登录密码&sendto=接收短信的飞信好友手机号(也可以是你自己的手机号)&message=短信内容
注:短信内容最大长度为180个汉字,超过180个汉字不发送。返回的信息为UTF-8编码的中文文本信息。
2009年5月28日新增:飞信免费发短信API接口调用方式(通过HTTPS加密隧道访问以下网址、支持GET和POST,进一步保证您的密码安全):
https://sms.api.bz/fetion.php?username=您的移动飞信登录手机号&password=您的移动飞信登录密码&sendto=接收短信的飞信好友手机号(也可以是你自己的手机号)&message=短信内容
注:短信内容最大长度为180个汉字,超过180个汉字不发送。返回的信息为UTF-8编码的中文文本信息。
例1:在Linux命令行下通过curl命令给自己的手机号(假设为13800138000)发送短信(HTTP GET 方式)
curl "http://sms.api.bz/fetion.php?username=13800138000&password=123456&sendto=13800138000&message=短信内容"
例2:在PHP5中通过file_get_contents函数发送短信(HTTP GET 方式)
AJAXCDR:利用 Flash 完美解决 JavaScript 和 AJAX 跨域 HTTP POST/GET 表单请求[原创]
[ 2009-3-9 11:54 | by 张宴 ]
[文章+部分代码 作者:张宴 本文版本:v1.0 最后修改:2009.03.09 转载请注明原文链接:http://blog.zyan.cc/ajaxcdr/]
最近的一个项目中,需要通过 JavaScript 提交表单数据到另一个域名下的PHP接口(因为数据较大,需要HTTP POST方式提交),并获取PHP接口的返回值,在页面无刷新、无跳转的情况下,更新div标签内的内容。
浏览器出于安全考虑,是不允许JavaScript代码进行跨域操作。JavaScript 和 AJAX 跨域访问分为两大类,一是本域和子域的交互,二是本域和其他域的交互。
一、本域和子域的交互:www.zyan.cc 和 blog.zyan.cc
二、本域和其他域的交互:blog.zyan.cc 和 api.bz
本域和子域的交互,可以通过iframe设置两个域名document.domain = "zyan.cc",实现统一zyan.cc域下的跨域访问。
本域和其他域的交互,可以通过iframe、代理、JS创建动态脚本等几种方法来实现,这里有篇文章对几种方法作了简要的介绍。
iframe、JS创建动态脚本这两种方法,需要开发者能控制两个域,两端都要编写相应的代码,非常麻烦。在本域服务器上用PHP写个代理中转程序,让本域PHP程序去读取远程其他域的数据再返回给自己,是常用的方法。但是,在本域“前端是CDN或Squid缓存服务器,后端才是PHP应用程序服务器”的系统架构下,穿透CDN或Squid去访问不能被缓存的PHP代理中转程序,效率是很低的。
国外有人尝试用 Flash 做 JavaScript 和 AJAX 跨域访问中转,无疑是一个好方法。JavaScript 将数据提交给本域下的 Flash,通过 Flash 中转去访问其他域的接口,条件只需要其他域的根目录下有一个crossdomain.xml文件,文件中设置允许所有域名或允许本域访问即可。很多网站的API域名都提供了crossdomain.xml文件。
例如:
1、新浪博客的crossdomain.xml文件(http://blog.sina.com.cn/crossdomain.xml)设置了允许所有域名访问;
2、饭否API的crossdomain.xml文件(http://api.fanfou.com/crossdomain.xml)设置了允许所有域名访问;
3、校内网API的crossdomain.xml文件(http://api.xiaonei.com/crossdomain.xml)设置了允许所有域名访问;
4、优酷网的crossdomain.xml文件(http://www.youku.com/crossdomain.xml)设置了允许所有域名访问;
5、土豆网的crossdomain.xml文件(http://www.tudou.com/crossdomain.xml)设置了允许所有域名访问;
6、逍遥视频的crossdomain.xml文件(http://v.xoyo.com/crossdomain.xml)设置了只允许*.xoyo.com域名访问;
7、网易的crossdomain.xml文件(http://www.163.com/crossdomain.xml)设置了只允许tech.163.com、sports.163.com等几个域名访问。
本人在“Cross-domain AJAX using Flash”的基础上,增加了对表单进行智能处理的功能,封装了一个JavaScript包:AJAXCDR。通过 AJAXCDR,即可轻松地解决 JavaScript 和 AJAX 跨域 HTTP POST/GET 表单请求,支持IE、Firefox、谷歌Chrome等多种浏览器。
AJAXCDR 拥有两个文件:ajaxcdr.js 和 ajaxcdr.swf,AJAXCDR 拥有一个 JavaScript 函数 AjaxCrossDomainRequest() 和一个全局变量 AjaxCrossDomainResponse。
一、AJAXCDR 下载:
最近的一个项目中,需要通过 JavaScript 提交表单数据到另一个域名下的PHP接口(因为数据较大,需要HTTP POST方式提交),并获取PHP接口的返回值,在页面无刷新、无跳转的情况下,更新div标签内的内容。
浏览器出于安全考虑,是不允许JavaScript代码进行跨域操作。JavaScript 和 AJAX 跨域访问分为两大类,一是本域和子域的交互,二是本域和其他域的交互。
一、本域和子域的交互:www.zyan.cc 和 blog.zyan.cc
二、本域和其他域的交互:blog.zyan.cc 和 api.bz
本域和子域的交互,可以通过iframe设置两个域名document.domain = "zyan.cc",实现统一zyan.cc域下的跨域访问。
本域和其他域的交互,可以通过iframe、代理、JS创建动态脚本等几种方法来实现,这里有篇文章对几种方法作了简要的介绍。
iframe、JS创建动态脚本这两种方法,需要开发者能控制两个域,两端都要编写相应的代码,非常麻烦。在本域服务器上用PHP写个代理中转程序,让本域PHP程序去读取远程其他域的数据再返回给自己,是常用的方法。但是,在本域“前端是CDN或Squid缓存服务器,后端才是PHP应用程序服务器”的系统架构下,穿透CDN或Squid去访问不能被缓存的PHP代理中转程序,效率是很低的。
国外有人尝试用 Flash 做 JavaScript 和 AJAX 跨域访问中转,无疑是一个好方法。JavaScript 将数据提交给本域下的 Flash,通过 Flash 中转去访问其他域的接口,条件只需要其他域的根目录下有一个crossdomain.xml文件,文件中设置允许所有域名或允许本域访问即可。很多网站的API域名都提供了crossdomain.xml文件。
例如:
1、新浪博客的crossdomain.xml文件(http://blog.sina.com.cn/crossdomain.xml)设置了允许所有域名访问;
2、饭否API的crossdomain.xml文件(http://api.fanfou.com/crossdomain.xml)设置了允许所有域名访问;
3、校内网API的crossdomain.xml文件(http://api.xiaonei.com/crossdomain.xml)设置了允许所有域名访问;
4、优酷网的crossdomain.xml文件(http://www.youku.com/crossdomain.xml)设置了允许所有域名访问;
5、土豆网的crossdomain.xml文件(http://www.tudou.com/crossdomain.xml)设置了允许所有域名访问;
6、逍遥视频的crossdomain.xml文件(http://v.xoyo.com/crossdomain.xml)设置了只允许*.xoyo.com域名访问;
7、网易的crossdomain.xml文件(http://www.163.com/crossdomain.xml)设置了只允许tech.163.com、sports.163.com等几个域名访问。
本人在“Cross-domain AJAX using Flash”的基础上,增加了对表单进行智能处理的功能,封装了一个JavaScript包:AJAXCDR。通过 AJAXCDR,即可轻松地解决 JavaScript 和 AJAX 跨域 HTTP POST/GET 表单请求,支持IE、Firefox、谷歌Chrome等多种浏览器。
AJAXCDR 拥有两个文件:ajaxcdr.js 和 ajaxcdr.swf,AJAXCDR 拥有一个 JavaScript 函数 AjaxCrossDomainRequest() 和一个全局变量 AjaxCrossDomainResponse。
一、AJAXCDR 下载:
我的开源PHP中文分词扩展:PHPCWS 1.0.0[原创]
[ 2009-2-16 23:40 | by 张宴 ]
[文章/程序 作者:张宴 本文版本:v1.3 最后修改:2009.07.06 转载请注明原文链接:http://blog.zyan.cc/phpcws_v100/]
注:最新的分词系统 HTTPCWS 已经发布,用来取代 PHPCWS。
请点击以下网址下载 HTTPCWS:
http://code.google.com/p/httpcws
原来的 PHPCWS 停止更新。
名称:PHPCWS(PHP中文分词扩展)
协议:New BSD License
作者:张宴
网址:http://code.google.com/p/phpcws/
SVN:http://code.google.com/p/phpcws/source/browse/#svn/trunk/phpcws
一、PHPCWS 简介
1、什么是 PHPCWS ?
PHPCWS 是一款开源的PHP中文分词扩展,目前仅支持Linux/Unix系统。
PHPCWS 先使用“ICTCLAS 3.0 共享版中文分词算法”的API进行初次分词处理,再使用自行编写的“逆向最大匹配算法”对分词和进行词语合并处理,并增加标点符号过滤功能,得出分词结果。
ICTCLAS(Institute of Computing Technology, Chinese Lexical Analysis System)是中国科学院计算技术研究所在多年研究工作积累的基础上,基于多层隐马模型研制出的汉语词法分析系统,主要功能包括中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典。ICTCLAS经过五年精心打造,内核升级6次,目前已经升级到了ICTCLAS3.0,分词精度98.45%,各种词典数据压缩后不到3M。ICTCLAS在国内973专家组组织的评测中活动获得了第一名,在第一届国际中文处理研究机构SigHan组织的评测中都获得了多项第一名,是当前世界上最好的汉语词法分析器。
ICTCLAS 3.0 商业版是收费的,而免费提供的 ICTCLAS 3.0 共享版不开源,词库是根据人民日报一个月的语料得出的,很多词语不存在。所以本人对ICTCLAS分词后的结果,再采用逆向最大匹配算法,根据自己补充的一个9万条词语的自定义词库(与ICTCLAS词库中的词语不重复),对ICTCLAS分词结果进行合并处理,输出最终分词结果。
由于 ICTCLAS 3.0 共享版只支持GBK编码,因此,如果是UTF-8编码的字符串,可以先用PHP的iconv函数转换成GBK编码,再用phpcws_split函数进行分词处理,最后转换回UTF-8编码。
2、PHPCWS 中文分词在线演示
演示网址:http://blog.zyan.cc/demo/phpcws/
3、PHPCWS 分词速度及用途
初次使用时,Apache 或 php-cgi(FastCGI) 进程,需要加载一次词库到内存中,需要0.0X秒。58字节的一句话——“2009年2月13日,我编写了一款PHP中文分词扩展:PHPCWS 1.0.0。”,分词速度只需0.0003秒。
PHPCWS 属于《亿级数据的高并发通用搜索引擎架构设计》的一部分,用作“搜索查询接口”的关键字分词处理。在此架构中,Sphinx索引引擎对于CJK(中日韩)语言支持一元切分,假设【反恐行动是国产主视角射击网络游戏】这段文字,Sphinx会将其切成【反 恐 行 动 是 国 产 主 视 角 射 击 网 络 游 戏】,然后对每个字建立反向索引。如果用这句话中包含的字组成一个不存在的词语,例如【恐动】,也会被搜索到,所以搜索时,需要加引号,例如搜索【"反恐行动"】,就能完全匹配连在一起的四个字,不连续的【"恐动"】就不会被搜索到。但是,这样还有一个问题,搜索【"反恐行动游戏"】或【"国产网络游戏"】就会搜索不到。所以,我在搜索层写了个PHP中文分词扩展,搜索“反恐行动游戏”、“国产网络游戏”,会被PHPCWS中文分词函数分别切分为“反恐行动 游戏”、“国产 网络游戏”,这时候,用PHP函数给以空格分隔的词语加上引号,去搜索【"反恐行动" "游戏"】或【"国产" "网络游戏"】,就能搜索到这条记录了。由于PHPCWS位于搜索层,中文分词词库发生增、删、改,只需平滑重启一次Web服务器或php-cgi进程即可,无需重建搜索索引。
根据上述情况,对于那些采用二元交叉切分的搜索引擎,PHPCWS用在前端搜索层对用户输入的搜索关键字、短语进行分词处理,同样适合。PHPCWS开发的目的正在于此,对于短句、小文本中文分词切分,速度非常之快。
4、自定义词库
自定义词库名称为userdict.tch,格式为 Tokyo Cabinet DBM 的 Abstract key-value 内存哈希数据库(key为GBK编码的词语名词,value为词频。目前词频均填1,暂时用不上)。自定义词库的修改在安装步骤中会详细介绍。
二、phpcws 1.0.1 安装步骤
注:最新的分词系统 HTTPCWS 已经发布,用来取代 PHPCWS。
请点击以下网址下载 HTTPCWS:
http://code.google.com/p/httpcws
原来的 PHPCWS 停止更新。
名称:PHPCWS(PHP中文分词扩展)
协议:New BSD License
作者:张宴
网址:http://code.google.com/p/phpcws/
SVN:http://code.google.com/p/phpcws/source/browse/#svn/trunk/phpcws
一、PHPCWS 简介
1、什么是 PHPCWS ?
PHPCWS 是一款开源的PHP中文分词扩展,目前仅支持Linux/Unix系统。
PHPCWS 先使用“ICTCLAS 3.0 共享版中文分词算法”的API进行初次分词处理,再使用自行编写的“逆向最大匹配算法”对分词和进行词语合并处理,并增加标点符号过滤功能,得出分词结果。
ICTCLAS(Institute of Computing Technology, Chinese Lexical Analysis System)是中国科学院计算技术研究所在多年研究工作积累的基础上,基于多层隐马模型研制出的汉语词法分析系统,主要功能包括中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典。ICTCLAS经过五年精心打造,内核升级6次,目前已经升级到了ICTCLAS3.0,分词精度98.45%,各种词典数据压缩后不到3M。ICTCLAS在国内973专家组组织的评测中活动获得了第一名,在第一届国际中文处理研究机构SigHan组织的评测中都获得了多项第一名,是当前世界上最好的汉语词法分析器。
ICTCLAS 3.0 商业版是收费的,而免费提供的 ICTCLAS 3.0 共享版不开源,词库是根据人民日报一个月的语料得出的,很多词语不存在。所以本人对ICTCLAS分词后的结果,再采用逆向最大匹配算法,根据自己补充的一个9万条词语的自定义词库(与ICTCLAS词库中的词语不重复),对ICTCLAS分词结果进行合并处理,输出最终分词结果。
由于 ICTCLAS 3.0 共享版只支持GBK编码,因此,如果是UTF-8编码的字符串,可以先用PHP的iconv函数转换成GBK编码,再用phpcws_split函数进行分词处理,最后转换回UTF-8编码。
2、PHPCWS 中文分词在线演示
演示网址:http://blog.zyan.cc/demo/phpcws/
3、PHPCWS 分词速度及用途
初次使用时,Apache 或 php-cgi(FastCGI) 进程,需要加载一次词库到内存中,需要0.0X秒。58字节的一句话——“2009年2月13日,我编写了一款PHP中文分词扩展:PHPCWS 1.0.0。”,分词速度只需0.0003秒。
PHPCWS 属于《亿级数据的高并发通用搜索引擎架构设计》的一部分,用作“搜索查询接口”的关键字分词处理。在此架构中,Sphinx索引引擎对于CJK(中日韩)语言支持一元切分,假设【反恐行动是国产主视角射击网络游戏】这段文字,Sphinx会将其切成【反 恐 行 动 是 国 产 主 视 角 射 击 网 络 游 戏】,然后对每个字建立反向索引。如果用这句话中包含的字组成一个不存在的词语,例如【恐动】,也会被搜索到,所以搜索时,需要加引号,例如搜索【"反恐行动"】,就能完全匹配连在一起的四个字,不连续的【"恐动"】就不会被搜索到。但是,这样还有一个问题,搜索【"反恐行动游戏"】或【"国产网络游戏"】就会搜索不到。所以,我在搜索层写了个PHP中文分词扩展,搜索“反恐行动游戏”、“国产网络游戏”,会被PHPCWS中文分词函数分别切分为“反恐行动 游戏”、“国产 网络游戏”,这时候,用PHP函数给以空格分隔的词语加上引号,去搜索【"反恐行动" "游戏"】或【"国产" "网络游戏"】,就能搜索到这条记录了。由于PHPCWS位于搜索层,中文分词词库发生增、删、改,只需平滑重启一次Web服务器或php-cgi进程即可,无需重建搜索索引。
根据上述情况,对于那些采用二元交叉切分的搜索引擎,PHPCWS用在前端搜索层对用户输入的搜索关键字、短语进行分词处理,同样适合。PHPCWS开发的目的正在于此,对于短句、小文本中文分词切分,速度非常之快。
4、自定义词库
自定义词库名称为userdict.tch,格式为 Tokyo Cabinet DBM 的 Abstract key-value 内存哈希数据库(key为GBK编码的词语名词,value为词频。目前词频均填1,暂时用不上)。自定义词库的修改在安装步骤中会详细介绍。
二、phpcws 1.0.1 安装步骤
《APMServ 5.2.6》:一键快速搭建Apache+PHP+MySQL+Nginx+Memcached+ASP平台的绿色软件[原创]
[ 2008-10-21 12:01 | by 张宴 ]
2019.12.13
十年已经过去了,坚守的还有谁?
尚未佩妥剑,转眼便江湖。愿历尽千帆,归来仍少年。
APMServ 已改名 PHPTS,支持 Nginx + PHP + MySQL + Memcached + Redis + MongoDB + AI人工智能
【2020年02月14日 PHPTS 1.06 版本发布】
访问 PHPTS 官网了解详情:https://www.phpts.com/
PHPTS 1.06 版本,集成 Nginx 1.17.8、PHP 7.4.2、PHP 7.3.14、PHP 5.6.40、MySQL 8.0.19(x64)、Memcached 1.5.22、Redis 4.0.14(x64)、MongoDB 4.3.3(x64)、phpMyAdmin 5.0.1、Bash 终端,并可通过组件方式下载安装 InfluxDB(时间序列数据库)、HeidiSQL(MySQL客户端管理工具)、Another.Redis.Desktop.Manager(Redis客户端管理工具)。推荐在64位 Windows 系统上安装 PHPTS。
2011.11.02
最近工作非常忙碌,贯穿于10条产品线,每个工作日回家也很晚,博客、微博也上得少。
我也只能抽出一点周末时间去开发 APMServ,几次周末有事、软件上的一些技术问题,超出预期,造成了耽误。
当年开发APMServ的初衷,是那时候我还没有笔记本电脑,为了拷贝到U盘上,带到别的电脑,可以快速配置APM环境。然后一些人也想用,就将它免费共享出来,让想使用的人可以自己去下载。
焦急等待的心情可以理解,但等不到就谩骂的用户,类似的产品很多,建议你们去使用其他的产品。如果让你们每天不工作,去做一件费力不讨好的事,你们会去做吗?
APMServ 6.0的开发没有停止,也许需要一、两个周末,也许需要更长时间。
不想每天来页面看的用户,可以订阅以下邮件列表,APMServ发布时,会发邮件通知:
2012.01.04 进度预览:
[软件作者:张宴 本文版本:v1.1 最后修改:2008.11.06 转载请注明原文链接:http://blog.zyan.cc/apmserv_v526/]
两年后,APMServ再出新版本──APMServ 5.2.6,升级了各集成软件的版本,增加了Nginx、Memcached、WinSCP,以及部分Linux命令的支持。
软件名称:APMServ 5.2.6
软件作者:张宴
授权方式:免费软件
发布日期:2008年10月21日
运行环境:WinNT/Win2000/WinXP/Win2003
文件大小:20.4MB
官方网站:http://apmserv.zyan.cc
讨论群组:http://blog.zyan.cc/apmserv/bbs/
下载地址:
㈠官方下载点:
[国内下载点①→新浪爱问CDN] http://blog.zyan.cc/apmserv/bin/5.2.6/sina/
[国外下载点①→美国微软公司] http://blog.zyan.cc/apmserv/bin/5.2.6/microsoft/
㈡合作下载点:
[华军软件园] [新浪网] [中国站长站] [霏凡软件站] [绿色软件联盟] [绿色下载站] [1001下载乐园] [源码网] [共享世纪]
[IT168下载] [搜狐下载频道] [太平洋下载中心] [木蚂蚁下载] [汉江软件园] [寻源码] [洪越源代码] [中国站长之家]
老版本下载>>>
软件简介:
APMServ 5.2.6 是一款拥有图形界面的快速搭建Apache 2.2.9、PHP 5.2.6、MySQL 5.1.28&4.0.26、Nginx 0.7.19、Memcached 1.2.4、phpMyAdmin 2.11.9.2、OpenSSL、SQLite、ZendOptimizer,以及ASP、CGI、Perl网站服务器平台的绿色软件。无需安装,具有灵活的移动性,将其拷贝到其它目录、分区或别的电脑时,均只需点击APMServ.exe中的启动按钮,即可自动进行相关设置,将Apache和MySQL安装为系统服务并启动。APMServ集合了Apache稳定安全的优点,并拥有跟IIS一样便捷的图形管理界面,同时支持MySQL 5.0 & 4.0两个版本,虚拟主机、虚拟目录、端口更改、SMTP、上传大小限制、自动全局变量、SSL证书制作、缓存性能优化等设置,只需鼠标一点即可完成。
1、注意事项:APMServ程序所在路径不能含有汉字和空格。
2、MySQL默认用户名:root,密码为空
3、MySQL数据库文件存放目录:MySQL5.1\data或MySQL4.0\data
4、网站根目录[HTML,PHP]www\htdocs [ASP]www\asp [CGI,Perl]www\cgi-bin
5、访问本机请用http://127.0.0.1/或https://127.0.0.1/ (如果开启SSL)
6、非默认端口,网址为http://127.0.0.1:端口/或https://127.0.0.1:端口/
7、如果在“扩展功能”中选择使用Memcached,它的端口为:11211
8、APMServ集成了以下软件:
Apache 2.2.9 【HTTP服务器】
Nginx 0.7.19 【HTTP服务器】
NetBox 2.8 Build 4128 【HTTP服务器+ASP脚本解释引擎】
PHP 5.2.6 【PHP脚本解释引擎】
MiniPerl 5.8 【Perl脚本解释器】
Memcached 1.2.4 【key-value内存缓存系统】
MySQL 5.1.28 【MySQL数据库服务器】
MySQL 4.0.26 【MySQL数据库服务器】
phpMyAdmin 2.11.9.2 【MySQL数据库在线管理工具】
eAccelerator 0.9.5.3 【PHP脚本加速引擎】
ZendOptimizer 3.3.3 【PHP脚本加速引擎】
OpenSSL 0.9.8h 【HTTPS(SSL)安全传输协议】
附加组件:
㈠Perl、CGI支持(需下载ActivePerl):
APMServ 5.2.6 附带的是MiniPerl,可以运行简单的Perl、CGI程序。如果运行复杂的Perl、CGI程序,请下载ActivePerl,安装在APMServ所在分区根目录下的usr目录中。假如APMServ所在目录为E:\APMServ5.2.6,则将ActivePerl的安装路径选为E:\usr
ActivePerl 5.8.8.819 for Windows 下载地址:[华军软件园] [中国站长站]
注意事项:
迅雷、Skype、PPLive、BT等软件启动后默认会占用80端口,导致Apache无法启动。解决方法:先关闭这些软件,启动完APMServ之后,再开启这些软件。
已知BUG修正:
1、无法启动Nginx的BUG修正方法
http://www.unixsns.com/space.php?uid=1&do=thread&id=51
使用教程(非官方):
● 用APMServ一键快速搭建Apache+PHP+MySQL+Nginx+Memcached+ASP运行平台
软件截图:
㈠主界面:
十年已经过去了,坚守的还有谁?
尚未佩妥剑,转眼便江湖。愿历尽千帆,归来仍少年。
APMServ 已改名 PHPTS,支持 Nginx + PHP + MySQL + Memcached + Redis + MongoDB + AI人工智能
【2020年02月14日 PHPTS 1.06 版本发布】
访问 PHPTS 官网了解详情:https://www.phpts.com/
PHPTS 1.06 版本,集成 Nginx 1.17.8、PHP 7.4.2、PHP 7.3.14、PHP 5.6.40、MySQL 8.0.19(x64)、Memcached 1.5.22、Redis 4.0.14(x64)、MongoDB 4.3.3(x64)、phpMyAdmin 5.0.1、Bash 终端,并可通过组件方式下载安装 InfluxDB(时间序列数据库)、HeidiSQL(MySQL客户端管理工具)、Another.Redis.Desktop.Manager(Redis客户端管理工具)。推荐在64位 Windows 系统上安装 PHPTS。
2011.11.02
最近工作非常忙碌,贯穿于10条产品线,每个工作日回家也很晚,博客、微博也上得少。
我也只能抽出一点周末时间去开发 APMServ,几次周末有事、软件上的一些技术问题,超出预期,造成了耽误。
当年开发APMServ的初衷,是那时候我还没有笔记本电脑,为了拷贝到U盘上,带到别的电脑,可以快速配置APM环境。然后一些人也想用,就将它免费共享出来,让想使用的人可以自己去下载。
焦急等待的心情可以理解,但等不到就谩骂的用户,类似的产品很多,建议你们去使用其他的产品。如果让你们每天不工作,去做一件费力不讨好的事,你们会去做吗?
APMServ 6.0的开发没有停止,也许需要一、两个周末,也许需要更长时间。
不想每天来页面看的用户,可以订阅以下邮件列表,APMServ发布时,会发邮件通知:
2012.01.04 进度预览:
[软件作者:张宴 本文版本:v1.1 最后修改:2008.11.06 转载请注明原文链接:http://blog.zyan.cc/apmserv_v526/]
两年后,APMServ再出新版本──APMServ 5.2.6,升级了各集成软件的版本,增加了Nginx、Memcached、WinSCP,以及部分Linux命令的支持。
软件名称:APMServ 5.2.6
软件作者:张宴
授权方式:免费软件
发布日期:2008年10月21日
运行环境:WinNT/Win2000/WinXP/Win2003
文件大小:20.4MB
官方网站:http://apmserv.zyan.cc
讨论群组:http://blog.zyan.cc/apmserv/bbs/
下载地址:
㈠官方下载点:
[国内下载点①→新浪爱问CDN] http://blog.zyan.cc/apmserv/bin/5.2.6/sina/
[国外下载点①→美国微软公司] http://blog.zyan.cc/apmserv/bin/5.2.6/microsoft/
㈡合作下载点:
[华军软件园] [新浪网] [中国站长站] [霏凡软件站] [绿色软件联盟] [绿色下载站] [1001下载乐园] [源码网] [共享世纪]
[IT168下载] [搜狐下载频道] [太平洋下载中心] [木蚂蚁下载] [汉江软件园] [寻源码] [洪越源代码] [中国站长之家]
老版本下载>>>
软件简介:
APMServ 5.2.6 是一款拥有图形界面的快速搭建Apache 2.2.9、PHP 5.2.6、MySQL 5.1.28&4.0.26、Nginx 0.7.19、Memcached 1.2.4、phpMyAdmin 2.11.9.2、OpenSSL、SQLite、ZendOptimizer,以及ASP、CGI、Perl网站服务器平台的绿色软件。无需安装,具有灵活的移动性,将其拷贝到其它目录、分区或别的电脑时,均只需点击APMServ.exe中的启动按钮,即可自动进行相关设置,将Apache和MySQL安装为系统服务并启动。APMServ集合了Apache稳定安全的优点,并拥有跟IIS一样便捷的图形管理界面,同时支持MySQL 5.0 & 4.0两个版本,虚拟主机、虚拟目录、端口更改、SMTP、上传大小限制、自动全局变量、SSL证书制作、缓存性能优化等设置,只需鼠标一点即可完成。
1、注意事项:APMServ程序所在路径不能含有汉字和空格。
2、MySQL默认用户名:root,密码为空
3、MySQL数据库文件存放目录:MySQL5.1\data或MySQL4.0\data
4、网站根目录[HTML,PHP]www\htdocs [ASP]www\asp [CGI,Perl]www\cgi-bin
5、访问本机请用http://127.0.0.1/或https://127.0.0.1/ (如果开启SSL)
6、非默认端口,网址为http://127.0.0.1:端口/或https://127.0.0.1:端口/
7、如果在“扩展功能”中选择使用Memcached,它的端口为:11211
8、APMServ集成了以下软件:
Apache 2.2.9 【HTTP服务器】
Nginx 0.7.19 【HTTP服务器】
NetBox 2.8 Build 4128 【HTTP服务器+ASP脚本解释引擎】
PHP 5.2.6 【PHP脚本解释引擎】
MiniPerl 5.8 【Perl脚本解释器】
Memcached 1.2.4 【key-value内存缓存系统】
MySQL 5.1.28 【MySQL数据库服务器】
MySQL 4.0.26 【MySQL数据库服务器】
phpMyAdmin 2.11.9.2 【MySQL数据库在线管理工具】
eAccelerator 0.9.5.3 【PHP脚本加速引擎】
ZendOptimizer 3.3.3 【PHP脚本加速引擎】
OpenSSL 0.9.8h 【HTTPS(SSL)安全传输协议】
附加组件:
㈠Perl、CGI支持(需下载ActivePerl):
APMServ 5.2.6 附带的是MiniPerl,可以运行简单的Perl、CGI程序。如果运行复杂的Perl、CGI程序,请下载ActivePerl,安装在APMServ所在分区根目录下的usr目录中。假如APMServ所在目录为E:\APMServ5.2.6,则将ActivePerl的安装路径选为E:\usr
ActivePerl 5.8.8.819 for Windows 下载地址:[华军软件园] [中国站长站]
注意事项:
迅雷、Skype、PPLive、BT等软件启动后默认会占用80端口,导致Apache无法启动。解决方法:先关闭这些软件,启动完APMServ之后,再开启这些软件。
已知BUG修正:
1、无法启动Nginx的BUG修正方法
http://www.unixsns.com/space.php?uid=1&do=thread&id=51
使用教程(非官方):
● 用APMServ一键快速搭建Apache+PHP+MySQL+Nginx+Memcached+ASP运行平台
软件截图:
㈠主界面:
MySQL中文全文索引插件 mysqlcft 1.0.0 安装使用文档[原创]
[ 2008-7-1 22:57 | by 张宴 ]
[文章+程序 作者:张宴 本文版本:v1.0 最后修改:2008.07.01 转载请注明原文链接:http://blog.zyan.cc/post/356/]
MySQL在高并发连接、数据库记录数较多的情况下,SELECT ... WHERE ... LIKE '%...%'的全文搜索方式不仅效率差,而且以通配符%和_开头作查询时,使用不到索引,需要全表扫描,对数据库的压力也很大。MySQL针对这一问题提供了一种全文索引解决方案,这不仅仅提高了性能和效率(因为MySQL对这些字段做了索引来优化搜索),而且实现了更高质量的搜索。但是,至今为止,MySQL对中文全文索引无法正确支持。
中文与西方文字如英文的一个重要区别在于,西方文字以单词为单位,单词与单词之间以空格分隔。而中文以字为单位,词由一个或多个字组成,词与词之间没有空格分隔。当试图在一个含有中文字符的字段中使用全文搜索时,不会得到正确的结果,原因在于中文中没有像英文空格那样对词定界,不能以空格作为分割,对中文词语进行索引。
引用《MySQL 5.1参考手册》中的一段话:
国内已有的MySQL中文全文索引解决方案有两个:一是海量科技的MySQL5.0.37--LinuxX86-Chinese+,二是hightman开发的mysql-5.1.11-ft-hightman,两者都是基于中文分词技术,对中文语句进行拆分。但是,两者都有弊端,一是不支持64位操作系统;二是对修改了MySQL源码,只支持某一MySQL版本,不便于跟进新版本;三是词库不能做到很大很全,对于专业性质较强的数据库内容(例如搜索“颐和园路东口”、“清华东路西口”等公交站点,“莱镇香格里”、“碧海云天”等楼盘名称),基于中文分词的全文索引经常搜索不出来任何内容,即使添加分词词库,也不会很全面。
由于精准全文查询的需要,我借鉴了二元交叉切分算法的思想,用自创的“三字节交叉切分算法”,写出了这款“MySQL中文全文索引插件──mysqlcft 1.0.0”。由于开发时间仓促,难免存在未发现的问题,这将后续的版本中不断完善。对于百万条记录的MySQL表进行全文检索,mysqlcft已经够用。
Mysqlcft 网址:http://code.google.com/p/mysqlcft/
Mysqlcft 作者:张宴
一、MySQL中文全文索引插件mysqlcft的特点:
1、优点:
①、精准度很高:采用自创的“三字节交叉切分算法”,对中文语句进行分割,无中文分词词库,搜索精准度远比中文分词算法高,能达到LIKE '%...%"的准确率。
②、查询速度快:查询速度比LIKE '%...%"搜索快3~50倍,文章末尾有测试结果;
③、标准插件式:以MySQL 5.1全文索引的标准插件形式开发,不修改MySQL源代码,不影响MySQL的其他功能,可快速跟进MySQL新版本;
④、支持版本多:支持所有的MySQL 5.1 Release Candidate版本,即MySQL 5.1.22 RC~最新的MySQL 5.1.25 RC;
⑤、支持字符集:支持包括GBK、GB2312、UTF-8、Latin1、BIG5在内的MySQL字符集(其他字符集没有测试过);
⑥、系统兼容好:具有i386和x86_64两个版本,支持32位(i386)和64位(x86_64)CPU及Linux系统;
⑦、适合分布式:非常适合MySQL Slave分布式系统架构,无词库维护成本,不存在词库同步问题。
2、缺点:
①、mysqlcft中文全文索引只适用于MyISAM表,因为MySQL只支持对MyISAM表建立FULLTEXT索引;
②、MySQL不能静态编译安装,否则无法安装mysqlcft插件;
③、基于“三字节交叉切分算法”的索引文件会比海量、ft-hightman等基于“中文分词算法”的索引文件稍大,但不是大很多。根据我的测试,mysqlcft全文索引的.MYI索引文件是.MYD数据文件的2~5倍。
二、mysqlcft的核心思想──“三字节交叉切分算法”
注:本文以0~7数字序号代表“英文”、“数字”和“半个汉字”,以便说明。
1、按三字节对中文语句进行切分,建立全文索引:
例如:“全文索引”或“1台x光机”四个字会被交叉分拆为6份,建立反向索引:
012 123 234 345 456 567
2、按三字节对搜索的关键字进行切分,在全文索引中找出对应信息:
例①:搜索关键字“文索”,用数字序号表示就是“2~5”,那么它将被切分成:
234 345
这样,就与全文索引对上了。
例②:搜索关键字“x光机”,用数字序号表示就是“3~7”,那么它将被切分成:
345 456 567
这样,也与全文索引对上了。
例③:搜索关键字“1台 光机”,用数字序号表示就是“0~2”和“4~7”,那么它将被切分成:
012 456 567
这样,多关键字搜索也与全文索引对上了。
MySQL在高并发连接、数据库记录数较多的情况下,SELECT ... WHERE ... LIKE '%...%'的全文搜索方式不仅效率差,而且以通配符%和_开头作查询时,使用不到索引,需要全表扫描,对数据库的压力也很大。MySQL针对这一问题提供了一种全文索引解决方案,这不仅仅提高了性能和效率(因为MySQL对这些字段做了索引来优化搜索),而且实现了更高质量的搜索。但是,至今为止,MySQL对中文全文索引无法正确支持。
中文与西方文字如英文的一个重要区别在于,西方文字以单词为单位,单词与单词之间以空格分隔。而中文以字为单位,词由一个或多个字组成,词与词之间没有空格分隔。当试图在一个含有中文字符的字段中使用全文搜索时,不会得到正确的结果,原因在于中文中没有像英文空格那样对词定界,不能以空格作为分割,对中文词语进行索引。
引用《MySQL 5.1参考手册》中的一段话:
引用
12.7. 全文搜索功能(http://dev.mysql.com/doc/refman/5.1/zh/functions.html)
● MySQL支持全文索引和搜索功能。MySQL中的全文索引类型FULLTEXT的索引。FULLTEXT 索引仅可用于 MyISAM 表;他们可以从CHAR、 VARCHAR或TEXT列中作为CREATE TABLE语句的一部分被创建,或是随后使用ALTER TABLE 或 CREATE INDEX被添加。对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,然后创建索引, 其速度比把资料输入现有FULLTEXT索引的速度更为快。
● FULLTEXT分析程序会通过寻找某些分隔符来确定单词的起始位置和结束位置,例如' ' (间隔符号)、 , (逗号)以及 . (句号 )。假如单词没有被分隔符分开,(例如在中文里 ), 则 FULLTEXT 分析程序不能确定一个词的起始位置和结束位置。为了能够在这样的语言中向FULLTEXT 索引添加单词或其它编入索引的术语,你必须对它们进行预处理,使其被一些诸如"之类的任意分隔符分隔开。
● 诸如汉语和日语这样的表意语言没有自定界符。因此, FULLTEXT分析程序不能确定在这些或其它的这类语言中词的起始和结束的位置。
● MySQL支持全文索引和搜索功能。MySQL中的全文索引类型FULLTEXT的索引。FULLTEXT 索引仅可用于 MyISAM 表;他们可以从CHAR、 VARCHAR或TEXT列中作为CREATE TABLE语句的一部分被创建,或是随后使用ALTER TABLE 或 CREATE INDEX被添加。对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,然后创建索引, 其速度比把资料输入现有FULLTEXT索引的速度更为快。
● FULLTEXT分析程序会通过寻找某些分隔符来确定单词的起始位置和结束位置,例如' ' (间隔符号)、 , (逗号)以及 . (句号 )。假如单词没有被分隔符分开,(例如在中文里 ), 则 FULLTEXT 分析程序不能确定一个词的起始位置和结束位置。为了能够在这样的语言中向FULLTEXT 索引添加单词或其它编入索引的术语,你必须对它们进行预处理,使其被一些诸如"之类的任意分隔符分隔开。
● 诸如汉语和日语这样的表意语言没有自定界符。因此, FULLTEXT分析程序不能确定在这些或其它的这类语言中词的起始和结束的位置。
国内已有的MySQL中文全文索引解决方案有两个:一是海量科技的MySQL5.0.37--LinuxX86-Chinese+,二是hightman开发的mysql-5.1.11-ft-hightman,两者都是基于中文分词技术,对中文语句进行拆分。但是,两者都有弊端,一是不支持64位操作系统;二是对修改了MySQL源码,只支持某一MySQL版本,不便于跟进新版本;三是词库不能做到很大很全,对于专业性质较强的数据库内容(例如搜索“颐和园路东口”、“清华东路西口”等公交站点,“莱镇香格里”、“碧海云天”等楼盘名称),基于中文分词的全文索引经常搜索不出来任何内容,即使添加分词词库,也不会很全面。
由于精准全文查询的需要,我借鉴了二元交叉切分算法的思想,用自创的“三字节交叉切分算法”,写出了这款“MySQL中文全文索引插件──mysqlcft 1.0.0”。由于开发时间仓促,难免存在未发现的问题,这将后续的版本中不断完善。对于百万条记录的MySQL表进行全文检索,mysqlcft已经够用。
Mysqlcft 网址:http://code.google.com/p/mysqlcft/
Mysqlcft 作者:张宴
一、MySQL中文全文索引插件mysqlcft的特点:
1、优点:
①、精准度很高:采用自创的“三字节交叉切分算法”,对中文语句进行分割,无中文分词词库,搜索精准度远比中文分词算法高,能达到LIKE '%...%"的准确率。
②、查询速度快:查询速度比LIKE '%...%"搜索快3~50倍,文章末尾有测试结果;
③、标准插件式:以MySQL 5.1全文索引的标准插件形式开发,不修改MySQL源代码,不影响MySQL的其他功能,可快速跟进MySQL新版本;
④、支持版本多:支持所有的MySQL 5.1 Release Candidate版本,即MySQL 5.1.22 RC~最新的MySQL 5.1.25 RC;
⑤、支持字符集:支持包括GBK、GB2312、UTF-8、Latin1、BIG5在内的MySQL字符集(其他字符集没有测试过);
⑥、系统兼容好:具有i386和x86_64两个版本,支持32位(i386)和64位(x86_64)CPU及Linux系统;
⑦、适合分布式:非常适合MySQL Slave分布式系统架构,无词库维护成本,不存在词库同步问题。
2、缺点:
①、mysqlcft中文全文索引只适用于MyISAM表,因为MySQL只支持对MyISAM表建立FULLTEXT索引;
②、MySQL不能静态编译安装,否则无法安装mysqlcft插件;
③、基于“三字节交叉切分算法”的索引文件会比海量、ft-hightman等基于“中文分词算法”的索引文件稍大,但不是大很多。根据我的测试,mysqlcft全文索引的.MYI索引文件是.MYD数据文件的2~5倍。
二、mysqlcft的核心思想──“三字节交叉切分算法”
注:本文以0~7数字序号代表“英文”、“数字”和“半个汉字”,以便说明。
1、按三字节对中文语句进行切分,建立全文索引:
例如:“全文索引”或“1台x光机”四个字会被交叉分拆为6份,建立反向索引:
012 123 234 345 456 567
2、按三字节对搜索的关键字进行切分,在全文索引中找出对应信息:
例①:搜索关键字“文索”,用数字序号表示就是“2~5”,那么它将被切分成:
234 345
这样,就与全文索引对上了。
例②:搜索关键字“x光机”,用数字序号表示就是“3~7”,那么它将被切分成:
345 456 567
这样,也与全文索引对上了。
例③:搜索关键字“1台 光机”,用数字序号表示就是“0~2”和“4~7”,那么它将被切分成:
012 456 567
这样,多关键字搜索也与全文索引对上了。
利用NetScaler和自行编写的健康检查脚本,完美解决多台MySQL Slave数据库的负载均衡[原创]
[ 2008-5-29 23:21 | by 张宴 ]
[文章作者:张宴 本文版本:v1.1 最后修改:2008.07.17 转载请注明出自:http://blog.zyan.cc]
Citrix NetScaler是一款不错的4-7层硬件负载均衡交换机,市场占有率仅次于F5 BIG-IP,位居第二。NetScaler 8.0是美国思杰系统有限公司(Citrix Systems, Inc)正式推出的最新版本NetScaler产品系列。
从我的实际测试来看,NetScaler 8.0在七层负载均衡方面,性能和功能都要比F5 BIG-IP强。
NetScaler 8.0的负载均衡监控中,可以对MySQL数据库进行健康检查,而F5 BIG-IP目前只支持对Oracle和Microsoft SQL Server数据库的健康检查。
但是,NetScaler 8.0自带的MySQL健康检查脚本(nsmysql.pl)并不完善,它只能检查一条SQL语句执行是否出错,并不能检查MySQL主从结构中的MySQL Slave数据库同步是否正常、表有无损坏、同步延迟是否过大、是否出现错误、非sleeping状态的连程数是否过高等情况。于是,我根据自己的需要,为NetScaler 8.0写了一个MySQL Slave数据库负载均衡健康检查脚本(nsmysql-slave.pl),实现了上述需求。
有了“nsmysql-slave.pl”做健康检查,利用NetScaler的VIP(虚拟IP),就可以完美实现多台MySQL Slave数据库的负载均衡了。当一台MySQL Slave数据库出现不同步、表损坏、同步延迟过大(本脚本中默认设置的落后MySQL主库600秒视为延迟,可根据具体应用修改)、活动连程数太高(本脚本中默认设置的是大于200视为连程数太高,可根据具体应用修改)等情况,“nsmysql-slave.pl”就会自动将其检查出来,并告知NetScaler,NetScaler会将该数据库标识为宕机,从而不将用户的查询请求传送到这台发生故障的数据库上。故障一旦修复,“nsmysql-slave.pl”会自动告知NetScaler,该数据库已经可以使用。
“nsmysql-slave.pl”源代码如下:
Citrix NetScaler是一款不错的4-7层硬件负载均衡交换机,市场占有率仅次于F5 BIG-IP,位居第二。NetScaler 8.0是美国思杰系统有限公司(Citrix Systems, Inc)正式推出的最新版本NetScaler产品系列。
从我的实际测试来看,NetScaler 8.0在七层负载均衡方面,性能和功能都要比F5 BIG-IP强。
NetScaler 8.0的负载均衡监控中,可以对MySQL数据库进行健康检查,而F5 BIG-IP目前只支持对Oracle和Microsoft SQL Server数据库的健康检查。
但是,NetScaler 8.0自带的MySQL健康检查脚本(nsmysql.pl)并不完善,它只能检查一条SQL语句执行是否出错,并不能检查MySQL主从结构中的MySQL Slave数据库同步是否正常、表有无损坏、同步延迟是否过大、是否出现错误、非sleeping状态的连程数是否过高等情况。于是,我根据自己的需要,为NetScaler 8.0写了一个MySQL Slave数据库负载均衡健康检查脚本(nsmysql-slave.pl),实现了上述需求。
有了“nsmysql-slave.pl”做健康检查,利用NetScaler的VIP(虚拟IP),就可以完美实现多台MySQL Slave数据库的负载均衡了。当一台MySQL Slave数据库出现不同步、表损坏、同步延迟过大(本脚本中默认设置的落后MySQL主库600秒视为延迟,可根据具体应用修改)、活动连程数太高(本脚本中默认设置的是大于200视为连程数太高,可根据具体应用修改)等情况,“nsmysql-slave.pl”就会自动将其检查出来,并告知NetScaler,NetScaler会将该数据库标识为宕机,从而不将用户的查询请求传送到这台发生故障的数据库上。故障一旦修复,“nsmysql-slave.pl”会自动告知NetScaler,该数据库已经可以使用。
“nsmysql-slave.pl”源代码如下:
F5 BIG-IP负载均衡器配置实例与Web管理界面体验[原创]
[ 2008-5-22 23:33 | by 张宴 ]
[文章作者:张宴 本文版本:v1.0 最后修改:2008.05.22 转载请注明出自:http://blog.zyan.cc/f5_big_ip]
前言:最近一直在对比测试F5 BIG-IP和Citrix NetScaler负载均衡器的各项性能,于是写下此篇文章,记录F5 BIG-IP的常见应用配置方法。
目前,许多厂商推出了专用于平衡服务器负载的负载均衡器,如F5 Network公司的BIG-IP,Citrix公司的NetScaler。F5 BIG-IP LTM 的官方名称叫做本地流量管理器,可以做4-7层负载均衡,具有负载均衡、应用交换、会话交换、状态监控、智能网络地址转换、通用持续性、响应错误处理、IPv6网关、高级路由、智能端口镜像、SSL加速、智能HTTP压缩、TCP优化、第7层速率整形、内容缓冲、内容转换、连接加速、高速缓存、Cookie加密、选择性内容加密、应用攻击过滤、拒绝服务(DoS)攻击和SYN Flood保护、防火墙—包过滤、包消毒等功能。
以下是F5 BIG-IP用作HTTP负载均衡器的主要功能:
①、F5 BIG-IP提供12种灵活的算法将所有流量均衡的分配到各个服务器,而面对用户,只是一台虚拟服务器。
②、F5 BIG-IP可以确认应用程序能否对请求返回对应的数据。假如F5 BIG-IP后面的某一台服务器发生服务停止、死机等故障,F5会检查出来并将该服务器标识为宕机,从而不将用户的访问请求传送到该台发生故障的服务器上。这样,只要其它的服务器正常,用户的访问就不会受到影响。宕机一旦修复,F5 BIG-IP就会自动查证应用已能对客户请求作出正确响应并恢复向该服务器传送。
③、F5 BIG-IP具有动态Session的会话保持功能。
④、F5 BIG-IP的iRules功能可以做HTTP内容过滤,根据不同的域名、URL,将访问请求传送到不同的服务器。
下面,结合实例,配置F5 BIG-IP LTM v9.x:
①、如图,假设域名blog.zyan.cc被解析到F5的外网/公网虚拟IP:61.1.1.3(vs_squid),该虚拟IP下有一个服务器池(pool_squid),该服务器池下包含两台真实的Squid服务器(192.168.1.11和192.168.1.12)。
②、如果Squid缓存未命中,则会请求F5的内网虚拟IP:192.168.1.3(vs_apache),该虚拟IP下有一个默认服务器池(pool_apache_default),该服务器池下包含两台真实的Apache服务器(192.168.1.21和192.168.1.22),当该虚拟IP匹配iRules规则时,则会访问另外一个服务器池(pool_apache_irules),该服务器池下同样包含两台真实的Apache服务器(192.168.1.23和192.168.1.24)。
③、另外,所有真实服务器的默认网关指向F5的自身内网IP,即192.168.1.2。
④、所有的真实服务器通过SNAT IP地址61.1.1.4访问互联网。
详细配置步骤:
前言:最近一直在对比测试F5 BIG-IP和Citrix NetScaler负载均衡器的各项性能,于是写下此篇文章,记录F5 BIG-IP的常见应用配置方法。
目前,许多厂商推出了专用于平衡服务器负载的负载均衡器,如F5 Network公司的BIG-IP,Citrix公司的NetScaler。F5 BIG-IP LTM 的官方名称叫做本地流量管理器,可以做4-7层负载均衡,具有负载均衡、应用交换、会话交换、状态监控、智能网络地址转换、通用持续性、响应错误处理、IPv6网关、高级路由、智能端口镜像、SSL加速、智能HTTP压缩、TCP优化、第7层速率整形、内容缓冲、内容转换、连接加速、高速缓存、Cookie加密、选择性内容加密、应用攻击过滤、拒绝服务(DoS)攻击和SYN Flood保护、防火墙—包过滤、包消毒等功能。
以下是F5 BIG-IP用作HTTP负载均衡器的主要功能:
①、F5 BIG-IP提供12种灵活的算法将所有流量均衡的分配到各个服务器,而面对用户,只是一台虚拟服务器。
②、F5 BIG-IP可以确认应用程序能否对请求返回对应的数据。假如F5 BIG-IP后面的某一台服务器发生服务停止、死机等故障,F5会检查出来并将该服务器标识为宕机,从而不将用户的访问请求传送到该台发生故障的服务器上。这样,只要其它的服务器正常,用户的访问就不会受到影响。宕机一旦修复,F5 BIG-IP就会自动查证应用已能对客户请求作出正确响应并恢复向该服务器传送。
③、F5 BIG-IP具有动态Session的会话保持功能。
④、F5 BIG-IP的iRules功能可以做HTTP内容过滤,根据不同的域名、URL,将访问请求传送到不同的服务器。
下面,结合实例,配置F5 BIG-IP LTM v9.x:
①、如图,假设域名blog.zyan.cc被解析到F5的外网/公网虚拟IP:61.1.1.3(vs_squid),该虚拟IP下有一个服务器池(pool_squid),该服务器池下包含两台真实的Squid服务器(192.168.1.11和192.168.1.12)。
②、如果Squid缓存未命中,则会请求F5的内网虚拟IP:192.168.1.3(vs_apache),该虚拟IP下有一个默认服务器池(pool_apache_default),该服务器池下包含两台真实的Apache服务器(192.168.1.21和192.168.1.22),当该虚拟IP匹配iRules规则时,则会访问另外一个服务器池(pool_apache_irules),该服务器池下同样包含两台真实的Apache服务器(192.168.1.23和192.168.1.24)。
③、另外,所有真实服务器的默认网关指向F5的自身内网IP,即192.168.1.2。
④、所有的真实服务器通过SNAT IP地址61.1.1.4访问互联网。
详细配置步骤:
2008年5月2日,我们结婚的日子[原创]
[ 2008-5-12 08:50 | by 张宴 ]
dbcached──“分布式 key-value 数据库内存缓存系统”发布[原创]
[ 2008-2-18 20:22 | by 张宴 ]
前言:dbcached 1.0 beta* 在 Memcached 1.2.4 的基础上编写而成,也是我的第一个开源C项目。编写 dbcached 的目的是为了最大限度的发挥 Memcached 内存缓存的优势,便捷地维护 Memcached 服务器节点哈希列表,智能地支持 Memcached 故障转移,同时保证数据的持久化存储。
dbcached
协议:New BSD License
作者:张宴
网址:http://code.google.com/p/dbcached/
dbcached 是什么?
● dbcached 是一款基于 Memcached 和 NMDB 的分布式 key-value 数据库内存缓存系统。
● dbcached = Memcached + 持久化存储管理器 + NMDB 客户端接口
● Memcached 是一款高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
● NMDB 是一款多协议网络数据库(dbm类)管理器,它由内存缓存和磁盘存储两部分构成,使用 QDBM 或 Berkeley DB 作为后端数据库。
● QDBM 是一个管理数据库的例程库,它参照 GDBM 为了下述三点而被开发:更高的处理速度,更小的数据库文件大小,和更简单的API。QDBM 读写速度比 Berkeley DB 要快,详细速度比较见《Report of Benchmark Test》。
Memcached 和 dbcached 在功能上一样吗?
● 兼容:Memcached 能做的,dbcached 都能做。除此之外,dbcached 还将“Memcached、持久化存储管理器、NMDB 客户端接口”在一个程序中结合起来,对任何原有 Memcached 客户端来讲,dbcached 仍旧是个 Memcached 内存对象缓存系统,但是,它的数据可以持久存储到本机或其它服务器上的 QDBM 或 Berkeley DB 数据库中。
dbcached
协议:New BSD License
作者:张宴
网址:http://code.google.com/p/dbcached/
dbcached 是什么?
● dbcached 是一款基于 Memcached 和 NMDB 的分布式 key-value 数据库内存缓存系统。
● dbcached = Memcached + 持久化存储管理器 + NMDB 客户端接口
● Memcached 是一款高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
● NMDB 是一款多协议网络数据库(dbm类)管理器,它由内存缓存和磁盘存储两部分构成,使用 QDBM 或 Berkeley DB 作为后端数据库。
● QDBM 是一个管理数据库的例程库,它参照 GDBM 为了下述三点而被开发:更高的处理速度,更小的数据库文件大小,和更简单的API。QDBM 读写速度比 Berkeley DB 要快,详细速度比较见《Report of Benchmark Test》。
Memcached 和 dbcached 在功能上一样吗?
● 兼容:Memcached 能做的,dbcached 都能做。除此之外,dbcached 还将“Memcached、持久化存储管理器、NMDB 客户端接口”在一个程序中结合起来,对任何原有 Memcached 客户端来讲,dbcached 仍旧是个 Memcached 内存对象缓存系统,但是,它的数据可以持久存储到本机或其它服务器上的 QDBM 或 Berkeley DB 数据库中。
大学毕业之际,在北京买房[原创]
[ 2007-6-29 17:51 | by 张宴 ]
2007年6月20日(星期三),女友从事房地产的姐夫说,正在建设中的期房──“莱镇·香格里”不错,小户型均价9100元/平方米,在北五环附近的清河小营桥,离西三旗、上地、中关村都比较近。
2007年6月21日(星期四),我、女友还有她姐夫去了“莱镇·香格里”的售楼处咨询,并察看了工地,觉得还不错,当即交了5000元定金,选中了二期12号楼2单元8层一套期房:面积47.15平方米,总价419531元,首付89530元,2009年5月入住。
2007年6月28日(星期四),我和GF再次前往“莱镇·香格里”售楼处,交完首付:89530元(构成:我家借银行贷款40000元+女友家30000元+借女友姐姐家8000元+我和女友积攒的12000元)。剩余的33万元等到楼房建成封顶后,通过每月还款2400元*20年的中国农业银行住房按揭贷款支付。
6月28日,正好是中南民族大学举行2007届毕业生毕业典礼的日子,也正是这一天,在北京买房,不再是我们的梦想。
我们现在买房的理由:
1、北京的房价一直飞速上升,买房,就要先下手为强。
2、北京的房价之所以持续上升,是受需求的影响,而非2008年奥运会,期待2008年后房价下降不太现实。
3、北京市银监局2006年底召开了在京各股份制商业银行“房地产贷款风险情况通报会”,重申“凡是一手住房项目均必须主体结构封顶后方可发放按揭贷款”等规定,并表示,如发现违规问题将严肃处理,主要责任人要就地免职。也就是说,等到2008年5月楼房封顶后,我们才开始每月交2400元的按揭,这给了我们充足的时间去偿还首付89530元中的借款。
2007年6月21日(星期四),我、女友还有她姐夫去了“莱镇·香格里”的售楼处咨询,并察看了工地,觉得还不错,当即交了5000元定金,选中了二期12号楼2单元8层一套期房:面积47.15平方米,总价419531元,首付89530元,2009年5月入住。
2007年6月28日(星期四),我和GF再次前往“莱镇·香格里”售楼处,交完首付:89530元(构成:我家借银行贷款40000元+女友家30000元+借女友姐姐家8000元+我和女友积攒的12000元)。剩余的33万元等到楼房建成封顶后,通过每月还款2400元*20年的中国农业银行住房按揭贷款支付。
6月28日,正好是中南民族大学举行2007届毕业生毕业典礼的日子,也正是这一天,在北京买房,不再是我们的梦想。
我们现在买房的理由:
1、北京的房价一直飞速上升,买房,就要先下手为强。
2、北京的房价之所以持续上升,是受需求的影响,而非2008年奥运会,期待2008年后房价下降不太现实。
3、北京市银监局2006年底召开了在京各股份制商业银行“房地产贷款风险情况通报会”,重申“凡是一手住房项目均必须主体结构封顶后方可发放按揭贷款”等规定,并表示,如发现违规问题将严肃处理,主要责任人要就地免职。也就是说,等到2008年5月楼房封顶后,我们才开始每月交2400元的按揭,这给了我们充足的时间去偿还首付89530元中的借款。
新浪印象:记我在新浪网的第一天工作[原创]
[ 2007-1-25 23:45 | by 张宴 ]
早上9点的北京北四环西路已是车水马龙,我在中关村下了公交车,走进了集聚国内知名IT企业的理想国际大厦(15~20层-新浪;12层-百度;10层-华旗.爱国者)。
我在理想国际大厦18层的新浪网技术(中国)有限公司·互动社区事业部报到,开始了在新浪的第一天工作。
新浪的办公环境不错,拥有宽大的工作间,弧形的办公桌,能自由移动的滑轮软椅子,茶杯、饮料、文件夹、衣柜、大抽屉、盆景、休息室样样齐全,每人拥有一台电话机与号码。
上司开了个单子,让我和另一位负责此项工作的同事去7层库房领了4台全新的2U机架式 DELL PowerEdge 2950 服务器,再加上原有的1台服务器,有5台服务器可供我们研究使用,练习构建多服务器群集与负载均衡。条件如此之好,难以想象。
再来个近照,这就是2U机架式服务器:
以后会经常跟这些东东以及Linux操作系统打交道了。新浪的服务器普遍用的是CentOS Linux,即基于红帽Linux企业版(Red Hat Enterprise Linux)源代码编译的合法翻版,可免费获取,除了没有红帽的商标和技术支持外,其它功能跟红帽Linux企业版一样。
下班时间已到,我第一天的工作结束了。只要路是对的,就不怕路远。
我在理想国际大厦18层的新浪网技术(中国)有限公司·互动社区事业部报到,开始了在新浪的第一天工作。
新浪的办公环境不错,拥有宽大的工作间,弧形的办公桌,能自由移动的滑轮软椅子,茶杯、饮料、文件夹、衣柜、大抽屉、盆景、休息室样样齐全,每人拥有一台电话机与号码。
上司开了个单子,让我和另一位负责此项工作的同事去7层库房领了4台全新的2U机架式 DELL PowerEdge 2950 服务器,再加上原有的1台服务器,有5台服务器可供我们研究使用,练习构建多服务器群集与负载均衡。条件如此之好,难以想象。
再来个近照,这就是2U机架式服务器:
以后会经常跟这些东东以及Linux操作系统打交道了。新浪的服务器普遍用的是CentOS Linux,即基于红帽Linux企业版(Red Hat Enterprise Linux)源代码编译的合法翻版,可免费获取,除了没有红帽的商标和技术支持外,其它功能跟红帽Linux企业版一样。
下班时间已到,我第一天的工作结束了。只要路是对的,就不怕路远。
武汉,明天我即将离开[原创]
[ 2007-1-19 17:13 | by 张宴 ]
结束了大四(上)的最后考试,
收拾了该带走的东西,
明晨,
我就将背着行囊,
匆匆地离开武汉,
人生中第二次前往北京。
不知道北方的冬季,
是否比武汉更寒冷?
但我相信,
北方的IT人生,
会比武汉更精彩。
奔赴预约的面试,
为理想的工作而努力,
为梦想的舞台而奋斗!
长江汉水之岸的武汉,
湖光塔影之滨的民大,
五月再见。
附:从北京西站到最近的地铁站(军事博物馆)步行图
收拾了该带走的东西,
明晨,
我就将背着行囊,
匆匆地离开武汉,
人生中第二次前往北京。
不知道北方的冬季,
是否比武汉更寒冷?
但我相信,
北方的IT人生,
会比武汉更精彩。
奔赴预约的面试,
为理想的工作而努力,
为梦想的舞台而奋斗!
长江汉水之岸的武汉,
湖光塔影之滨的民大,
五月再见。
附:从北京西站到最近的地铁站(军事博物馆)步行图
12·18,我们的爱情一周年[原创]
[ 2006-12-18 16:11 | by 张宴 ]
2005年12月18日,
在民大新闻网的QQ群,
ViVi和Xu发了个爱情小测试的网址,
接连不断地说测试很准。
我知道那些爱情般配指数之类的测试没什么科学依据,
只是闹着玩罢了,
但还是想测一下我和我喜欢已久的Sannier,
即现在的女友。
输入我的姓名,
输入她的姓名,
提交,
测试结果出乎意料:
“XXX喜欢的人是XXX,这个消息已经被系统发送到你的好友ViVi的邮箱,现在她可知道你的秘密了。”
一个陷阱,
一场骗局,
大呼上当。
去新闻网办公室找她们算帐,
ViVi幸灾乐祸地笑着对我说:“原来你喜欢的是Sannier啊,我们现在才知道。进展如何,要不要我们帮忙撮合撮合。”
我脸一红,说:“去、去、去。”
扭头不去搭理她们。
Xu不愧为公认的狗崽队长,
一天中接二连三地去问Sannier喜不喜欢我,
Sannier就是不回答Yes or No,
这是Sannier成为我女友后告诉我的。
晚上,Sannier发短信问我:“Xu是不是喜欢你?”
我一头雾水地问:“不可能吧,没理由呀,怎么突然问这个问题?”
Sannier说:“那她今天怎么三番两次地问我喜不喜欢你?”
原来如此,
我自然知道Xu为什么三番两次地问她了。
于是就把“爱情测试骗局”的事告诉Sannier了,
机会难得,
想着怎么向Sannier表白,
直接说“我喜欢你”感觉有点唐突,
还不知道Sannier是不是也对我有意思呢。
于是,
我含蓄地发了条短信探了探路:“我最在乎的人是你。”
Sannier这小家伙回道:“哄我的吧。......”
从她的字里行间我读出了她的喜悦,
我知道她也是喜欢我的。
爱情,从这一刻开始......
2006年12月18日,
我们的爱情一周年,
我用Photoshop设计了一张图片,
喷绘出1米宽的大图送给了Sannier:
蓝色星空,
白色翅膀,
天使Sannier,
自由飞翔。
还有,
还有什么?
一条项链,
你我情牵,
永恒纪念。
在民大新闻网的QQ群,
ViVi和Xu发了个爱情小测试的网址,
接连不断地说测试很准。
我知道那些爱情般配指数之类的测试没什么科学依据,
只是闹着玩罢了,
但还是想测一下我和我喜欢已久的Sannier,
即现在的女友。
输入我的姓名,
输入她的姓名,
提交,
测试结果出乎意料:
“XXX喜欢的人是XXX,这个消息已经被系统发送到你的好友ViVi的邮箱,现在她可知道你的秘密了。”
一个陷阱,
一场骗局,
大呼上当。
去新闻网办公室找她们算帐,
ViVi幸灾乐祸地笑着对我说:“原来你喜欢的是Sannier啊,我们现在才知道。进展如何,要不要我们帮忙撮合撮合。”
我脸一红,说:“去、去、去。”
扭头不去搭理她们。
Xu不愧为公认的狗崽队长,
一天中接二连三地去问Sannier喜不喜欢我,
Sannier就是不回答Yes or No,
这是Sannier成为我女友后告诉我的。
晚上,Sannier发短信问我:“Xu是不是喜欢你?”
我一头雾水地问:“不可能吧,没理由呀,怎么突然问这个问题?”
Sannier说:“那她今天怎么三番两次地问我喜不喜欢你?”
原来如此,
我自然知道Xu为什么三番两次地问她了。
于是就把“爱情测试骗局”的事告诉Sannier了,
机会难得,
想着怎么向Sannier表白,
直接说“我喜欢你”感觉有点唐突,
还不知道Sannier是不是也对我有意思呢。
于是,
我含蓄地发了条短信探了探路:“我最在乎的人是你。”
Sannier这小家伙回道:“哄我的吧。......”
从她的字里行间我读出了她的喜悦,
我知道她也是喜欢我的。
爱情,从这一刻开始......
2006年12月18日,
我们的爱情一周年,
我用Photoshop设计了一张图片,
喷绘出1米宽的大图送给了Sannier:
蓝色星空,
白色翅膀,
天使Sannier,
自由飞翔。
还有,
还有什么?
一条项链,
你我情牵,
永恒纪念。