FAST具有.NET API,但核心组件是用Python编写的(处理索引文档的处理管道)。挑战在于可靠地与系统通信,同时向其提供大量数据进行索引。
FAST面临的问题有:
1. 当一次输入太多数据时,系统会变得古怪,因为它想要重新索引其数据,此时系统将在数小时内无法访问。这是不可接受的。 2. 不能将所有数据排队并逐个串行地提供,因为这将需要太长时间(几天)。 3. 当FAST无法对项目进行索引时,客户端必须重新提供该项目。为了使其正常工作,系统应调用回调方法来通知客户端发生故障。然而,每当系统超时时,馈送客户端就无法对超时做出反应,因为从未调用过该回调。因此,客户端处于饥饿状态。数据在队列中,但无法传递到系统。队列崩溃。数据丢失。你懂的。
注意事项:
1. 对于小型项目,馈送可能需要几秒钟,对于单个大型项目,可能需要5-8小时。 2. 正在索引的项目既是二进制的,也是基于文本的。 3. 目标是全面索引仅需48-72小时,即必须在周末完成。 4. FAST文档处理管道(Python代码)每个管道大约有30个阶段。截至本篇写作时,共有27个管道。
总之:
主要挑战是以恰当的速度(不要太快,因为可能会崩溃或遇到内存问题;不要太慢,因为这将需要太长时间),同时以并行方式(如异步运行线程)提供大小不同的项目。我认为应该有一个算法来决定何时提供哪些项目以及一次提供多少个项目。并行编程是一个好方法。
还可以有多个“队列”,其中每个队列(进程)专门用于加载特定大小的项目,然后逐个提供(在工作线程中)。
我很想知道是否有人做过这样的事情,或者您如何解决这个问题。
编辑:再次强调,我不是要“修复”FAST ESP或改进其内部工作原理。挑战在于有效地使用它!