我正在给构建Solr索引的程序添加一个特性。系统是多线程的,所以搜索条目每次都会随机创建。 Solr索引也需要拆分为多个文件,因为如果用户试图上传一个大文件,服务器可能会耗尽内存。
问题:
为了保持系统可靠,使事情变得更容易整体,产生的Solr的索引文件必须是相同的,无论他们是在处理什么样的顺序该指数需要平衡。跨文件(或足够接近平衡),并有最大数量的条目。如果文件超出了最大条目数量,则需要将其分割。这些文件也将在运行中更新,因此将添加,删除和更改条目。
只需要什么:
我在寻找一个可以为这些要求采用的算法。我想我需要某种B树,但我不知道任何适合这个特定要求的B树变体。
有没有可以帮助满足这些要求的算法或数据结构?
“Solr索引文件需要相同”是什么意思?你的意思是说,不管他们处理的顺序如何,这些文件必须是相同的?或者,文件的内容一旦被读取和处理后,必须创建相同的结果? –
默认的Lucene索引文件只能追加,所以如果你以不同的顺序添加东西,你会得到不同的文件(内部docid也会不同)。您可以创建自己的编解码器来自己序列化和反序列化内容。如果你有这些要求,你可以扩展吗?您是否在Solr之外建立了Lucene索引,并且您如何构建它?你可以在磁盘和内存中创建一个结构,然后按顺序将该结构序列化为Lucene?在这种情况下,每个线程中都有一个二叉树,然后将其合并到磁盘。 – MatsLindh
通过“索尔索引文件需要是相同的”,我的意思是文件本身必须是相同的。这些要求是为了证明程序的可靠性和完整性。我不知道Solr索引是如何创建的,因为我们没有进行规划。不过,我可以说这些文件将采用JSON格式。只要结果文件一致,我们就可以在磁盘和内存中创建结构。 – user489481