28

Lucene 索引滚动流程设计

TangFulin <tangfulin@gmail.com>

一. Index Writer:

1. 这里的 Writer 包括 Index Updater 和 Index Rebuilder ,但 Rebuilder 产生的索引文件不直接传送给 Searcher 使用,
而是覆盖 Updater 的索引,由 Updater 统一处理后续的流程

2. IndexUpdaterScheduler 每隔一段时间会设置 copy out timer 标识。

3. Updater 每次处理完一批 xml 文件后会查看 copy out timer 标识是否已经被设置,
如果是,则将当前的索引拷贝一份到 src-snap 目录下 yyyyMMddHHmm 格式的子目录中

4. Updater 为单线程,每次处理完一批 xml 后都会调用 optimizeAndCloseIdx ,所以可以保证 idx 数据是完整的

... (全文...)

24

假设我们定义了一个变量为:

file=/dir1/dir2/dir3/my.file.txt

我们可以用 ${ } 分别替换获得不同的值:

  • ${file#*/}:拿掉第一条 / 及其左边的字串:dir1/dir2/dir3/my.file.txt
  • ${file##*/}:拿掉最后一条 / 及其左边的字串:my.file.txt
  • ${file#*.}:拿掉第一个 . 及其左边的字串:file.txt
  • ${file##*.}:拿掉最后一个 . 及其左边的字串:txt
  • ${file%/*}:拿掉最后一条 / 及其右边的字串:/dir1/dir2/dir3
  • ${file%/*}:拿掉第一条 / 及其右边的字串:(空值)
  • ${file%.*}:拿掉最后一个 . 及其右边的字串 ... (全文...)
22

RSync 算法是澳大利亚人 Andrew Tridgell (samba的作者)发明的,按照 Andrew Tridgell 自己的话,这个算法只需要半个小时就能够理解,但是花费了他几年时间才研究出来。

Rsync 算法大概原理:(目标:把 HostA 上的FileNew 同步到 HostB 上 FileOld)

1) Host-B把File-Old划分成不重合的大小为K字节的若干块,不足K字节的结尾部分加上Padding,然后对每一块求弱Hash和强Hash。弱Hash就是说很有可能 ... (全文...)

17

机器配置:

uname -a :

Linux eshequn-SV06-A11 2.6.21.5-smp #1 SMP Sun Jan 27 23:51:02 CST 2008 i686 Intel(R) Xeon(TM) CPU 3.06GHz GenuineIntel GNU/Linux

cpuinfo:

processor        : 2
model name    : Intel(R) Xeon(TM) CPU 3.06GHz

meminfo:

MemTotal:      6234308 kB

disk info:

/dev/sda1 on / type reiserfs (rw,noatime)

lucene 配置

writer = new IndexWriter(indexDir, paodingAnalyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
writer.setMaxBufferedDocs(10000);
writer.setUseCompoundFile(true);

(全文...)

07

fulin.org 域名遭恶意抢注,愤怒却又无可奈何。重新注册了 fullin.org ,中间多了一个 L 。

其实我从年后就开始折腾域名的事情了。域名是在新网注册的,而当初注册 birdring.org 的时候,在万网里留了320块钱。于是就想把域名转到万网,用余下的钱来续费。可是找了半天,还是没有找到如何转域名,甚至用记忆中的用户名和密码都无法登录新网了。打新网的客服电话也没有用,一大断的语音提示,平白浪费电话费罢了。

稍微一犹豫,域名进入了赎回期。这个时候在 whois 记录上看到有 update 操作,难道是新网或者代理商自己续费了?我很愤怒的在新 ... (全文...)

03

一. 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 文件按年或月分目录

... (全文...)