pennyliang的专栏

大规模数据处理,自然语言处理,个性化推荐系统相关技术博客

2009年06月26日

置顶 原创 《深入搜索引擎》在线勘误

《深入搜索引擎》在线勘误阅读全文>

发表于 @ 2009年06月26日 13:14:00|评论(loading...)|编辑|举报|收藏

2009年07月04日

转载 关于内存空洞的一个解释(转自我在水木社区的一个回帖)


发信人: pennyliang (pennyliang), 信区: SearchEngineTech
标  题: Re: 转自梁总blog
发信站: 水木社区 (Thu Jul  2 21:16:22 2009), 站内
内存碎片也叫内存空洞吧。
比如glibc管理的内存
--------——|-----------|-------------|---------------堆顶
使用中内存A  释放的内存B  使用中内存C  释放的内存D
glibc管理的内存唯一释放的条件是堆顶存在128k(M_TRIM_THRESHOLD)或以上的空闲区时才会释放,比如只有D才有被归还系统的可能,B就老老实实成为内存空洞,虽然未来的分配还能用到,但释放不掉。
而有些32位条件下工作很好的程序,但是到64位后,这个阈值变大的原因(而物理内存其实并没有增大很多),因为总是到不了这个threshold,而总是有新的分配摞上来,这样就失去了释放的机会。
一般来说,通常的经验是
(1)glibc管阅读全文>

发表于 @ 2009年07月04日 16:29:00|评论(loading...)|编辑|举报|收藏

2009年07月01日

原创 inezha(哪吒网)这个思路很不错

    主动订阅变化,通过MSN机器人进行提醒,这是一个很好的增值服务,前景看好。    这个思路可以往很多地方结合,另外这种建立人和人,人和物的关系,前景十分广阔。阅读全文>

发表于 @ 2009年07月01日 11:56:00|评论(loading...)|编辑|举报|收藏

2009年06月26日

原创 书刚出版,已经有网友反馈了发现的错误。

    未来我会把这些错误,集中到一起,更好的为读者服务。    每当我发现错误,都无比难过,如果再多花一点时间,如果再多看一遍,虽然,我已经投入很多时间在这本书上,但还不够,翻译也好,写书也好应该是专业化的团队运作,也许个人写书这种模式本身就有问题,特别还在水平有限的情况下。    我一直想打造一本不一样的东西,但事实却令人遗憾,越来越意识到我知道的仅是海岸,而对面是未知的大海,目前我确实不具备写书造福社会的能力,希望有一天能像knuth一样,真正做到厚积薄发。    低调,还是低调,把时间用来做一点实实在在的事情,华而不实总归不能长久。    以后本博客专门用来更新在线勘误,未来可能还会公开《走进搜索引擎》的电子版,做完这些事,差不多就可以了,功过让历史评说吧。阅读全文>

发表于 @ 2009年06月26日 18:19:00|评论(loading...)|编辑|举报|收藏

2009年06月22日

原创 选择正确的方案


    在工作中,我们常常看到很多加班,有些是业务的需要,但大多数都可以有效控制的。
    首先,我们是否选对的方案?
    很多人工作是不考虑方案的,第一感的方法就做,常常做无用功。究其原因大约有三个:
   (1)能力有限,只能想到一种方法;
   (2)不愿意思考多个方案。
   (3)想到多个方案,但没有能力评估,只好任选一个熟悉的,而可能不是最好的;
    如果是第一种,大部分只能通过加班来解决,积累经验,或者向高人学习。
   第二种,没有进一步求提高的意识,很可能长期停留在菜鸟阶段。
   第三种,各种方案的成本无法进行精确核算,无法做出决策,这时需要逼迫自己去评估,才能提高。

   举个例子,100个队伍进行足球比赛,采用淘汰制,决出冠军需要多少场比赛,   
   我们可以正面的思考,100个队伍,两两厮杀,进行了50场比赛,剩下50个队。。。然后,直到得到答案。 当你这样想,你会发现这很复杂,
   我们也可以想,淘汰一个阅读全文>

发表于 @ 2009年06月22日 20:55:00|评论(loading...)|编辑|举报|收藏

2009年06月20日

原创 大规模数据处理漫谈【4】(流水线)

    我们会看到这样的源代码    bool dosomething(int& count,int& sum)   {        if (likely(count                if (unlikely(count                 {                             print_error(LESSTHANZERO);                             return false;                  }                count++;        }        return true;   }   这个likely和unlikely是什么呢?我们称之为分支预测提示,便于指令预取。   在 Linux 内核中最常用的优化技术之一是 __builtin_expect阅读全文>

发表于 @ 2009年06月20日 08:06:00|评论(loading...)|编辑|举报|收藏

2009年06月18日

原创 书还没出,已经在chinapub被虐了


     http://www.china-pub.com/195498&ref=ps

     这本书的问题,标题的问题,坚信本书翻译肯定很烂,各种声音。

     我真怀疑是否是出版社的刻意炒作,或者是网络暴民的肆无忌惮,国内的环境为什么这么不好,难道我主动分享,错了?

     越来越多的声音告诉我,《走进搜索引擎》让他们真的走进了搜索引擎,每当我听到这样的声音都很鼓舞。我感觉到自己的价值,但更多的是看到网上的谩骂。

     走到今天这一步,我感觉很累,未来很长一段时间,我应该不会再写书或者翻译书了,国内有些读者修养太有限。




阅读全文>

发表于 @ 2009年06月18日 21:02:00|评论(loading...)|编辑|举报|收藏

2009年06月16日

原创 两个有序数组(有序段sorted run)简单归并算法的比较次数的分析

假定有这样两个有序数组:       L1:{a1,a2,....an}       L2:{b1,b2,....bn}简单归并,就是逐个比对,没有跳跃优化(skip)的。最好的情况下,归并后的结果为{a1,a2,....an,b1,b2,...bn}或者{b1,b2,...bn,a1,a2...an}比较的次数显然为n次。(n/2+n/2) ,出现前者或者后者的概率均为1/2最坏的情况下,归并后的结果为{a1,b1,a2,b2....an,bn}或者{b1,a1,b2,a2,...bn,an}不妨考察前者,L1或L2中任意一个(除bn以外)要想确定自己的位置,必须进行一次比较,因此总的比较次数为2n-1.在考察平均情况:假定归并后的结果为{{b1,...br}{a1...an-1}  || anbr+1...bn-1bn}  -----------------------------阅读全文>

发表于 @ 2009年06月16日 17:47:00|评论(loading...)|编辑|举报|收藏

2009年06月15日

原创 open party上和大家交流的一个例子,通过这里例子说明了大规模数据处理的深远意义


   for(;;)
   {
      void* buffer = malloc(SIZE);
      memset(buffer,SIZE);
      process(buffer)
      free buffer;
   }  

   这是一位实习生(我曾带过10+位实习生,因此见多识广)的伪代码,原本这个SIZE很小,估计是存放URL用的,定义为512字节,后来由于某种原因,扩大到了1M,从512字节扩大到了1M,速度变慢很多。为什么呢?这位同学无法解释,但我让他继续探索,找到真正的原因。

     我让他从这样几个方面入手,
   (1)首先分析一些主要花费时间的代码,结果发现是memset这一段从512到1M后耗费时间增多,而且增多并不是线性的,我让他先看一下glibc的memset源代码,如下:
#if defined _LIBC || defined STDC_HEADERS || defined USG
#阅读全文>

发表于 @ 2009年06月15日 17:30:00|评论(loading...)|编辑|举报|收藏

2009年06月14日

原创 昨天参加了出版社的open party,挺有收获

   和各界朋友交流,收获很大。    其中和包括IT媒体的朋友,出版社的朋友进行了沟通,一致反应谷歌平台太强大,已经严重威胁到他们的利益,特别是出版界的利益,利润率越来越低,国内一本书的单价已经不能再提高的情况下,只能通过走量来生存,而谷歌图书,以及越来越多的信息能在网上搜索到,消费者购买图书的欲望越来越低,走量也看不到前途,于是就在考虑往培训、咨询方面转,效仿唱片也开演唱会以弥补盗版带来的利润流失的做法。显然这需要很多路要走,出版界也在摸索,包括这次open party也是第一次举办这种线下的交流活动。    还和一些IT媒体的朋友进行了沟通,他们对IT界也表达了自己的看法,以及如何更好的产生价值,我已前做新闻这一块,感觉有很多共同语言。    另外就是我做了《大规模数据处理》的主题报告,陈诉了目前大规模数据处理的定义、应用、高校教学中的现状和学习的意义等等。以及我未来的工作,其中特别提到了建立私立实验室的想法,并获得了在座同学的支持。    报告以后,很多同学围坐过来,把工作中和面试过程中遇到的问题切磋交流,出版社的同学阅读全文>

发表于 @ 2009年06月14日 08:45:00|评论(loading...)|编辑|举报|收藏

2009年06月12日

原创 本周六我有个活动,北京地区有兴趣的朋友可以参加


   有兴趣的朋友可以去参加下,不过貌似费用有点贵。
  http://www.cnblogs.com/designbook/archive/2009/06/09/1499535.html 
   需要发邮件报名。阅读全文>

发表于 @ 2009年06月12日 06:59:00|评论(loading...)|编辑|举报|收藏

原创 大规模数据处理漫谈【3】

大规模数据处理;性能优化阅读全文>

发表于 @ 2009年06月12日 06:56:00|评论(loading...)|编辑|举报|收藏

原创 大规模数据处理漫谈【2】



   上回说到了磁盘的一些特性,感觉不说说文件不太妥。以及对比文件系统和raw device的优劣。
   在目前的各种文件系统中,JFS是一种比较适合大规模数据处理的文件系统,但常用的依然是ext2,ext3. 不同的文件系统受到特定业务的影响在保持通用的前提下,各有侧重,下面谈谈主要优化需要考虑的问题:
   文件系统都要求整块读写磁盘的,按照block size = 4K为例,如果需要在一个块上写1K数据,则首先需要从磁盘将这个块读入内存,在内存中写入1K数据(看做是合并块中其他数据),再回写磁盘。显然如果写的是4K数据,且恰好是写在一个块上的,则系统就免去读入内存和合并的开销,因此我们一般一次写入尽可能多,例如写入10K,则有可能是前两个是整块写,而后一个是半块写,半块写的额外代价摊下来就不显的很多。

   由于寻道时间是磁盘访问代价中最大的一块,而且道次跳得越大代价越高,因此我们希望文件所包含的块(fileplace命令查看)尽可能连续,而文件系统也是这么做得,但遗憾的是无论怎样,文件也会向不连续的方向发阅读全文>

发表于 @ 2009年06月12日 06:53:00|评论(loading...)|编辑|举报|收藏

原创 大规模数据处理漫谈【1】

本文首发于水木社区http://www.newsmth.net/bbscon.php?bid=715&id=14649。当然也是我发的了,以后我计划在这里以及我的另外一个博客http://blogger.org.cn/blog/blog.asp?name=liangbin继续该连载,希望广大网友关注,感兴趣的网页可以转载,不注明也没关系,我只是希望推广大规模数据处理技术,如果能对大家学习工作有所帮助,十分欣慰。我此前写过《走进搜索引擎》,翻译了《Managing gigabyte中文版》,各大新华书店有售,大规模数据处理我就不写书了,直接分享给大家。 大规模数据处理是什么?   大规模数据处理我认为就是在有限的机器资源的情况下,通过软件和硬件共同完成的G以上级别的数据计算和存储。   北大已经开了这么课程,可见重要性。   http://net.pku.edu.cn/~course/cs402/CC_Syllabus-0.3.pdf阅读全文>

发表于 @ 2009年06月12日 06:46:00|评论(loading...)|编辑|举报|收藏

2007年03月20日

原创 php调用存储过程返回结果集,解决can't return a result set in the given context错误的方法

php调用存储过程返回结果集,解决can't return a result set in the given context错误的方法阅读全文>

发表于 @ 2007年03月20日 21:46:00|评论(loading...)|编辑|举报|收藏

Csdn Blog version 3.1a
Copyright © pennyliang