用ab测了下一段scws分词并且入库redis的代码,发现每次请求要花200ms,这个速度实在是弱爆了..
因为一直觉得分词是个工作量极大的工作,所以自然的认为问题处在分词上..
打开scws的phpext的代码,发现scws每次在open的时候都会重新载入分词词库..这是个问题..优化之..将scws的open做成popen(类似mysql_connect和mysql_pconnect的关系),发现速度没有改善.
再次发现scws中phpext获取分词结果scws_get_result的循环是在php中做的.好吧改善之,丢到phpext中用c来做..发现速度依旧没有改善..
最后在代码中到处输出时间..发现悲剧了..发现分词部分用了50ms不到,而入redis库花了150ms..晕..
优化redis入库的php部分..问题解决…
这个问题告诉我们….在发现瓶颈之后,一定得用合理的方式来查找瓶颈的具体位置..而不是靠猜…
项目地址:https://github.com/frozendeath/redis-fulltext-search-cn
项目目的,用php+scws+redis实现一个中文的全文搜索引擎,替代mysql的fulltext来提高搜索精度和速度
当前实现的功能:
1.搜索结果按时间排序
来源:http://faq.csdn.net/read/211787.html
打基础
讨论一下结构(struct)与类(class)的区别,你认为结构(struct)有些什么作用,可以完全用类(class)取代么??
—————————————————————
问的人太多,干脆整理个FAQ吧。
首先,讨论这个问题应该仅从语法上讨论,如果讨论不同人之间编程风格上的差异,那这个问题是没有答案的。毕竟不同的人偏好不同。
从语法上,在C++中(只讨论C++中)。class和struct做类型定义时只有两点区别:
(一)默认继承权限。如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理;
(二)成员的默认访问权限。class的成员默认是private权限,struct默认是public权限。
除了这两点,class和struct基本就是一个东西。语法上没有任何其它区别。
不能因为学过C就总觉得连C++中struct和class都区别很大,下面列举的说明可能比较无聊,因为struct和class本来就是基本一样的东西,无需多说。但这些说明可能有助于澄清一些常见的关于struct和class的错误认识:
(1)都可以有成员函数;包括各类构造函数,析构函数,重载的运算符,友元类,友元结构,友元函数,虚函数,纯虚函数,静态函数;
(2)都可以有一大堆public/private/protected修饰符在里边;
(3)虽然这种风格不再被提倡,但语法上二者都可以使用大括号的方式初始化:A a = {1, 2, 3};不管A是个struct还是个class,前提是这个类/结构足够简单,比如所有的成员都是public的,所有的成员都是简单类型,没有显式声明的构造函数。
(4)都可以进行复杂的继承甚至多重继承,一个struct可以继承自一个class,反之亦可;一个struct可以同时继承5个class和5个struct,虽然这样做不太好。
(5)如果说class的设计需要注意OO的原则和风格,那么没任何理由说设计struct就不需要注意。
(6)再次说明,以上所有说法都是指在C++语言中,至于在C里的情况,C里是根本没有“class”,而C的struct从根本上也只是个包装数据的语法机制。
—————————————————————
最后,作为语言的两个关键字,除去定义类型时有上述区别之外,另外还有一点点:“class”这个关键字还用于定义模板参数,就像“typename”。但关键字“struct”不用于定义模板参数。
来源:http://huangro.javaeye.com/blog/365993
安装Apache2
#sudo apt-get install apache2
安装SVN
#sudo apt-get install subversion libapache2-svn
配置Apache2的配置文件 /etc/apache2/mods-available/dav_svn.conf
<Location /svn>
DAV svn
SVNParentPath /opt/svn/repos/
AuthType Basic
AuthName “My Respository”
AuthUserFile /opt/svn/password
Require valid-user
</Location>
创建项目目录
#sudo svnadmin create /opt/svn/repos/myproject
创建用户名和密码
#sudo htpasswd -c /opt/svn/passwd robinhuang (第二次创建可取消-c)
使Apache的某些模块有效
#sudo a2enmod dav dav_fs dav_svn
最后重载Apache
#sudo /etc/init.d/apache2 force-reload
注意:当创建一个项目之后,需要运行以下命令:
#sudo chown -R www-data: /opt/svn/repos
使得该项目的文件能够正常访问。