Tag Archives: 索引

pFind引擎的第四代索引模块

  因为CNCP2010,同时也有些私事,最近很忙。live spaces又拆迁。所以BLOG节奏受影响。这周末陆续敲点流水帐。

  首先要祝贺zhch的后缀数组论文经过一年历练总算被BMC Bioinformatics接收。相关专利也提交了。(在这之前,sun老师的ETD论文也发表了,BOSS H昨天说,今年一年组里发了6、7篇,快等于此前几年的总和了)。

  pFind搜索引擎的索引技术一直不断传承和推进:dq老大最先奠定基础,推出IndexToolkit开源项目并在Bioinformatics发表Application notes;之后ly哥凭借不懈努力吃透了倒排技术,重构了索引模块,发表论文申请专利;接下来zhch凭借ACM金牌的强悍算法功底继续前进,先是将倒排索引的数据容量上限提高了几个数量级,然后又另辟蹊径引入后缀数组技术,颠覆了前人的工作。

  年底推出pFind 2.6之后,我们将着手把zhc的模块从develop分支移到release分支。这是pFind的第四代索引了。当然这只是刚开头,它必须通过全面严厉的测试,才能证明自己有资格替代老版本索引,在工业级产品中担当主力。

里程碑收尾,论文,雪季开始,理想主义和Hadoop的调度算法

  里程碑接近完成。这一版pFind Studio除了增强搜索引擎内核,也针对用户易用性进行了改进。需求列表很长,但很多问题需要微妙的权衡取舍,没想清楚之前不宜动手。因此在有限时间内,主要是集中解决几个重点问题,减小智力负担,提高用户体验。好几个月没上一线写代码了,都有点生锈。

  leo和hchi的论文一年内被拒两次,终于有希望了。加油!工业级软件、发明专利、国际期刊……一个都不少,科研创新的过程很完整,赞。然而,zhch牛人的新一代后缀树组索引算法,又将取代pFind内核里现有的倒排索引。把前浪拍死在沙滩上。我的论文还在under review。

  最近心情略好,给自己买了条新的单板滑雪裤,去乔波玩了两次。今天听说出事故了,中级道关闭,警察来来回回勘察。阿弥陀佛,大家还是要注意安全,科学练习,初学者最好请教练,不要傻大胆强行冲坡,练单板的人要戴好头盔和护具。自从08年初受伤以后,滑单板变得很谨慎。今年春季dmq老板委婉地说:“忒平稳了”;雪场教练的评价就直接多了:“专拣最没激情的那种动作”;现在,又被总雪龄少于10小时的小朋友在初级道上鄙视了。没办法,十年怕井绳,三十岁的老胳膊老腿了,安全第一安全第一。

  不过,静下心来,就把左右脚的落叶飘和换刃都练熟了。认识了一位不错的专业教练。原来八一队练冬季两项的。年纪很轻、人很帅、脾气不错、技术当然很牛。只可惜受伤提前退役了。我打算上难度的时候,就雇他教一天。

  最新《程序员》里有一篇张岩的自述。讲到考研和求职,讲到亲人突然去世,讲到公司重组,讲到challenge和沟通。文字很朴实。有些话值得年轻人体会,例如“做工程师永远要记住细节是魔鬼,只有在细节上充分积累,技术上才有成长的空间”;又如“请保持理想主义,相信我们做的事能改变生活。我们每天起床和上班,不是为了赚钱糊口,而是因为兴趣和使命感。”

  技术上最引起我注意的是《Hadoop集群作业的调度算法》,正好是下一步工作的重点。豆瓣王守崑的《走进个性化推荐系统》讲的是近期热点,也很有意思。(Resys召集聚会,就在豆瓣公司举办,可惜报名晚了没抢上名额,哇哇哭)

加班,走神

  连续参加考核、汇报和总结,没空写代码。昨天的会史无前例,漫长的七个小时,23:30才到家。

  据说我们开会很像吵架,思路稍有差池,立马被乱棍打死。leo大虾再次显示传说中的“老师潜力”,在3小时的讨论中,即使下面闹成一锅粥,仍然心平气和,硬是让每个人听懂了老版索引那些恐怖的数据结构和读写流程,并接受了他的重构方案。

  经过一个月头脑风暴,pFind下一版慢慢清晰了。这其中SD2China对我整理思路有很大帮助。

  还有最后两个features,要赶在下周一功能冻结前加进去。所以今天来加班。但实在没状态,于是索性放松下来处理些杂事:上网听音乐,收发邮件,整理代码,讨论架构,翻译Tina文档每天计划的段落……

  冬至,别忘吃饺子。

蛋白质数据索引

  阅读代码,画图,然后重构,单元测试……搞定了数据库部分。

  被数据结构的细节所纠缠。由于性能原因,无法使用通用数据库平台,只能自行开发一个数据服务。用各种酶在不同修饰条件下,对几十G 蛋白质数据进行酶切,得到肽离子,建立索引(即使最小的库,都有将近九千万条,而且每新增一种酶或修饰,数量还要翻倍),然后用文件映射方式,通过共享内存提供服务。

  其实我很欣赏系统最初的体系结构设计。但是由于1.5版deadline很紧张,老板施加了巨大的压力。为赶进度,工程师编程顾不上接口和重构,产生了大量的耦合和拷贝,弄得整个架构动弹不得。我接手后,只好回过头用几倍的时间阅读和重构代码,何苦呢?

  彻底重新设计了数据访问类,用一个纯虚父类做接口,隔开其他部分。每种具体实现方式作为一个子类,比如目前读取共享内存的代码。还打算把1.0版不通过索引的数据访问方式代码也移植过来,实现另外一个子类,提供给系统内存小于1.5G的用户。

  固定了接口,新版本就可以再实现其他数据访问方式,比如通过关系型数据库和Web Service提供数据服务。用关系型数据库的话,为保证效率满足Web应用,就必须用集群或网格了。这种情况一般都考虑Oracle,但涉及到老板的银子……听说Google采用MySQL,很希望知道他们的方案。

  今天跑通了单元测试案例,用的是马(Horse)的蛋白质库,不加任何修饰。Debug版访问所有肽链一遍,2.266秒。以前还真没对付过这种级别的海量数据。

BTW:早上去了趟所里,玩了玩曙光3000,酷。