29. 实现 (1/8) 架构示意图 端口 1985 IndexRebuilder IndexUpdater Searcher 配置文件 DAL 数据更新 同步通知搜索 搜索客户端调用 Searcher 的 API 搜索管理后台 发出开始重建索引命令 cron 发送重建数据 端口 1986 IndexReceiver Rebuild xml data Update xml data
30. 实现 (1/8) 架构示意图 端口 1985 IndexRebuilder IndexUpdater Searcher 配置文件 DAL 数据更新 同步通知搜索 搜索客户端调用 Searcher 的 API 搜索管理后台 发出开始重建索引命令 cron 发送重建数据 端口 1986 IndexReceiver Rebuild xml data Update xml data
32. 实现 (1/8) 架构示意图 端口 1985 IndexRebuilder IndexUpdater Searcher 配置文件 DAL 数据更新 同步通知搜索 搜索客户端调用 Searcher 的 API 搜索管理后台 发出开始重建索引命令 cron 发送重建数据 端口 1986 Rebuild xml data Update xml data
34. 实现 (1/8) 架构示意图 端口 1985 IndexRebuilder Searcher 配置文件 DAL 数据更新 同步通知搜索 搜索客户端调用 Searcher 的 API 搜索管理后台 发出开始重建索引命令 cron 发送重建数据 端口 1986 Rebuild xml data Update xml data
36. 实现 (5/8) IndexRebuilder 切换索引过程 Updater 删除自己当前的索引和未更新完的 xml 文件 Updater 将 rebuilder 的索引和 rebuild-update 的 xml 文件 “据为己有” 通知 receiver 停止抄送 继续正常的数据更新过程 可以证明这个过程中,不会有数据丢失,也不会有数据重复 前提: updater 的 xml 文件和 rebuild-update 的 xml 文件是完全相同的(包括文件名和数据) t3-t4 : 数据来自 rebuild-update t4-t5 : rebuild-update 中的数据可以被直接忽略
37. 实现 (1/8) 架构示意图 端口 1985 Searcher 配置文件 DAL 数据更新 同步通知搜索 搜索客户端调用 Searcher 的 API 搜索管理后台 发出开始重建索引命令 cron 发送重建数据 端口 1986 Rebuild xml data Update xml data Transfer
48. 开发中的一些收获 (1/5) FileChannel.transferTo 拷贝文件失败: Fewer than the requested number of bytes are transferred if the target channel is non-blocking and it has fewer than count bytes free in its output buffer. 解决: check copied size ,断点续传 根据 lucene 索引文件更新的特性 ( 每次更新一个新版本的时候,都会新建一个全新的文件 ) ,使用 cp -l 链接替代真实的大文件拷贝动作
49. 开发中的一些收获 (2/5) Kill 的问题 Never kill smart frog, don't kill -9 Java use Runtime.getRuntime().addShutdownHook to do the cleaning things Lucene IndexWrite need close! server 程序,都应该考虑信号捕捉和处理的问题( java 程序容易忽略这个问题)
55. Lucene 3.0 Lucene 2.9 Searchable.search(Weight, Filter, Collector): collector 终于可用了 Added new MultiReaderHitCollector: 解决 group by near real-time search via IndexWriter.getReader(): 单机方案 Lucene 3.0 Del deprecated apis: 大版本升级要谨慎 Port to Java5: 应该会有性能的提升 Lucene 3.1 Near Realtime Search (using a built in RAMDirectory): 还是单机方案 Complete overhaul of FieldCache API/Implementation: 等到花儿也谢了