存档

‘项目管理’ 分类的存档
页: 1 2 后页

Lucene 重建索引流程设计(草稿)

2009年4月3日

流程设计草稿,欢迎拍砖!

Lucene 重建索引流程设计

TangFulin <tangfulin@gmail.com>

一. php client 端:

1. update 与 rebuild 分开

2. update 准实时:insert,update,delete 实时调用更新索引接口(带 primery key 的update 和 delete)

3. rebuild 使用命令行或者 cron 运行,不能使用 web 页面(有运行时间限制),但可以在后台管理系统中作触发(如何防止重复触发?)

二. Java IndexServer:(接受 client 发过来的数据,输出为临时 xml 文件)

1. 日常 update 的 xml 临时文件可以考虑保存在内存文件系统中(保留最近n天的文件debug使用)

2. 更多的处理过程 log (debug 使用,日常监控使用)

3. rebuild 的 xml 临时文件一定要保存在内存文件系统中

4. xml 文件按年或月分目录

5. rebuild 的过程中,update 数据需要为新索引保留一份,等 rebuild 完成后更新新的索引(需要一个 rebuild_update 目录,等搜索切换到使用新的索引后,用该目录替换原来的 update 目录)

三. Java IndexWriter:(读取 update xml 文件,更新索引)

1. update 与 rebuild 分开,以便设置不同的合并因子等参数,以达到最快的 rebuild 速度

2. 每一个索引对应一个 update 文件目录,当索引切换的时候,update 目录跟着切换,以保证索引数据一致

四. Java IndexRebuilder:(读取 rebuild xml 文件,新建索引)

1. rebuild 过程:

a. 正常情况: client 发送 update 数据给 IndexServer ,IndexServer 将数据写入 update 目录,IndexRebuilder 定期扫描 update 目录,读取 xml 文件并更新索引

b. client 发送“重建索引开始”消息给 IndexServer,IndexServer 设置标志位,从当前开始,所有的 update xml 都抄送一份到 rebuild_update 目录。同时给 IndexRebuilder 发送 “重建索引开始” 消息。(消息中能否带有这次重建索引的大致的条目数?可以用来确定派生多少个线程)

c. client 发送重建索引数据给 IndexServer,IndexServer 将这些数据输出到 rebuild 目录下

d. IndexRebuilder 收到 “重建索引开始” 消息后,(根据大致的条目数,相应的派生线程)扫描 rebuild 目录,使用其中的 xml 文件建立索引

e. client 发送“重建索引结束”消息给 IndexServer, IndexServer 转发消息给 IndexRebuilder

f. IndexRebuilder 收到“重建索引结束”消息后,等待所有线程工作完成,然后开始使用 rebuild_update 中的数据更新新的索引

g. IndexRebuilder 更新索引到一个可用状态后(如何判定?某一次列目录发现没有新xml文件?),停止更新,开始 切换到使用新索引

2. 切换到使用新索引过程:

a. IndexRebuilder 发送“停止更新索引”消息给 IndexWriter,后者停止更新旧索引,close 打开的文件

b. IndexRebuilder 拷贝新索引,覆盖旧索引

c. IndexRebuilder 将旧的 update 目录指向 rebuild_update 目录

d. IndexRebuilder 发送“停止抄送 update xml 文件到 rebuild_update” (重建索引完成)命令给 IndexServer,并将 rebuild_update 指向新的空目录

e. IndexRebuilder 发送“重新开始更新索引”消息给 IndexWriter,后者 reopen 索引,并照常更新

f. IndexRebuilder 清除旧索引文件,等待下一次重建索引消息

3. 重建索引的加速:(初步设想)

a. 根据索引大致的条目数,预先派生线程

b. 每个线程单独建立索引,完成后再归并

c. 预先派生线程数目,以及归并策略(1次归并,或者多次,每次把n个归并成1个)需要测试

五. IndexSearch:(读取索引,响应搜索请求)

1. 同步索引:从 IndexWriter 同步到 IndexSearch 上,使用 bash 脚本,rsync

2. reopen:索引更新以后,发消息通知 IndexSearch 重新读入索引,可以使用 curl

fulin 行业案例, 项目管理

软件项目跟踪的实用办法

2009年3月25日

编译:李新
      

  项目计划再好,不过是一张纸。要想项目成功,就得进行跟踪和控制。在项目执行期间,项目经理要象医生治疗病人一样时刻关心项目的健康状态,并及时采取措施进行干预,使其按计划完工。因此,准确地获得项目的状态信息,及时地采取纠正措施是项目过程管理的关键。

如何准确地获得了解项目的状态信息呢?
       我们主要通过跟踪项目活动来获取项目状态信息。所以我们要分析项目中那些事情需要跟踪并记录日志,使用何种工具(方法)获取记录。项目中需要管理的事情可能有百百千,但一般可以分为3类,如果对这3类事情进行跟踪,那项目状态尽在在我军情单位掌控之中。
这3类事情是:
1 计划活动跟踪  2 缺陷跟踪 3 事务跟踪


*计划活动跟踪
计划活动就是有明确完成时间的任务,是项目计划的主体和项目的主要活动。项目跟踪和控制的首要任务就是确保计划好的任务按期完成,最简单办法是建立一包含计划完成时间和实际完成时间的任务表,或者用MS project 来跟踪这些任务。每天或者每周末等等,项目经理检查任务的完成情况,并更新任务表。颗粒度小的任务只有两个状态:完成或者未完成。跨度长的项目我们采用任务完成百分比来跟踪。project 2008 已经是标准工具了。
*缺陷跟踪
软件项目在制品(如文档、代码等)交付前经过测试都会产生大量缺陷,这些缺陷需要管理,并及时修复。这需要建立项目的缺陷跟踪系统,直到需要修复的缺陷全部关闭,产品才能交付。这些缺陷对了解项目的质量也非常关键,因此一定要建立缺陷管理系统。常见的缺陷跟踪系统包括bugzilla,jira,trac等工具,这些工具已经是项目开发必备的,项目经理要充分使用这些信息。
*事务跟踪
项目过程中,总会产生一些计划外的事情,这些事务可能需要大量的协调或者沟通,不解决就会拖延项目的进度,甚至演化为项目的风险。项目经理要及时管理这些事务,并解决。bugzilla和jira都可以用来作事务管理。

项目经理要关注的项目信息报告有那些?
以上三类活动产生了如下3类报告:
1 作业类活动报告 2 项目周报  3项目里程碑报告。
作业类活动报告主要是项目计划活动跟踪、缺陷跟踪、事务跟踪3类活动产生的。项目周报和项目里程碑报告主要是向高层经理和相关人回报和沟通使用。
因此以上3类报告供包含:1 项目计划跟踪报告(每天或者每周) 2 缺陷报告 3事务报告 4项目周报 5里程碑报告 5种项目状态信息报告。前三种报告都可以在通过工具中获得。后两种需要评审或者沟通获得:
项目周报
主要是以周为单位评估项目的状态,如任务完成情况,出现的问题等。
项目里程碑报告
主要是在里程碑处,如需求规格交付;原型交付,概要设计交付,集成测试交付等。召开项目评审会议评估实际的进度、工作量、资源消耗与计划的差异,评估风险等,以及采取的行动。

通过以上5种项目跟踪报告,应该就可以比较准确地获得项目的状态信息了。对项目经理来说,下一步,就是及时采取措施来纠偏项目达到成功!
附:项目周报的一个例子:

缺陷报告的例子:

事务报告例子:

lixin 软件工程, 配置管理, 项目管理

页: 1 2 后页
页: 1 2 后页