还是360指数项目,需要用到Query归一化,但是公司内只有c++版本的,数据分析的同事用的都是那个二进制可执行文件来处理,但是我们前端又不可能跑system()方法吧,太不安全了,所以要来了源代码,打算封装成一个php扩展。

下边就讲一下我的封装过程。

首先,要到了Query归一化的C++版本源代码。

query归一化

query归一化

引用第三方的类库有两种方法,一种是静态引用,一种是动态引用,推荐使用静态引用,因为静态引用的情况下,会把类库打包到php的扩展.SO文件中,这样我们不必担心依赖关系,带着类库到处跑了。


阅读全文

最近在搞360指数项目,挑战还是比较多的,现在项目已经基本ok了,拿出点时间来总结一下。 360指数搜索 首先说说存储,需求的数据量比较大,又有一些弱关系的查询需求,首先放弃的就是mysql和redis,然后跟DBA沟通了下,使用mongoDB似乎是个不错的选择,在开动了之后才发现,数据量比预估的还要大,DBA的SSD资源不足以支持我们的项目,我们就自己搞了一台有4个2Tsas盘的机器,DBA在上边搞了24个分片,很轻易的,我们就把磁盘IO搞满了,数据写的速度慢的要死,在ssd上有1-2w/s的速度,在sas盘上,就只有几百了,数据量实在太大,需要录入一直到去年年初的指数数据,如果要想在上线前把数据录入完成,这样下去是不可能了。 随后我们又搞了两台给Hadoop集群使用的机器,每台机器有12块SCSI硬盘,看起来些写性能应该能翻个几番,但其实,部署完了之后,才发现,写入速度也才刚能达到1-2k,距离我们的需求还差的很远。 其实,我们要求的也只是数据的初始化速度要快一些,上线之后,这样的写性能也足以支持我们把增量数据录入,所以,我们还可以通过借一些ssd硬盘来加快写入速度,然后把数据对拷到scsi硬盘,这样,数据初始化的问题就可以解决了。本来已经从其它部门的同事那里借到了25块ssd,不过在跟他们进一步沟通之后,发现公司有可以提供线上服务的Hbase集群,虽然在存储选型初期也想过Hbase,由于当时对Hbase了解较少,也不知道有可以提供线上服务的集群,就这么错过了,与系统部的同事沟通后,我们数据量最大的两块数据,是可以迁移到Hbase使用的,这块数据占到我们总数据的90%,这部分数据通过Hbase解决后,其它数据再使用Mongodb就毫无压力了。最终,我们的最大数据部分的需求,通过合理使用Hbase的column_qualifier和version得以解决。而且单纯存入这批数据的map/reduce时间,仅仅使用了17分钟。 这里还要感谢一下DBA和系统部的同事,在好几个夜晚帮我们部署环境,解答疑问,使我们的项目得以顺利前进。 … 嗯,,,项目中还用到了一个自己封装的php扩展,单独写个文章介绍下吧。
阅读全文

首先是必需组件的安装。 有三个,vim的DBGp插件,php的xdebug扩展,Chrome浏览器的xdebug helper扩展。 一: vim 安装 dbgp client 插件 下载 DBGp client $ cd ~/.vim/ $ wget http://www.vim.org/scripts/download_script.php?src_id=7285 -O debugger.zip $ unzip debugger.zip 二:PHP安装xdebug扩展 具体安装方法就不讲了,网上例子很多.官方安装说明. 我把我的配置信息贴出来: sudo vim /home/s/apps/php-5.2.6/etc/include/xdebug.ini [Xdebug] zend_extension=“/home/s/apps/php-5.2.6/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so” xdebug.profiler_enable=0 ;开启profile xdebug.profiler_enable_trigger=1 ;使用触发器开启profile xdebug.profiler_output_dir=“/home/s/logs/xdebugLog” xdebug.auto_trace=0 ;开启trace xdebug.trace_enable_trigger=1 ;使用触发器开启trace xdebug.trace_output_dir=“/home/s/logs/xdebugLog” xdebug.cli_color=1 xdebug.collect_params=2 xdebug.collect_return=on ;remote debug ;开启远程调试 xdebug.remote_enable=1 xdebug.remote_autostart=Off xdebug.remote_port=9000 ;远程端口,不是你web服务的端口,如果没有冲突,一般不用修改。 其中需要注意的是有注释的地方,不自动开启profile和trace,因为这样每次请求都会保存相应信息,会把磁盘爆掉的。把触发器打开,这样,只有在请求的时候带特定信息的时候,才会记录相应的性能信息。触发器的实现机制是:在请求时,如果GET/POST/COOKIE信息中包含特定的变量,会开启对应的debug,profile或trace,所以我们可以通过在web中访问页面时,添加对应的变量来开启相应的功能。如果每次都自己拼接这个,也挺麻烦,所以会介绍后边的xdebug helper的chrome扩展,想开启任何一个功能的时候,点击一下扩展就可以了。也就是说,这个扩展不是调试必须的,但是会让你感觉用起来很方便。 三:chrome扩展xdebug helper 地址:https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc 如果在 chrome://apps里搜索xdebug helper搜索不到,记得把你的语言改为 English. xdebug-helper-introduction20140226142342 xdebug helper两处配置要注意, IDE Key要注意选择Other, 值为1,然后保存。
阅读全文

启动相机后,上边一排设置图标全是反的,倒置的,拍照时屏幕显示是正确的,打开相册也都是颠倒的,很难受啊。。 把新装的一些app给干掉了,还是这个样子。 解决办法: 关机, 把SIM卡和电池都重新装下,呆两分钟, 再开机就好了。
阅读全文

今天遇到一个怪事,在一个页面下, 有一个区域,用来动态的显示一些数据,主要是显示一个url,会使用jQuery去动态的改变a标签的属性,来显示相关信息。

但是却发现,在IE7下,当改变了a标签的属性之后,凡是www开头的url,显示文本都会添加一个http://,让人费解。

后来发现是一个小bug,但是不确定是jQuery还是IE7的问题。

解决方案就在设定A标签的属性的顺序上。

//当顺序为
this.linkElem.html(data.dspurl).attr('href', data.link).attr('title', data.link);
//时,就会发生以上怪现象,但是如果改变其顺序
this.linkElem.attr('href', data.link).attr('title', data.link).text(data.dspurl);
//就会正常了。


阅读全文

每次开年会,我都有一种冰火两重天的感觉,一方面年会是我们的团队和员工展示业绩、表现创意和才华、展现自我的机会,但另外一方面,我内心很自责,因为我本人的气质比较偏屌丝,然后又是一个典型的宅男,不像有的公司CEO会跳拉丁舞,女员工昏倒一大片。我自己也特别缺乏娱乐细胞,最近我带领几个技术宅男录了《天天向上》,录制过程中我明白了,没法跟别人比帅,也没法跟人家比拉丁舞,我们360还是老老实实地干好两件事儿,一个是创新,一个是做好产品,用这两件武器挑战巨头,实现屌丝的逆袭,这就是我们的气质。

在年会上我想讲几个360的关键词,今天我们面临着二次创业,没有这几个关键词是不行的。这几个关键词,第一是用户至上,第二是创新,第三是创业精神。

用户至上

用户至上就是用户利益至上,用户体验至上,这是360公司的安身立命之本。今天,用户不想去了解你的技术是否很牛,不想知道你的公司有什么伟大的梦想和理念,他们真正在意的是,你的产品给我解决什么问题,你的产品给我创造什么价值,在互联网产品越来越同质化的时候,谁能够从用户出发,把体验做到极致,而不是简单地把功能进行罗列,最后让用户在使用你的产品的过程中,能够感受到方便、愉悦、放心,谁就可以真正地赢得用户的信任。

用户至上这句话,说起来简单,做起来难。从战术层面来讲,做产品的时候要时刻从用户角度出发,而不是从自我出发。从战略层面来讲,用户至上是指企业要发自内心地尊重用户利益,不能为了赚大钱而损坏用户的利益。我们刚进入安全市场的时候,技术并不强,但是我们敢于横下一条心,不怕得罪同行,敢于查杀一切霸占用户电脑的流氓软件,于是我们赢得了用户的信任。360推出免费杀毒,敢于自宫,首先砍掉自己将近两亿的杀毒软件销售收入。如果没有这种精神,我们不可能从互联网安全上异军突起。这也给了我们一个很大的启示,那就是在商业利益和用户利益发生冲突的时候,商业利益必须要让位于用户利益。因为我相信互联网里存在着这样一个真理:互联网商业模式无论怎么千变万化,用户基础才是王道。脱离了用户基础,神马商业模式都是浮云。

我们推出360搜索so.com,面对垄断的搜索巨头,要取得突破,最有利的武器还是用户至上。今天的搜索巨头太爱钱了,它把一个搜索引擎做成了广告引擎。过去,在厕所里张贴的老军医、老中医包治百病的小广告,都转移到搜索巨头那里去了。竞价排名,谁给钱谁就放在最前面,成了虚假医疗广告和欺诈钓鱼网站传播的主渠道。搜索巨头最近在吹嘘自己的技术,但如没有用户至上的精神,技术不会给用户造福,反而会成为谋取不义之财的工具。

360的业务在不断扩大,很多产品也开始承担商业拓展的压力,但360的每一个员工,每一个产品团队要牢记一点:把用户至上真正体现在你们的商业策略和产品策略中。So.com不会只满足于10%的市场份额。我相信,只有市场竞争才能让企业竞相去讨好用户,创新才会出现,产业才会发展。如果是一家独大,即使CCTV一连批评它六天,它也依然是无动于衷。有人说,so.com的崛起仅仅证明渠道的力量,其实他们错了,我们最有力的武器不是浏览器,不是网址导航,而是我们要树立一个全新的价值主张,以及为此目标所要付出的努力和行动!

别人往牛奶里掺三聚氰胺,你不掺;别人往白酒里面加塑化剂,你不加;别人往餐桌上添地沟油,你不添;别人往搜索结果里塞虚假医疗广告,你不塞。你能坚持这样做下去,就能得到用户的信任和支持。我认为,判断一个公司的价值,不是看它的市值,不是看它的收入,而是看它是否给亿万用户、给社会、给行业创造了价值。360在安全上一分钱不赚,但因为有了360,全国超过4亿的用户上网很安全,搜索不上当,网购不受骗,用户信任360对安全的承诺,这就是360真正的价值。

 
阅读全文

作者的图片

DigDeeply

Technology Stack: PHP/Openresty/GoLang, and so on…

Web Develop Eneigneer

Beijing China